如何获得UPnP的内部IP,外部IP和默认网关

我想知道如何去得到:

  • 内部IP地址;
  • 外部IP地址; 和
  • 默认网关

Windows(WinSock)和Unix系统中。

提前致谢,

Solutions Collecting From Web of "如何获得UPnP的内部IP,外部IP和默认网关"

在Windows和UNIX上没有通用的机制。 在Windows下,你想从GetIfTable()开始。 在大多数UNIX系统下,尝试getifaddrs() 。 这些将给你各种各样的东西,如每个接口的IP地址。

我不知道如何获得默认网关。 我猜可以通过调用sysctl 。 您可能需要从netstat实用程序的源代码开始。

外部公共地址是电脑从来不知道的东西。 唯一的办法是连接到互联网上的东西,并告诉你你来自哪个地址。 这是IPNAT的经典问题之一。

解决了感谢: http : //www.codeguru.com/forum/showthread.php? t=233261


 #include <winsock2.h> #include <stdio.h> #include <stdlib.h> #pragma comment(lib, "ws2_32.lib") int main(int nArgumentCount, char **ppArguments) { WSADATA WSAData; // Initialize WinSock DLL if(WSAStartup(MAKEWORD(1, 0), &WSAData)) { // Error handling } // Get local host name char szHostName[128] = ""; if(gethostname(szHostName, sizeof(szHostName))) { // Error handling -> call 'WSAGetLastError()' } SOCKADDR_IN socketAddress; hostent *pHost = 0; // Try to get the host ent pHost = gethostbyname(szHostName); if(!pHost) { // Error handling -> call 'WSAGetLastError()' } char ppszIPAddresses[10][16]; // maximum of ten IP addresses for(int iCnt = 0; (pHost->h_addr_list[iCnt]) && (iCnt < 10); ++iCnt) { memcpy(&socketAddress.sin_addr, pHost->h_addr_list[iCnt], pHost->h_length); strcpy(ppszIPAddresses[iCnt], inet_ntoa(socketAddress.sin_addr)); printf("Found interface address: %s\n", ppszIPAddresses[iCnt]); } // Cleanup WSACleanup(); } 

Linux的:

 ifconfig -a gives internal ip netstat -a gives default gateway 

视窗:

 ipconfig /all gives internal ip netstat -a gives default gateway 

我不知道如何确定任何一个系统的外部IP