输入网络域名 获得相应服务器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;
}