【问题标题】:pcap and iptables tusslepcap 和 iptables 的争斗
【发布时间】:2010-04-21 23:42:38
【问题描述】:

我已经在一台机器上设置了一个 DNS 服务器。我想在机器发出之前捕获DNS回复,并更改其中的一些字段,然后发送数据包。

我只能更改我的 pcap 代码(用 C 编写)捕获的数据包中的字段,这看起来像是一个副本,因为原始数据包也被传输了。

我尝试 iptables 丢弃来自机器的数据包,但它也丢弃了 pcap 注入的数据包。

有什么办法可以解决吗?

谢谢

【问题讨论】:

  • 一个更简单的解决方案(到目前为止)是修改名称服务器的源代码...

标签: iptables pcap


【解决方案1】:

如果您正在寻找仅 pcap 的解决方案,您将不得不拦截 DNS 请求数据包,对其进行检查,并在 DNS 服务器回复之前组装正确的回复。这似乎不太可靠,因为如果 DNS 服务器缓存了一个条目,它可能会在您组装数据包并将其发送出去的自定义代码完成之前回复。

最可靠的方法是编写一个作为 netfilter 钩子的内核模块。 Netfilter 钩子能够检查数据包并在数据包离开机器之前的几个点影响对它的处理。将其挂接到 NF_IP_LOCAL_OUT 级别。然后,您可以检查传出数据包,看看它是否是符合您标准的 DNS 回复。下一部分我还没有完成,但是由于您可以直接访问 skb(套接字缓冲区)作为自定义挂钩函数的输入参数,因此您可以在此处修改数据包并返回 NF_ACCEPT 以将响应传递给客户端.如果您需要对请求本身进行一些处理,您可以改为挂接到 NF_IP_LOCAL_IN 并以多种方式处理它,包括将其传递给用户空间程序。

Google 上有很多 Linux 内核编程示例(搜索:Linux Kernel Module Programming)以及 netfilter hook 示例。

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 2012-12-12
    • 2020-03-28
    • 1970-01-01
    • 2020-09-18
    • 2018-05-23
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多