基本的Netfilterqueue用法Python

时间:2014-11-21 12:58:17

标签: 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

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

这是我配置的iptable规则:

iptables -I INPUT -d 173.16.0.229 -j NFQUEUE --queue-num 1

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

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

关于我在哪里失败以及如何调试/得到这个工作的任何想法?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我问自己,问题是关于iptables的规则,我的IP是173.16.0.236,我正在将传入的流量过滤到173.16.0.229。 只需改变:

iptables -I INPUT -d 173.16.0.229 -j NFQUEUE --queue-num 1 

to: iptables -I OUTPUT -d 173.16.0.229 -j NFQUEUE --queue-num 1 

or to :  iptables -I INPUT -d 173.16.0.236 -j NFQUEUE --queue-num 1.

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

iptables -I OUTPUT -s 173.16.0.236 -p tcp --dport 80 -j NFQUEUE --queue-num 1