基本的 Netfilterqueue 使用 Python

aDo*_*DoN 5 python network-programming iptables netfilter

我想充当代理,如果可能的话,我想管理来自第 2 层或第 3 层的接收数据包,我正在为它而苦苦挣扎,最基础的东西我无法让它工作,我告诉你我是做什么的:

这是我的代码(proxda.py)

from netfilterqueue import NetfilterQueue

def print_and_accept(pkt):
    print pkt
    pkt.accept()

nfqueue = NetfilterQueue()
nfqueue.bind(1, print_and_accept)
try:
    nfqueue.run()
except KeyboardInterrupt:
    print
Run Code Online (Sandbox Code Playgroud)

代码直接取自python文档:https : //pypi.python.org/pypi/NetfilterQueue/0.3

这是iptable我配置的规则:

iptables -I INPUT -d 173.16.0.229 -j NFQUEUE --queue-num 1
Run Code Online (Sandbox Code Playgroud)

这个想法是发送到 173.16.0.229 的所有流量都转到我的程序

这就是场景,非常简单:当我的程序 proxa.py 正在运行时,我从 173.16.0.236 ping 到 173.16.0.229 并且我没有捕获任何东西。

关于我在哪里失败以及如何调试它/让它工作的任何想法?

先感谢您。

aDo*_*DoN 2

我问自己,问题是 iptables 上的规则,我的 IP 是 173.16.0.236,我将传入流量过滤到 173.16.0.229。\n只需更改:

\n\n
iptables -I INPUT -d 173.16.0.229 -j NFQUEUE --queue-num 1 \n\nto: iptables -I OUTPUT -d 173.16.0.229 -j NFQUEUE --queue-num 1 \n\nor to :  iptables -I INPUT -d 173.16.0.236 -j NFQUEUE --queue-num 1.\n
Run Code Online (Sandbox Code Playgroud)\n\n

小心最后一行,因为到我们机器的所有 INPUT 流量都会进入 NFQUEUE,在我的例子中,这是一场灾难,因为我\xc2\xb4m 通过 ssh 连接,并且连接会中断。\n我使用的示例是这条规则:

\n\n
iptables -I OUTPUT -s 173.16.0.236 -p tcp --dport 80 -j NFQUEUE --queue-num 1\n
Run Code Online (Sandbox Code Playgroud)\n