好友
阅读权限10
听众
最后登录1970-1-1
|
Windows的网络抓包的方法大致以下几类:
1、原始套接字:RAW_SOCKET
2、网络过滤驱动:WIN_CAP、NPCAP
3、winsock2服务提供者接口:SPI
4、钩子技术:API HOOK
5、数据平面开发套件:DPDK
目前用的比较多的工具是fiddler和Wireshark,我了解的比较多的是Wireshark,使用的技术是第二种,NDIS驱动在网络层可以截获所有的网络数据,这里就不贴代码了,github上直接可以搜到源码。但这种技术几十年前就有了,到现在还一直用着,性能在我看来比较低,在千兆网速下,最多只能达到500Mbps左右,而且丢包比较严重。因此很多专业的抓包设备都会用硬件来实现,比如高速采集卡。 这里还是聊聊NDIS过滤驱动,下面贴出数据: 速度 | 42.26 MB/S | 54.46 MB/S | 61.84 MB/S | 91.85 MB/S | 总数 | 801420 | 106856 | 133570 | 10017750 | 抓包数 | 801420 | 106856 | 133570 | 10017613 | 丢包数 | 0 | 0 | 0 | 137 | 丢包率 | 0.0% | 0.0% | 0.0% | 0.0013676% | 处理时间/秒 | 250 | 28 | 30 | 1494 | 每秒处理笔数 | 3206 | 3816 | 4452 | 6704 | CPU使用率 | 3.2%+3% | 3.5%+4.1% | 3.7%+4.9% | 3.6%+7.7% | 说明 | E5-2667 3.2G 16核 32线程 | 注意,这里是千兆网卡,对应的Mbps要乘以8。可以看到在高频数据情况下,还是有丢包的情况出现,这是不可原谅的。这里用的是WINCAP进阶版NPCAP,上层应用开辟了比较大的共享内存来memcpy保存网卡数据,理论上说已经做到极致了,瓶颈几乎都在内存拷贝的环节,两次拷贝还是比不过网卡的处理速度,丢包就丢在这里了。 难道纯粹的软件方法就不能做到不丢包么?DPDK?这个没有试过。
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|