现有一台计算机,装有两个网卡,一个连接外网,一个连接内网
(如: 192.168.0.1)。
难题就是如何获取外网网卡的IP地址。GetAdpterInfo()可以获得所有网卡和ip地址信息,但是如何知道那个IP地址是外网的IP地址?

解决方案 »

  1.   

    bool GetIP1()
    {
        bool m_bVeri = false;    addrinfo hints, *result = NULL;
        memset(&hints, 0, sizeof(hints));
        hints.ai_flags = AI_PASSIVE;
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
        hints.ai_protocol = IPPROTO_TCP;
        char szhostname[128];
        gethostname(szhostname,sizeof(szhostname));
        if (getaddrinfo(static_cast<LPCTSTR>(szhostname), 0, &hints, &result) != 0)
            return m_bVeri;    //if (getnameinfo(result->ai_addr, result->ai_addrlen, m_sIP, 256, NULL, 0, NI_NUMERICHOST) != 0)
        //    return m_bVeri;    m_bVeri = true;
        addrinfo* paddr;
        paddr=result;
        int i=0;
        while(paddr!=NULL)
        {
            char tmp[256];
            wsprintf(tmp,"the %d address name:%s,",i,paddr->ai_canonname);
            OutputDebugString(tmp);
            print_sockaddr(paddr->ai_addr);
            paddr=paddr->ai_next;
        }
        freeaddrinfo(result);
        return m_bVeri; 
    }
      

  2.   

    See the sample below, FYI:http://www.codeproject.com/internet/GetIpNr.asp
      

  3.   

    这里找不到答案吗?来这里试试看!
    这里有问必答
    http://systemer.51.net/cgi-bin/leoboard.cgi
    希望你能在这里找到你满意的答案
      

  4.   

    jennyvenus能不能把你的方法说详细一些!其它给的方法只是告诉我如何得到本机所有IP地址,而事实上我已经可以得到本机所有的IP地址,只是不知道该如何区分那个是外网的?哪个是内网的?如果内网ip是按规定设置的还好说(jennyvenus,能不能把你的方法说详细一些!),如果不是该怎么办?