1. 程式人生 > >獲取網路域名的IP地址

獲取網路域名的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;
}