一个网卡绑定两个IP,怎么用gethostbyname函数获取这两个IP
一个网卡绑定两个IP,如何用gethostbyname函数获取这两个IP
我在写NAT检测的程序,服务器端需要一个网卡上绑定了两个IP,目前只能用gethostbyname函数获取一个,我怎么才能将这两个IP都获取呢?
------解决方案--------------------
我在写NAT检测的程序,服务器端需要一个网卡上绑定了两个IP,目前只能用gethostbyname函数获取一个,我怎么才能将这两个IP都获取呢?
------解决方案--------------------
- C/C++ code
//--------------------------------// // 作者:刘文涛 // // 书籍:《网络安全编程技术与实例》 // //--------------------------------// #include "winsock.h" #include <stdio.h> #pragma comment(lib,"Ws2_32.lib") void main() { WSADATA wsaData; char HostName[255]; HOSTENT *Hostent; int Result; Result = WSAStartup(MAKEWORD(2, 1), &wsaData); if (Result == SOCKET_ERROR) { printf("WSAStartup failed with error %d\n", Result); return ; } Result = gethostname(HostName, 255); printf("主机名称为:%s\n", HostName); if (Result == SOCKET_ERROR) { printf("gethostname failed with error %d\n", WSAGetLastError()); return ; } Hostent = (struct hostent*)malloc(sizeof(struct hostent)); Hostent = gethostbyname(HostName); for (int i = 0;; i++) { if(!Hostent->h_addr_list[i])//rendb add break; printf("第%d个网络接口:\n", i + 1); printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)(Hostent->h_addr_list[i]))); /*if (Hostent->h_addr_list[i] + Hostent->h_length >= Hostent->h_name) { break; } */ //very bad!!! confused and error oriented } //WSASocket i=0;//rendb add char **ptr=Hostent->h_addr_list; for(; ptr[i];i++) { printf("\n\n 2第%d个网络接口:\n", i ); printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)ptr[i])); } if (WSACleanup() == SOCKET_ERROR) { printf("WSACleanup failed with error %d\n", WSAGetLastError()); return ; } }