在 Python 中使用 socket.connect() 之前找到 OS 生成的端口
Find OS generated port before using socket.connect() in Python
我想问一下是否有任何方法可以在 Python 中创建一个套接字,使用:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
然后,提取OS生成的端口,使用前:
sock.connect((SERVER_IP, SERVER_PORT)
即我的目标是在实际执行 3 次握手之前找到将发送到服务器的第一个 SYN 数据包的源端口,作为 3 次握手的一部分。
注意:我发现可以使用以下方法找出生成的端口:
generated_port = sock.getsockname()[1]
但是,不幸的是,generated_port
的值是在使用sock.connect()
之后设置的。
任何帮助将不胜感激!
本地端口只有在套接字绑定到本地IP和端口后才可用。如果未通过调用 bind
明确完成,则将通过 connect
隐式完成。因此,要在调用 connect
之前获取本地端口,必须在此之前显式调用 bind
:
import socket
s = socket.socket()
s.bind(('0.0.0.0',0))
print(s.getsockname()[1])
s.connect((host,port))
我想问一下是否有任何方法可以在 Python 中创建一个套接字,使用:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
然后,提取OS生成的端口,使用前:
sock.connect((SERVER_IP, SERVER_PORT)
即我的目标是在实际执行 3 次握手之前找到将发送到服务器的第一个 SYN 数据包的源端口,作为 3 次握手的一部分。
注意:我发现可以使用以下方法找出生成的端口:
generated_port = sock.getsockname()[1]
但是,不幸的是,generated_port
的值是在使用sock.connect()
之后设置的。
任何帮助将不胜感激!
本地端口只有在套接字绑定到本地IP和端口后才可用。如果未通过调用 bind
明确完成,则将通过 connect
隐式完成。因此,要在调用 connect
之前获取本地端口,必须在此之前显式调用 bind
:
import socket
s = socket.socket()
s.bind(('0.0.0.0',0))
print(s.getsockname()[1])
s.connect((host,port))