c++ - 用 C++ 捕获传出的数据包
问题描述
在 C++ 中是否有某种方法可以捕获端口上传输的所有数据包(通过其他应用程序)并获取数据。我需要查看特定应用程序发送了什么样的数据并对其进行处理。
解决方案
如果您运行的是 Linux 或类似的操作系统,您可以使用 libpcap 来捕获数据包。在底层,它使用 Berkeley Packet Filters 来过滤满足您定义的标准的数据包。
在 Windows 上,您可以尝试 npcap(较新)或 winpcap——这是 WireShark 在内部用于捕获数据包的库。这些库的使用类似于 libpcap。
让程序发送和接收数据包的另一种选择是挂钩发送/接收功能;在 Linux 上,这可以像用send
andrecv
函数编写共享库一样简单,然后LD_PRELOAD
在运行目标应用程序时使用它来调用你的send
andrecv
函数,这将对数据包内容做一些事情,然后调用原始函数(可以使用调用dlsym
withRTLD_NEXT
和函数名来查找)。
推荐阅读
- oracle - 使用 Grails 时更新到 Oracle 12.2 C 数据库的 Hibernate 方言问题
- reactjs - Material UI linked buttons with MUI's styled component api
- mongodb - MongoEngine 在测试期间连接到错误的数据库
- regex - 为什么这个正则表达式不适用于这个 html?
- html - 将身份验证令牌传递给 HTML 页面
- hazelcast - 当客户端已经连接并在 Hazelcast 中获取地图时,防止在达到法定人数之前加载地图
- python - Pyviz 面板示例返回属性错误
- centos7 - OpenStack Keystone:“服务目录为空。” 发出任何命令后
- php - 如何检索发送表单的页面名称
- excel-formula - 使用 MULTIPLE CRITERIA 和 WILDCARD 获得 MAX