如何用python方法检测UDP端口,python检测udp端口,如何用python方法检


如何用python方法检测UDP端口,首先要了解什么是UDP端口及作用。网上搜索了一圈后,我得到的个人理解是:UDP端口是含有网络服务必须的源端口和目的端口信息,用以建立和实现网络传输服务。

那么如何用python方法检测UDP端口呢?看看下边这段网友提供的代码吧。

socket、threading、time、Queue这些是要用到的python方法模块。

import socketimport threadingimport timeimport structimport Queuequeue = Queue.Queue()def udp_sender(ip,port):    try:        ADDR = (ip,port)        sock_udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)        sock_udp.sendto("abcd...",ADDR)        sock_udp.close()    except:        passdef icmp_receiver(ip,port):    icmp = socket.getprotobyname("icmp")    try:        sock_icmp = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)    except socket.error, (errno, msg):        if errno == 1:            # Operation not permitted            msg = msg + (                " - Note that ICMP messages can only be sent from processes"                " running as root."            )            raise socket.error(msg)        raise # raise the original error    sock_icmp.settimeout(3)    try:        recPacket,addr = sock_icmp.recvfrom(64)    except:        queue.put(True)        return    icmpHeader = recPacket[20:28]    icmpPort = int(recPacket.encode('hex')[100:104],16)    head_type, code, checksum, packetID, sequence = struct.unpack(            "bbHHh", icmpHeader    )    sock_icmp.close()    if code == 3 and icmpPort == port and addr[0] == ip:        queue.put(False)    return#www.iplaypy.comdef checker_udp(ip,port):    thread_udp = threading.Thread(target=udp_sender,args=(ip,port))    thread_icmp = threading.Thread(target=icmp_receiver,args=(ip,port))        thread_udp.daemon= True    thread_icmp.daemon = True        thread_icmp.start()    time.sleep(0.1)    thread_udp.start()        thread_icmp.join()    thread_udp.join()    return queue.get(False)if __name__ == '__main__':    import sys    print checker_udp(sys.argv[1],int(sys.argv[2]))

编橙之家文章,

评论关闭