是一个需求需要获取连接socket的目的ip,不是本机ip,传递过来的流量的目的ip不是本机ip
研究得知需要使用 getsockopt
函数
具体实现
from socket import *
SO_ORIGINAL_DST = 80
s = socket(AF_INET, SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(('192.168.0.2', 1234))
s.listen(1)
conn, addr = s.accept()
dst = conn.getsockopt(SOL_IP, SO_ORIGINAL_DST, 16)
srv_port, srv_ip = struct.unpack("!2xH4s8x", dst)
print "original %s:%d" % (inet_ntoa(srv_ip), srv_port)