ネットワークにつないだマシンはそれぞれの IP アドレスを持っています。そしてたいていはマシン名も持っています。GUI から見るには、WinIpCfg.exe などを実行すれば、見ることができますが、プログラムからそれを調べるにはどうすればよいのでしょうか。そのためには、WinSock に含まれる gethostbyname を使用します。gethostbyname を実行することでホスト名や IP アドレスなどをすべて取得することができます。ただし gethostbyname は引数にホスト名が必要です。そこで取り合えずのホスト名を得るため gethostname を使用します。サンプルプログラムを以下に示します。
#define STRICT
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
main()
{
char name[256];
WSADATA wsad;
struct hostent *hs;
struct in_addr addr;
int i;
//WinSock の初期化
if(WSAStartup(0x0101, &wsad)) return 1;
//ホスト名を得る(複数ある場合にはそのうちの一つ)
gethostname(name,sizeof(name));
//全ホスト名,IP アドレスを得る
hs = gethostbyname(name);
//情報の表示
//・ホスト名の表示
printf("host name = %s\n", hs->h_name);
//・ホストの別名の表示
if(hs->h_aliases) for(i = 0; hs->h_aliases[i]; i++){
printf(" %s\n", hs->h_aliases[i]);
}
//・全 IP アドレスの表示
printf("ip address =");
if(hs->h_addr_list) for(i = 0; hs->h_addr_list[i]; i++){
addr.S_un.S_addr = *(u_long*)hs->h_addr_list[i];
printf(" %s\n", inet_ntoa(addr));
}
//WinSock の後始末
WSACleanup();
return 0;
}
|
by seclan