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


Posted in Python onMarch 14, 2015

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
Python 安装setuptools和pip工具操作方法(必看)
May 22 Python
NetworkX之Prim算法(实例讲解)
Dec 22 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
python 与服务器的共享文件夹交互方法
Dec 27 Python
python print出共轭复数的方法详解
Jun 25 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
Django app配置多个数据库代码实例
Dec 17 Python
Python调用Redis的示例代码
Nov 24 Python
python检测远程服务器tcp端口的方法
Mar 14 #Python
python循环监控远程端口的方法
Mar 14 #Python
python通过shutil实现快速文件复制的方法
Mar 14 #Python
python监控网站运行异常并发送邮件的方法
Mar 13 #Python
go语言计算两个时间的时间差方法
Mar 13 #Python
python实现端口转发器的方法
Mar 13 #Python
python实现超简单端口转发的方法
Mar 13 #Python
You might like
Search Engine Friendly的URL设计
2006/10/09 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
jQuery中animate()方法用法实例
2014/12/24 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
使用Python设计一个代码统计工具
2018/04/04 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
python如何停止递归
2020/09/09 Python
Django缓存Cache使用详解
2020/11/30 Python
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
五十岁生日宴会答谢词
2014/01/15 职场文书
社会实践感言
2014/01/25 职场文书
上课睡觉检讨书
2014/01/28 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL