自ホスト名と IP アドレスを得る
(1999/08/15 [日])
ネットワークにつないだマシンはそれぞれの 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