簡體   English   中英

Python / iptables:原始目標IP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM