[英]Python/iptables: Capturing all UDP packets and their original destination
[英]Python/iptables: Original Destination IP
我正在尝试获取使用iptables重定向的数据包的原始目标信息(最终目标是将所有网络流量重定向到localhost,同时保留原始目标IP)。
我正在使用以下代码发送数据包:
import socket
HOST = '192.168.10.1'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(b'whatever')
s.close()
然后重定向它:
iptables -t nat -A OUTPUT -d 192.168.10.1 -j DNAT --to 127.0.0.1
然后接收它们:
import socket
HOST = ''
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
while True:
s.listen(5)
conn, addr = s.accept()
print('Connected by', addr)
data = conn.recv(1024)
if(data):
print(data)
conn.close()
我试过用类似的东西
dst = conn.getsockopt(socket.SOL_IP, socket.SO_ORIGINAL_DST, 16)
但这会导致
AttributeError: 'module' object has no attribute 'SO_ORIGINAL_DST'
一些进一步的阅读和尝试导致我的错误。 我对我读过的各种方法和丢失的轨道感到有些困惑。 线索是定义SO_ORIGINAL_DST(在本例中为TCP)。
这段代码(取自这里 )完全符合我的要求:
SO_ORIGINAL_DST = 80
sockaddr_in = conn.getsockopt(socket.SOL_IP,
SO_ORIGINAL_DST, 16)
(proto, port, a, b, c, d) = struct.unpack('!HHBBBB', sockaddr_in[:8])
print('Original destination was: %d.%d.%d.%d:%d' % (a, b, c, d, port))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.