您的位置:程序门 -> vc/mfc -> 网络编程



多网卡如何取得正在使用的本机ip?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


多网卡如何取得正在使用的本机ip?
发表于:2007-01-17 11:21:31 楼主
内网的一台机器有2张网卡,分处在不同的网段(192.168.0.*,172.168.*.*),分别通过nat与公网的服务器相连。
请问如何得到到底是那个网卡或者那个ip地址与服务器相连接?

最好不要低于socket的级别。
谢谢!
发表于:2007-01-17 12:27:011楼 得分:0
读注册表网络适配器的信息,
有网关的网卡连的是公网服务器,没网关的连的是内部。
发表于:2007-01-17 12:39:432楼 得分:0
active   routes:
network   destination                 netmask                     gateway               interface     metric
                    0.0.0.0                     0.0.0.0               172.16.0.1           172.16.0.71               30
                    0.0.0.0                     0.0.0.0     192.168.100.100     192.168.100.103             20
                127.0.0.0                 255.0.0.0                 127.0.0.1               127.0.0.1               1
              172.16.0.0             255.255.0.0             172.16.0.71           172.16.0.71               30
            172.16.0.71     255.255.255.255                 127.0.0.1               127.0.0.1               30
      172.16.255.255     255.255.255.255             172.16.0.71           172.16.0.71               30
        192.168.100.0         255.255.255.0     192.168.100.103     192.168.100.103             20
    192.168.100.103     255.255.255.255                 127.0.0.1               127.0.0.1               20
    192.168.100.255     255.255.255.255     192.168.100.103     192.168.100.103             20
        192.168.122.0         255.255.255.0         192.168.122.1       192.168.122.1               20
        192.168.122.1     255.255.255.255                 127.0.0.1               127.0.0.1               20
    192.168.122.255     255.255.255.255         192.168.122.1       192.168.122.1               20
        192.168.140.0         255.255.255.0         192.168.140.1       192.168.140.1               20
        192.168.140.1     255.255.255.255                 127.0.0.1               127.0.0.1               20
    192.168.140.255     255.255.255.255         192.168.140.1       192.168.140.1               20
                224.0.0.0                 240.0.0.0             172.16.0.71           172.16.0.71               30
                224.0.0.0                 240.0.0.0     192.168.100.103     192.168.100.103             20
                224.0.0.0                 240.0.0.0         192.168.122.1       192.168.122.1               20
                224.0.0.0                 240.0.0.0         192.168.140.1       192.168.140.1               20
    255.255.255.255     255.255.255.255             172.16.0.71           172.16.0.71               1
    255.255.255.255     255.255.255.255     192.168.100.103     192.168.100.103             1
    255.255.255.255     255.255.255.255         192.168.122.1       192.168.122.1               1
    255.255.255.255     255.255.255.255         192.168.140.1       192.168.140.1               1
default   gateway:       192.168.100.100
===========================================================================
persistent   routes:
    none
发表于:2007-01-17 12:52:403楼 得分:0
你需要明确描述一下工作环境。
发表于:2007-01-17 13:20:154楼 得分:0
通常来说,比较通用而且简单的办法是从配置文件读取ip,然后绑定到该ip
发表于:2007-01-17 13:49:315楼 得分:0
我可以读取到地址信息172.16.0.71和192.168.100.103     并且从路由表   可以知道   是从   192.168.100.103请求出去的。当时写程序如何知道是那张网卡出去的呢?

                    0.0.0.0                     0.0.0.0               172.16.0.1           172.16.0.71               30
                    0.0.0.0                     0.0.0.0     192.168.100.100     192.168.100.103             20

发表于:2007-01-18 16:09:326楼 得分:0
用api   getsockname(pcontext^.sconnect,@localaddr,naddrlen)
发表于:2007-01-18 17:51:007楼 得分:0
hostent*   phost;

phost=gethostbyname(strhostname);     //用主机名来得到ip地址

他会得到一个指针数组,用来表示所有网卡ip.
发表于:2007-01-18 21:36:128楼 得分:0
char   localname[   80   ]   =   {0};
int   ret   =   0;
if   (   gethostname(   localname,   sizeof(   localname   )   )   ==   socket_error   )
{
return   false;
}
struct   hostent   *phe   =   gethostbyname(   localname   );
                  int   count   =   0;
                  while(phe-> h_addr_list[count]!=0)
                          count++;
                  .......
发表于:2007-01-19 11:27:259楼 得分:0
学习
发表于:2007-01-19 14:32:5510楼 得分:0
在与服务器相连时也就是connect前不是要bind吗?你bind在哪个网卡上进行的connect啊?
发表于:2007-02-12 10:52:1311楼 得分:0
可是bind是服务器端的啊!
发表于:2007-04-28 09:53:5612楼 得分:0
bind和listen不是一回事,你是不是以为监听端口才bind?
connect前没bind的那么用的本地port是系统随机给的,你试下bind在一个端口之后connect   一个ip,再netstat看看本地用什么端口连出去的


快速检索

最新资讯
热门点击