【问题标题】:How do I change incoming packet from NIC in C?如何在 C 中更改来自 NIC 的传入数据包?
【发布时间】:2011-04-20 23:58:07
【问题描述】:

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

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

如何做到这一点?

【问题讨论】:

  • 请指定一个操作系统,这样的东西通常很不便携。
  • 如果您希望对发往某个特定进程的每个数据包进行转换(但不影响其他进程),您需要进行一组修改 - 可能在程序本身中。如果您希望每个程序的每个数据包都通过您的代码,则必须将代码放入 TCP/IP 堆栈中,该堆栈通常位于内核内部。这是一件更难做的事情(也是一件好事——让通信被系统篡改,有点警察国家的味道)。
  • 在linux内核上,你可以修改系统调用。
  • 编写/修改 IP 驱动程序。我建议阅读 IP 协议 RFC。此外,您可能想花一些时间认真学习,这项任务并不容易。

标签: c network-programming


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2011-12-19
    • 2011-01-10
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多