WINPCAP可以截获发到本机的数据包,那么本机发出去的数据包可以截获吗?
是驱动程序里面的哪个函数记录了从本机发出去的数据包的?

解决方案 »

  1.   

    使用Sniffer截获流经本机网卡的IP数据包
      

  2.   

    WINPCAP就是监控通过网卡的所有数据包,至于哪个函数,没仔细看过
      

  3.   

    其实跟在网卡上装个套接字差不多,只是WINPCAP是用驱动的方式建一个设备到网卡上去挂接的
      

  4.   

    pcap_loop(adhandle, 0, packet_handler, NULL);抓包void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
    {
    //  在这个里面写对抓到的包的处理函数
    //具体可以看winpcap的demo
    }
      

  5.   

    winpcap源自libpcap,winpcap可以发包抓包还可以过滤,ethereal就是以这个pcap作为基础做出来的
      

  6.   

    WINPCAP用的是协议驱动,它注册的函数(ProtocalXXX)都是由下层驱动调用的,所以数据从网卡到来时就可以接收到,这个好理解。但是上层的数据应该是只有微端口驱动注册的函数(MiniportXXX)可以接受到啊,而WINPCAP的驱动没有注册这些(MiniportXXX)函数。
    我试了确实有源mac地址是本机的包出去。那么WINPCAP使用的驱动在什么地方收到这些包的,又是怎么被通知有这些包的到来的?请大虾指点
      

  7.   

    我的理解是这样:
    协议驱动的ProtocalXXX响应下层驱动的请求,数据到本机时,下层驱动调用NdisMIndicateReceive就会导致ProtocalReceive/ProtocalReceivePacket被调用;
    微端口驱动的MiniportXXX响应上层驱动的请求,发出数据时,上层调用NdisSend
    导致MiniportSend/MiniportSendPacket被调用。所以我觉得发出去的包应该不经过协议驱动而直接到达中间层驱动或者微端口驱动。
    (当然不包括直接调用协议驱动的DispatchWrite方法发送数据包)不知道有什么地方理解的有问题?
      

  8.   

    发现winpcap中Packetxxx函数和pacp_xxx函数都可实现对网卡数据的捕获,但不知道这两部分函数的区别,目前知道的是Packetxxx函数好像是包含在packet32.h中,pacp_xxx函数包含在pacp.h文件中,请有经验的朋友帮忙说明一下吧。看到网上就有用这两种不同的函数实现过,我自己用Packetxxx函数实现过,现在正改用pacp_xxx函数尝试,就是不太清楚区别根本在哪?
      

  9.   

    新出的winpcap 4.0版本中已经没有了对Packetxxx系列函数的说明,以前的版本中都有,不知道怎么回事