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中input和raw_input的一点区别
Oct 21 Python
python多线程方式执行多个bat代码
Jun 07 Python
浅谈python中set使用
Jun 30 Python
python中子类调用父类函数的方法示例
Aug 18 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
Python调用服务接口的实例
Jan 03 Python
详解Python 切片语法
Jun 10 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 Python
python matplotlib实现将图例放在图外
Apr 17 Python
Python字符串格式化f-string多种功能实现
May 07 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
PHP学习笔记之二
2011/01/17 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
python字典基本操作实例分析
2015/07/11 Python
python实现爬取图书封面
2018/07/05 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
浅谈python之新式类
2018/08/12 Python
python 实现A*算法的示例代码
2018/08/13 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
python 追踪except信息方式
2020/04/25 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
联欢晚会主持词
2014/03/25 职场文书
关于五一放假的通知
2015/08/18 职场文书
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
pycharm无法安装cv2模块问题
2022/05/20 Python