问题1抓包程序问题:用MFC自带的WSAIOCtl函数抓所有的包,在XP系统下只能抓到进来的包,抓不到发出去的包,而在Win2000下可以正常工作?
有没有其他方式来实现?问题2两个Modem问题:在一台机器上分别用两个Modem同时拨号上网,怎么来控制用哪个Modem通信,比如用两个Ftp客户端来连接Ftp服务器,一个Ftp客户端通过一个Modem连接Ftp服务器。现在系统总是使用一个默认的Modem来通信, 
用程序怎么来控制?

解决方案 »

  1.   

    问题一:
    建议用ndisdriver或winpcap来抓包,后者实现简单,可以用filter。问题二:
    两个MODEM同时拨号上网,一般来讲是拨向同一个ISP,这个涉及到multippp连接的问题。就是捆绑两个PPP连接为一个,这种情况下两条链路是负载均衡的。具体的实现可以参考LINUX下的实现。
    如果拨向不同的两个ISP,那么显然涉及到PPP连接成功后系统给自身添加缺省路由的问题,如果是连接向两个不同的FTP服务器,那么我们可以考虑用路由控制的方法来进行,就是手动指定向某个目的地址出口路由为PPP0,另外一个目的地址出口路由为PPP1。
    因为不太明白需求,所以不一定是很确切的解答,见谅!
      

  2.   

    感谢上面的回复
    -------------------------用MFC自带的WSAIOCtl函数抓所有的包,在XP系统下只能抓到进来的包,抓不到发出去的包,而在Win2000下可以正常工作?是MFC的缺陷?
      

  3.   

    问题1:实现的方法很多,filter hook,SPI,TDI,NDIS,TDI hook,NDIS hook........
    个人觉得SPI最简单问题2:个人觉得在应用层想对不同的NDISWAN设备进行控制,似乎没有什么好的办法
      

  4.   

    可行一点的实现方式象 filter hook, NDIS 这些在不用第三方库的情况下是很麻烦的
      

  5.   

    NDIS需要使用DDK库,不过SPI倒是不用什么库
      

  6.   

    没装XP。在2000下用RAW SOCKET收包完全没有问题。“XP系统下只能抓到进来的包,抓不到发出去的包”
    ------》需要注意,可能你在XP下装了防火墙!
    我曾经折腾过1天,HTPP,FTP都没有问题,但ICMP的包只收到入的,没有去的。
    我还以为自己程序的问题,跟踪好久也没有发现。最后关闭防火墙解决一切问题。
      

  7.   

    问题1: 
         很多朋友都反映过这样的情况,不知道是否是raw socket的缺陷,但是我测试的情况是
    6台xp系统的主机,有2台是可以接收到发出去的包的,至今也没找到一个确切的答案究竟是怎么回事呵呵,但是2000下确实是没有任何问题的
         我想最简单的替代方法就是用winpcap来捕获数据包,短短几行代码就可以实现数据包的捕获功能,详见我的blog,     手把手教你捕获数据包
         http://blog.csdn.net/piggyxp/archive/2004/06/23/24444.aspx