获取网络域名的IP地址

输入网络域名 获得相应服务器IP地址

第一种方法通过获取主机信息 第二种方法通过ping命令

执行方式 cmd命令进入.exe程序所在位置  然后程序名+网络域名执行

// 获取ip地址.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <winsock.h>
#include <stdlib.h>
#include <filesystem>
#include <stdio.h>

#define OK 0
#define ERR -1
#define IP_BUF_LEN 16
#define CMD_LINE_LEN 64
#pragma comment(lib,"ws2_32")

int GetIpBySock(char szHost[],char szIp[])//入参主机名 出参IP地址
{
	int iRes;
	WSADATA stWsa;
	HOSTENT *pHost=NULL;//HOSTENT保存主机信息的结构体

	if(szHost==NULL||szIp==NULL)
	{
		return ERR;
	}


	//0x0101表示版本号 1.1
	iRes=WSAStartup(0x0101,&stWsa);//返回0成功
	if(iRes!=OK)
	{
		return ERR;
	}
	//gethostbyname 返回一个指针
	pHost=gethostbyname(szHost);
	if(pHost==NULL)
	{
		return ERR;
	}
	_snprintf(szIp,IP_BUF_LEN-1,"%d.%d.%d.%d",pHost->h_addr_list[0][0]&0xff,
		pHost->h_addr_list[0][1]&0xff,
		pHost->h_addr_list[0][2]&0xff,
		pHost->h_addr_list[0][3]&0xff);
	WSACleanup();
	return OK;
}

int GetIpByCmd(char szHost[],char szIp[])
{
	char szCmd[CMD_LINE_LEN]={0};
	char szFileName[]="ipTmp";
	FILE *pFile=NULL;//定义文件指针
	int cTmp;
	int iHit=0;
	int iOffset=0;

	if(szHost==NULL||szIp==NULL)
	{
		return ERR;
	}
	_snprintf(szCmd,CMD_LINE_LEN-1,"ping %s > %s",szHost,szFileName);
	//system事实上就是调用windows命令
	system(szCmd);//在cmd中执行szCmd指令
	pFile=fopen(szFileName,"r");//打开文件  只读方式
	if(pFile == NULL)
	{
		return ERR;
	}
	while((cTmp=(fgetc(pFile)))!=EOF)//不能用char
	{
		//强制转换 int转为char 
		if(iHit==1)
		{
			if((char)cTmp==']')
				break;
			*(szIp+iOffset)=(char)cTmp;
			iOffset++;
		}
		else if((char)cTmp=='[')
		{
			iHit=1;
		}

	}//通过ping命令获取信息格式
	unlink(szFileName);//删除文件
	fclose(pFile);
	return OK;
}


//入参 程序名字
void usage(char szProjName[])
{
	printf("用法: \n \t\t %s HostName\n",szProjName);
}


int _tmain(int argc, _TCHAR* argv[])
{
	if(argc!=2)
	{
		usage(argv[0]);
		return OK;
	}
	char szIpAddr[IP_BUF_LEN]={0};
	//char szIpAddr[IP_BUF_LEN];
	GetIpByCmd(argv[1],szIpAddr);
	//GetIpBySock(argv[1],szIpAddr);
	printf("HostName: %s\n",argv[1]);
	printf("IP: %s\n",szIpAddr); 

	return 0;
}

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值