獲取網路域名的IP地址
阿新 • • 發佈:2019-02-10
輸入網路域名 獲得相應伺服器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; }