如何更改C中NIC的传入数据包?

如何更改C中NIC的传入数据包?,c,network-programming,C,Network Programming,libpcap只能读取数据包,我如何更改它 基本上我想注册一个对所有传入数据包进行操作的回调函数 如何做到这一点?这是什么样的流量?您想如何修改它?什么操作系统 在linux上,您可以使用iptables让内核为您修改数据包 如果这不能满足您的需要(即,您需要将数据包放入用户空间),您可以查看。或者,作为一个更简单的替代方案,使用iptables重定向规则将所有数据包发送到单个端口,并编写一个应用程序在该端口上侦听。请指定一个操作系统,这样的东西通常是非常不可移植的。如果您希望每个数据包都被转换

libpcap只能读取数据包,我如何更改它

基本上我想注册一个对所有传入数据包进行操作的回调函数


如何做到这一点?

这是什么样的流量?您想如何修改它?什么操作系统

在linux上,您可以使用iptables让内核为您修改数据包


如果这不能满足您的需要(即,您需要将数据包放入用户空间),您可以查看。或者,作为一个更简单的替代方案,使用iptables重定向规则将所有数据包发送到单个端口,并编写一个应用程序在该端口上侦听。

请指定一个操作系统,这样的东西通常是非常不可移植的。如果您希望每个数据包都被转换为一个特定进程(但让其他进程不受影响),您需要进行一组修改—可能是在程序本身中。如果您希望每个程序的每个数据包都经过您的代码,您必须将代码放入TCP/IP堆栈中,而TCP/IP堆栈通常位于内核中。这是一件非常困难的事情(这也是一件好事——系统篡改通信有点像警察状态)。在linux内核上,您可以修改syscalls.Write/modify IP驱动程序。我建议您阅读IP协议RFC。此外,您可能想花一些时间认真学习,这项任务并不容易。