我想充当代理,我想如果可能的话管理来自第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正在运行,我没有捕获任何东西。
关于我在哪里失败以及如何调试/得到这个工作的任何想法?
提前谢谢。
答案 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