通过gethostbyaddr来获取计算机的名称。如下代码:
#include
<
stdio.h
>
#include < winsock2.h >
#include < Ws2tcpip.h >
#pragma comment(lib,"ws2_32.lib")
int main( int argc, char * argv[])
... {
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) ...{
/**//* Tell the user that we could not find a usable */
/**//* WinSock DLL. */
return 1;
}
/**//* Confirm that the WinSock DLL supports 2.2.*/
/**//* Note that if the DLL supports versions later */
/**//* than 2.2 in addition to 2.2, it will still return */
/**//* 2.2 in wVersion since that is the version we */
/**//* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) ...{
/**//* Tell the user that we could not find a usable */
/**//* WinSock DLL. */
WSACleanup( );
return 1;
}
struct hostent *host;
char **alias = NULL;
if(argc<2)
...{
fprintf(stderr,"Usage:%s hostname|ip.. a",argv[0]);
return 0;
}
argv++;
for(;*argv!=NULL;argv++)
...{
unsigned long ddd = inet_addr(*argv);
if(ddd != INADDR_NONE)
...{
host=gethostbyaddr((char *)&ddd,4,AF_INET);
}
else
...{
host=gethostbyname(*argv);
}
if(host==NULL)
...{
fprintf(stderr,"No address information of %s ",*argv);
return 1;
}
printf("Official host name %s ",host->h_name);
printf("Name aliases:");
for(alias=host->h_aliases;*alias!=NULL;alias++)
printf("%s ,",*alias);
printf(" Ip address:");
for(alias=host->h_addr_list;*alias!=NULL;alias++)
printf("%s ,",inet_ntoa(*(struct in_addr *)(*alias)));
}
WSACleanup();
return 1;
}
#include < winsock2.h >
#include < Ws2tcpip.h >
#pragma comment(lib,"ws2_32.lib")
int main( int argc, char * argv[])
... {
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) ...{
/**//* Tell the user that we could not find a usable */
/**//* WinSock DLL. */
return 1;
}
/**//* Confirm that the WinSock DLL supports 2.2.*/
/**//* Note that if the DLL supports versions later */
/**//* than 2.2 in addition to 2.2, it will still return */
/**//* 2.2 in wVersion since that is the version we */
/**//* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) ...{
/**//* Tell the user that we could not find a usable */
/**//* WinSock DLL. */
WSACleanup( );
return 1;
}
struct hostent *host;
char **alias = NULL;
if(argc<2)
...{
fprintf(stderr,"Usage:%s hostname|ip.. a",argv[0]);
return 0;
}
argv++;
for(;*argv!=NULL;argv++)
...{
unsigned long ddd = inet_addr(*argv);
if(ddd != INADDR_NONE)
...{
host=gethostbyaddr((char *)&ddd,4,AF_INET);
}
else
...{
host=gethostbyname(*argv);
}
if(host==NULL)
...{
fprintf(stderr,"No address information of %s ",*argv);
return 1;
}
printf("Official host name %s ",host->h_name);
printf("Name aliases:");
for(alias=host->h_aliases;*alias!=NULL;alias++)
printf("%s ,",*alias);
printf(" Ip address:");
for(alias=host->h_addr_list;*alias!=NULL;alias++)
printf("%s ,",inet_ntoa(*(struct in_addr *)(*alias)));
}
WSACleanup();
return 1;
}