VC 获取本机外网ip
场景:VC++ 获取本机外网IP解决思路
VC++ 获取本机外网IP
恳请高手赐教如何使用VC++编程获取本机外网IP地址,在线等待,急!
------解决方案--------------------
这里有完整例子
http://www.vckbase.com/code/viewcode.asp?id=2849
------解决方案--------------------
需要在公网上有一台服务器,程序向改服务器发包,由服务器返回IP地址。当然也可以借助别人的服务器,但如果哪天该服务器撤掉了或者对信息结构做了调整,你的程序也必须更新。
------解决方案--------------------
完整代码:
VC++ 获取本机外网IP
恳请高手赐教如何使用VC++编程获取本机外网IP地址,在线等待,急!
------解决方案--------------------
这里有完整例子
http://www.vckbase.com/code/viewcode.asp?id=2849
------解决方案--------------------
需要在公网上有一台服务器,程序向改服务器发包,由服务器返回IP地址。当然也可以借助别人的服务器,但如果哪天该服务器撤掉了或者对信息结构做了调整,你的程序也必须更新。
------解决方案--------------------
完整代码:
- C/C++ code
#include <stdio.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") int GetLocalIP(void) { WSADATA wsaDataqq; WSAStartup(MAKEWORD(1,1),&wsaDataqq); PHOSTENT hostinfo; char name[512] = {0}; in_addr dest; if(gethostname (name,sizeof(name)) != 0 || (hostinfo = gethostbyname(name)) == NULL) return false; for(int a=0; hostinfo->h_addr_list[a] != NULL ;a++) { memcpy(&dest, hostinfo->h_addr_list[a], hostinfo->h_length); if (a==0) printf("本地IP是:\t%s\n",inet_ntoa(dest)); else printf("外网IP是:\t%s\n",inet_ntoa(dest)); } WSACleanup(); } void main(int argc, char **argv) { GetLocalIP(); }
------解决方案--------------------
接楼上,如果你在windows下,你可以用WinPcap开发包在vc下写一个自定义数据包发给外网服务器,由服务器返回IP地址,也可以利用NDIS驱动程序实现,但是NDIS驱动程序比较麻烦,不过现在又一个基于NDIS开发而来的驱动开发库(该开发库在windows提供的一个无功能样本驱动程序扩展开发而来,完全由中国人自己开发而来,可以试一下),可以在http://home.cuit.edu.cn/Js/PZ7/GRT/winnetcatchwork/default.htm这里获得,有比较全的使用里程,以及驱动程序源代码,该驱动开发库属于开源,可放心使用。
当然如果在Linux下,你可以试一下用libpcap写,也可以基于原始套接字,都不难。
Just do it youself.
------解决方案--------------------
struct sockaddr OtherSockAddr;
int len = sizeof(OtherSockAddr);
getpeername(iSock,&OtherSockAddr,&len);
//获取ip、端口
inet_ntoa(((sockaddr_in*)&OtherSockAddr)->sin_addr)
ntohs(((sockaddr_in*)&OtherSockAddr)->sin_port