我想知道如何获得:
在Windows(WinSock)和Unix系统中。
提前致谢,
答案 0 :(得分:1)
没有适用于Windows和UNIX的通用机制。在Windows下,您希望以GetIfTable()
开头。在大多数UNIX系统下,请尝试getifaddrs()
。这些将为您提供各种功能,如每个接口的IP地址。
我不确定如何获得默认网关。我猜它可以通过sysctl
的一些调用来获得。您可能希望从the netstat utility的源代码开始。
外部公共地址是计算机永远不会知道的。唯一的方法是连接到互联网上的东西,让它告诉你你来自哪个地址。这是IPNAT的经典问题之一。
答案 1 :(得分:1)
解决了谢谢: 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();
}
答案 2 :(得分:0)
Linux的:
ifconfig -a gives internal ip
netstat -a gives default gateway
视窗:
ipconfig /all gives internal ip
netstat -a gives default gateway
我不确定如何在两个系统中明确确定外部IP