我在一台有双网卡的机器上开一个侦听程序,其中一个网卡为外网网卡,一个内网。我的程序负责跟内网中的机器通讯。从这个双网卡的机器连别的机器没有问题,但是当这台机器进行侦听,别的机器却连不上它。不知道是什么原因。绑定机器我已经试过了m_addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);和绑定IP,m_addr.sin_addr.S_un.S_addr=inet_addr("100.168.1.10");但都不行。用netstat -a也可以看到所开启的端口正在侦听(我开的是10001端口)。
不知道谁能告诉我为什么,不胜感激!!

解决方案 »

  1.   

    侦听程序要侦测内网的数据包,需要绑定内网卡, 所以一般sniffer程序都有个绑定网卡的选项,你这里估计是绑定的外网卡,所以没有数据包。我一般是用winpcap来做,raw socket应该也差不多。
      

  2.   

    m_addr.sin_addr.S_un.S_addr=INADDR_ANY;
      

  3.   

    // 获取本机名
    gethostname((char*)LocalName, sizeof(LocalName)-1);
    // 获取本地 IP 地址
    pHost = gethostbyname((char*)LocalName));
    // 填充SOCKADDR_IN结构
    addr_in.sin_addr = *(in_addr *)pHost->h_addr_list[0]; //IP
    addr_in.sin_family = AF_INET;
    addr_in.sin_port = htons(57274);
    // 把原始套接字sock 绑定到本地网卡地址上
    bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in));
    你需要绑定的是内部网卡的IP,也就是"192.168.*.*"的IP