我正在尝试编写一个脚本,它将检查给定地址的所有端口,并确定其中哪个端口监听UDP。在
为此,我向每个端口发送一个空数据包,然后监听ICMP端口无法访问的响应,这意味着在相应的端口上没有UDP。在
在做这件事的时候,我遇到了一个问题:在每次收到279个ICMP包之后,我再也收不到了。甚至在本地主机上。在
我在谷歌上搜索了一下,只知道有时候这样的数据包数量是有限的。但有没有办法消除这种限制呢?在
我简化了我的代码来展示它,这里是:
import socket
import struct
with socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) as icmpSocket:
UDPPorts = set()
for port in range(1, 2 ** 16):
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
s.sendto(b'', ('localhost', port))
UDPPorts.add(port)
while True:
data, addr = icmpSocket.recvfrom(1024)
(destPort,) = struct.unpack(">H", data[50:52])
print(destPort)
UDPPorts.remove(destPort)
我的操作系统是ubuntu14.04(64位)。Python 3.4.3。 我很乐意听到任何有用的信息:一些关键字,以便更好地在谷歌上搜索问题,精确的解决方案,只是魔术数字279的解释。一切都会很有趣。在
目前没有回答
相关问题 更多 >
编程相关推荐