举两个例子:(1)主机上同时装有网卡和 Modem,网卡设置了 IP 地址连接内网,Modem 已经拨号并连通了 Internet,如何得到此时可用 Internet 连接的 IP,而不是网卡的 IP?(2)主机上装了一块网卡,网卡设置了 192.168.0.23 的 IP 用于连接内网,然后通过网通拨号程序拨号连通 Internet,此时网卡又有了一个合法外部 IP,如何得到此时可用 Internet 连接的 IP,而不是网卡用来连接居域网的 IP?我想大概这两种情况用的解决方法(API)是一样的,但是不知道如何得到,请大家帮忙,解决后马上给分!

解决方案 »

  1.   

    gz,有个问题,2中你用Modem联上Internet上之后,是谁给你的网卡又分配了一个合法的外部IP的?
      

  2.   

    to fangprog:不知道你有没有用过网通,它好象使用 PPP 协议,应该是动态分配来的吧。
      

  3.   

    看看这个吧。
    http://www.csdn.net/expert/topic/881/881170.xml?temp=.3162348
      

  4.   

    我的 VC6 没有 Iphlpapi.h 和 Iphlpapi.lib,是不是要更新 Platform SDK?
      

  5.   

    to wuxuan(真心英雄):请看一下这个:
    http://www.vckbase.com/document/viewdoc.asp?id=435这种方法跟你说的那种方法效果一样吗?另外能给我发一份 Iphlpapi.h 和 Iphlpapi.lib 吗?[email protected],谢谢!
      

  6.   

    呵呵,好像都和问题有些出入,问题是如何知道那个IP有效。
    如在(1)中就应该返回modem的IP,而不是网卡的IP。
      

  7.   

    to NowCan(能量、激情、雨水、彩虹——雷雨云):我现在的想法是如果上面两种解决方案都可以得到本机所有 IP 列表的话那也算解决了,因为保留 IP 就 3 种,再加上 127.0.0.1,把这些都滤掉的话剩下的也就是已经和 Internet 进行了连接而分配到的外部合法 IP 了。不知道这两种方法是否符合我的要求,第二种我今晚测试一下,第一种我缺那两个文件无法测试。谁还有不同或者是更简单的方法?
      

  8.   

    http://vip.6to23.com/NowCan1/tech/LocalIP.htm
    这个行吗?
    我还见过一个用SNMP的方法,但是现在找不到,晚上回家找找。
      

  9.   

    to NowCan(能量、激情、雨水、彩虹——雷雨云):非常感谢!不过你提供的这种方法就是我给出的那个地址所用的方法,昨晚已被我证实无效了,这种方法只能得到本机所有网卡的本地地址,为网卡分配的全局 IP 则得不到。你有 Iphlpapi.h 和 Iphlpapi.lib 吗?如果有麻烦给我寄一份。呵呵,以前看过你回的一些帖子,知道你对音频编程很有研究,你的主页我也去过,我的主页:2ndboy.yeah.net,希望以后能多交流。顺便问一下,你用过网上那个免费 G.729 的库吗?
      

  10.   

    把能够得到的ip中除去本地ip行不行?
      

  11.   

    to jennyvenus(JennyVenus):事实上经过我验证
    http://www.vckbase.com/document/viewdoc.asp?id=435
    上说的方法得到的全部是本地地址wuxuan(真心英雄) 给出的
    http://www.csdn.net/expert/topic/881/881170.xml?temp=.3162348
    因为我缺少两个文件所以没办法试哪位好心人给我发一下啊?[email protected]
      

  12.   

    call RasGetProjectionInfo to get ip of RAS connection
      

  13.   

    for RasGetProjectionInfo usage, you can refer to http://www.st0754.net/dispprogram.asp?ID=297
      

  14.   

    to masterz():我做了一下测试,RasGetProjectionInfo也不能得到我用网通上网的合法IP!
      

  15.   

    干脆用WinPCap了,看看收到的数据包里面IP是什么算了
    WinPCap用来写这个还不算过分
      

  16.   

    啊?用WinPcap来写这个还不算过分?那我用DDK+NDIS不是更好呵呵,开个玩笑,我只想用最简单的方法,qrlvls(怜松),拜托,俺知道你网络方面有一手!
      

  17.   

    我不知道有没有API,但是我想肯定是可以知道的,做一个简单的server/client
    就可以知道的,你的机器的作client,别人的作server,建立socket后,server是肯定知道client的IP的,不过server的IP还是的知道先,否则没法socket。呵呵,这个办法,好像不好
      

  18.   

    Visual C++ 6.0通过:
    void CMyView::OnToolsViewip() {
      struct hostent * pHostent=NULL;
      CString strIP, strTemp("");
      char addr[256];  gethostname(addr,255);
      pHostent=gethostbyname(addr);
      if(pHostent!=NULL && pHostent->h_addr_list[0]!= NULL){
        int i=0;
        strIP.Format("本机IP地址为:\n\n");
        while(pHostent->h_addr_list[i]!= NULL){
          strIP += "";
          for(int j=0; j < pHostent->h_length; j++ ){
    if( j > 0 ) strIP += ".";
    strTemp.Format("%u", (UINT)((unsigned char*)pHostent->h_addr_list[i])[j]);
    strIP += strTemp;
          }
          i++;
          strIP += "\n";
        }
      }
      AfxMessageBox(strIP);
    }不过我不知道怎样才可以知道哪个才是当前的连接IP。
      

  19.   

    to riverboat(诸葛不亮):你可能没有注意看上面的回贴,你说的方法我已经测试过了,只能得到本机所有网卡的内部网地址。不过还是很感谢你的帮忙。
      

  20.   

    用winsock GetPeerName function
      

  21.   

    to Sander():你的方法跟benztoy(benz)说的一样,我的要求是在不建立任何连接的情况下就得到自己的合法IP。