• 技术文章 >后端开发 >Python教程

    python检测远程udp端口是否打开的方法

    2016-06-06 11:22:42原创1097
    本文实例讲述了python检测远程udp端口是否打开的方法。分享给大家供大家参考。具体实现方法如下:

    代码如下:

    import socket
    import threading
    import time
    import struct
    import Queue
    queue = 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:
    pass
    def 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
    def 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]))

    希望本文所述对大家的Python程序设计有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:python通过BF算法实现关键词匹配的方法 下一篇:python循环监控远程端口的方法
    PHP编程就业班

    相关文章推荐

    • Python详细解析之容器、可迭代对象、迭代器以及生成器• Python数据结构与算法学习之双端队列• python实例详解之xpath解析• 带你搞懂Python反序列化• 详细介绍Python3数据结构知识点

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网