首页 > 解决方案 > 用 C++ 捕获传出的数据包

问题描述

在 C++ 中是否有某种方法可以捕获端口上传输的所有数据包(通过其他应用程序)并获取数据。我需要查看特定应用程序发送了什么样的数据并对其进行处理。

标签: c++

解决方案


如果您运行的是 Linux 或类似的操作系统,您可以使用 libpcap 来捕获数据包。在底层,它使用 Berkeley Packet Filters 来过滤满足您定义的标准的数据包。

在 Windows 上,您可以尝试 npcap(较新)或 winpcap——这是 WireShark 在内部用于捕获数据包的库。这些库的使用类似于 libpcap。

让程序发送和接收数据包的另一种选择是挂钩发送/接收功能;在 Linux 上,这可以像用sendandrecv函数编写共享库一样简单,然后LD_PRELOAD在运行目标应用程序时使用它来调用你的sendandrecv函数,这将对数据包内容做一些事情,然后调用原始函数(可以使用调用dlsymwithRTLD_NEXT和函数名来查找)。


推荐阅读