/**//*************************************************** 调试环境:VC++6.0 程序名称:host.cpp 程序功能:该程序使用网络信息获取函数取得主机的有关信息, 使用以下三个函数: gethostname() gethostbyname() getprotobyname() *************************************changshoumeng*/ #include <winsock2.h> #include <stdio.h> #include <stdlib.h> #pragma comment(lib,"ws2_32.lib")
void main() { WSADATA wsaData; int n; char hostname[256]; hostent *pHostent;//主机信息指针 protoent *pProtoent;//主机协议指针 struct sockaddr_in sa;//本机地址信息 if(WSAStartup(MAKEWORD(2,2),&wsaData) !=0) { printf("Failed to load Winsock. \n"); return ; } printf("--------------------\n");
if(gethostname(hostname,sizeof(hostname)) !=0) { printf("gethostname() Error:%d \n",WSAGetLastError()); return; }
printf("以下信息是由gethostname()函数取得\n "); printf("Local host name: %s \n",hostname); printf("-------------------\n"); pHostent =gethostbyname(hostname);//返回指定主机名的信息 if(pHostent ==NULL) { printf("gethostbyname() Error: %u \n",WSAGetLastError()); return; } printf("以下信息由gethostbyname()函数取得\n"); printf("name:%s\n aliases:%d\n addrtype:%d\n length:%d\n", pHostent->h_name,//名称 pHostent->h_aliases,//别名 pHostent->h_addrtype,//地址类型 pHostent->h_length );//地址长度
for(n=0;pHostent->h_addr_list[n];n++) { memcpy(&sa.sin_addr.s_addr,pHostent->h_addr_list[n], pHostent->h_length); printf("Address:%s \n",inet_ntoa(sa.sin_addr));//主机地址即IP地址 } printf("-------------------\n");
pProtoent = getprotobyname("tcp");//返回指定协议的信息 if(pProtoent == NULL) { printf("getprotobyname() Error: %u \n",WSAGetLastError()); return; } printf("以下信息由 getprotobyname()函数取得 \n"); printf("name:%s \n proto:%d \n", pProtoent->p_name,//协议名 pProtoent->p_proto );//以主机顺序排列的协议号 for(n=0;pProtoent->p_aliases[n];n++) { printf("aliases: %s \n",pProtoent->p_aliases[n]); }
WSACleanup(); }
|