【发布时间】:2014-03-25 09:43:41
【问题描述】:
我有两个功能。一个人向一个端口号发送一个 UDP 数据包,如果得到响应,则返回该端口号。第二个循环遍历调用第一个函数的地址,重复增加端口号。当返回一个端口号时它会停止。我基本上是在向 IP 发送垃圾邮件以查找正在使用的端口号。
在超时时间很长的情况下一切正常,但我正在尝试加快发送测试数据包的速度。例如,即使垃圾邮件端口功能正在发送到 27022,我也可能会从端口 27018 收到一个数据包。然后它错误地报告 27022 是要使用的端口。即使当我从第一个函数返回返回的数据包信息时也会发生这种情况,因为您无法分辨最初使用的参数。
def check_port(s, serverip, serverport):
payload = "ffffffff54536f7572636520456e67696e6520517565727900".decode('hex')
s.sendto(payload, (serverip, serverport))
while 1:
try:
s.settimeout(0.1) # time to wait for response
d = s.recvfrom(1400)
data = d[0]
addr = d[1]
if len(data) > 1:
break
except socket.error:
return False
return addr[1]
def spam_ports(serverip):
s = serverComms.port_config()
start_highport = 27015
end_highport = 28015
start_lowport = 2299
end_lowport = 4000
port = start_highport
while check_port(s,serverip, port) == False:
port += 1
if port == end_highport:
port = start_lowport
if port == end_lowport:
return 'no query ports found in range'
else:
return check_port(s,serverip, port)
我非常感谢任何帮助。
【问题讨论】: