【发布时间】:2017-09-17 13:05:44
【问题描述】:
我有一个用 Python 编写的套接字代理,当它从一对通信对等方接收到 RST 时,将通过让套接字被垃圾收集来关闭与两个对等方的连接。这会导致其他对等方看到 FIN 而不是 RST。
这意味着代理有效地将 RST 转换为 FIN,我认为这并不理想。
我发现在 Linux 中,可以通过使用家庭地址 AF_UNSPEC 调用 connect 来连接到 reset a TCP connnection。但是我还没有从 Python 程序中找到一种方法。
如何在 Python 中将connect 发送到AF_UNSPEC 地址?
到目前为止我所尝试的
我尝试查看相关connect 方法的help 输出并发现:
Help on built-in function connect:
connect(...)
connect(address)
Connect the socket to a remote address. For IP sockets, the address
is a pair (host, port).
不幸的是,这并没有告诉我 address 参数必须是什么才能构造 AF_UNSPEC 地址。
我试图将原始套接字 fd 包装在一个带有家族 AF_UNSPEC 的新套接字对象中,如下所示:
socket.fromfd(s.fileno(), socket.AF_UNSPEC, 0)
生成的对象会产生相同的帮助文本,任何尝试在新构造的套接字对象上调用 connect 都会导致
socket.error: getsockaddrarg: bad family
所以看起来使用socket.fromfd 可能不是我问题的答案。
【问题讨论】: