如何取消限制ICMP端口不可访问响应的数量?

2024-10-03 04:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个脚本,它将检查给定地址的所有端口,并确定其中哪个端口监听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的解释。一切都会很有趣。在


Tags: 端口importportaswithsocket数据包struct