如何在VC或Linux下获取外网IP(本地配置,路由+PC,路由直接拨号上网)最好能给点demo 的code,谢谢各位先
解决方案 »
- 关于cab打包中INF文件制定cab安装路径的问题
- 不知咋的,今天听 黄家驹的《海阔天空》,特别感慨
- 求助。怎么计算字符串长度?
- CSDN的广告转帖,号称送积分
- 请教一个很有意思的问题,马上给分啊
- 怎么改变EDIT控件的边框颜色?
- 各位大虾 :有用过ActiveSkin 的吗 有vc下的实例吗 请各位指点啊(gaov)
- 我想买个二手笔记本作asm,vc++编程,现在有两个算合适,我应选??????
- 关于取得窗口边框的值的问题,项目还有2天就要交了,大哥们,帮帮我吧
- 有个人找我让我帮他做安装程序,可我发现他给我发的邮件中含有DanSnowB7这个软件,是做什么的?
- 求教!关于CRuntimeClass的一个问题!
- 请教一个关于CImageList控件的问题
PING wmaip.qq163.com.fastwebcdn.com (219.153.15.76) 56(84) bytes of data.
64 bytes from 76.15.153.219.broad.cq.cq.dynamic.163data.com.cn (219.153.15.76): icmp_seq=1 ttl=53 time=47.5 ms
这个帖子,第一贴给出网页,显示的本机局域网地址。不是公网地址。下面的socket代码,我编译过了,但是执行connect成功 sd句柄获取ok。
但是发送send失败,所以程序只跑到这里int iRet = send(sd,p,iLen,0);
char sendstr[]="GET /ip2city.asp HTTP/1.1\r\nAccept: */*\r\nReferer: ******\r\nUser-Agent: Mozilla/4.0\r\nHost: www.ip138.com\r\nConnection: close\r\n\r\n\0";
char* p;
int iLen = strlen(sendstr);
p = sendstr;
while (iLen){
int iRet = send(sd,p,iLen,0);
if (iRet > 0) {
p += iRet;
iLen -= iRet;
continue;
}
return;
}
有以下两个问题。
1)什么意思?怎么理解?"GET /ip2city.asp HTTP/1.1\r\nAccept: */*\r\nReferer: ******\r\nUser-Agent: Mozilla/4.0\r\nHost: www.ip138.com\r\nConnection: close\r\n\r\n\0";
2)可有其他代码可以参考?或者上面的代码如何修改?高人再帮偶看看,谢谢了。
我打开了 www.ip138.com 这个网页,但是里面显示是
www.ip138.com IP查询(搜索IP地址的地理位置)
您的IP地址是:[192.168.58.135]
可是这个是我的局域网的地址啊???
http://www1.xise.cn/ip/ip.htm
自己网上搜索一下可以显示IP的网址
我查了这个ip了
http://www.linkwan.com/gb/请输入要查询的IP或域名:
查询输入 192.168.58.135
查询定位 内部网,非internet有效地址 我用ipconfig看过,这个192.168.58.135确实是内网地址。
219.153.15.76 这个才是我们的外网地址。我觉得用代码或者什么方法,查出来应该是219.153.15.76才对。但是现在我看了刚才的网页,显示是有问题的。我要获取的是外部网地址。继续Google soket的代码。看看能否找到。各位高人能指点下,告诉偶,在线Google + 在线等。
恩,Google的结果都是需要发消息给外网的。我用了一个code,5楼上的结果是send出错。对这个字符串的流的含义不是很明白。所以没有怎么改,如果哪位知道,帮我看看这段程序怎么改比较合理,谢谢先 WSAData wsaDat;
short int Port = 80;
WSAStartup(MAKEWORD(1,1),&wsaDat);
SOCKET sd = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN sockAddr;
memset((void*)&sockAddr,0,sizeof(sockAddr));
sockAddr.sin_family=AF_INET;
sockAddr.sin_port=htons(Port);
sockAddr.sin_addr.s_addr=inet_addr("219.153.15.76");
connect(sd,
(LPSOCKADDR)&sockAddr,
sizeof(sockAddr));
char sendstr[]="GET /ip2city.asp HTTP/1.1\r\nAccept: */*\r\nReferer: ******\r\nUser-Agent: Mozilla/4.0\r\nHost: www.ip138.com\r\nConnection: close\r\n\r\n\0";
char* p;
int iLen = strlen(sendstr);
p = sendstr;
while (iLen){
int iRet = send(sd,p,iLen,0);
if (iRet > 0) {
p += iRet;
iLen -= iRet;
continue;
}
return 0;
}
char recvstr[1024];
memset(recvstr,0,1024);
p = recvstr;
char* iIndex_Head ;
iLen = 1024;
int need_len = -1;
while (iLen){
int iRet = recv(sd,p,iLen,0);
if (iRet <= 0) {
return 0;
}
p += iRet;
iLen -= iRet;
if ((iIndex_Head = strstr(recvstr,"\r\n\r\n"))&&(need_len==-1)) {
char* iIndex = strstr(recvstr,"Content-Length:");
if (!iIndex) {
continue;
}
char *p1 = iIndex + strlen("Content-Length:");
need_len = iIndex_Head - recvstr + 2 + atol(p1);
}
if (1024 - iLen >=need_len) { break;
}
}
char *p1 = strstr(iIndex_Head,"[");
char *p0 = strstr(p1,"]");
*p0 = '\0';
printf("IP=%s",p1+1);
closesocket(sd);
WSACleanup();
这个是获取内网IP的,不是公网IP的,同样感谢关注。