gethostname の後に gethostbyname を使用して、ローカル インターフェイスの内部 IP を取得できます。
ただし、この返された IP は、外部 IP とは異なる場合があります。外部 IP を取得するには、外部 IP が何であるかを知らせる外部サーバーと通信する必要があります。外部 IP はあなたのものではなく、ルーターであるためです。
//Example: b1 == 192, b2 == 168, b3 == 0, b4 == 100
struct IPv4
{
unsigned char b1, b2, b3, b4;
};
bool getMyIP(IPv4 & myIP)
{
char szBuffer[1024];
#ifdef WIN32
WSADATA wsaData;
WORD wVersionRequested = MAKEWORD(2, 0);
if(::WSAStartup(wVersionRequested, &wsaData) != 0)
return false;
#endif
if(gethostname(szBuffer, sizeof(szBuffer)) == SOCKET_ERROR)
{
#ifdef WIN32
WSACleanup();
#endif
return false;
}
struct hostent *host = gethostbyname(szBuffer);
if(host == NULL)
{
#ifdef WIN32
WSACleanup();
#endif
return false;
}
//Obtain the computer's IP
myIP.b1 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b1;
myIP.b2 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b2;
myIP.b3 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b3;
myIP.b4 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b4;
#ifdef WIN32
WSACleanup();
#endif
return true;
}
また、常にローカル マシンを表す 127.0.0.1 を使用することもできます。
Windows のサブネット マスク:
次のレジストリ エントリのサブキーを照会することで、サブネット マスク (およびゲートウェイとその他の情報) を取得できます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
レジストリ値 SubnetMask を探します。
Windows でインターフェイス情報を取得するその他の方法:
次のオプションを使用して、探している情報を取得することもできます
。