如何在VC或Linux下获取外网IP(本地配置,路由+PC,路由直接拨号上网)最好能给点demo 的code,谢谢各位先

解决方案 »

  1.   

    访问一个可以返回IP的网址,根据返回结果获得,www.ip138.com等
      

  2.   

    谢谢oyljerry,网上Google了一些,确实也是这么说的,也有几个可用的小软件,但是都是bin文件。现在想最好能有个socket的code,来获取这些信息,而不是通过一些Linux或者Windows的命令。不知道该如何写,大侠们能否提示,或给点代码片段,研究研究?ping www.ip138.com
    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
      

  3.   

    http://topic.csdn.net/u/20080618/11/87c08057-f0e8-4da6-8921-9750261ba105.html
      

  4.   


    这个帖子,第一贴给出网页,显示的本机局域网地址。不是公网地址。下面的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)可有其他代码可以参考?或者上面的代码如何修改?高人再帮偶看看,谢谢了。
      

  5.   

    把www.ip138.com的网页下载下来,分析下网页即可
      

  6.   


    我打开了 www.ip138.com 这个网页,但是里面显示是
    www.ip138.com IP查询(搜索IP地址的地理位置) 
    您的IP地址是:[192.168.58.135]
    可是这个是我的局域网的地址啊???
     
      

  7.   


    http://www1.xise.cn/ip/ip.htm
    自己网上搜索一下可以显示IP的网址
      

  8.   


    我查了这个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 + 在线等。
     
     
     
      

  9.   


    恩,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();
      

  10.   

    http://hi.baidu.com/eros412/blog/item/cb0183cc2be3aa1300e9287e.html
      

  11.   


    这个是获取内网IP的,不是公网IP的,同样感谢关注。
      

  12.   

    最近没有怎么上来,帖子也沉了,我知道ping外网可以获取,但是我想在想要的是socket代码。对网络不熟悉,上面的代码我执行过,得到的是内网的IP。高人给点指点。