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连接oracle数据库实例
Oct 17 Python
简单理解Python中基于生成器的状态机
Apr 13 Python
Python的Django框架使用入门指引
Apr 15 Python
详解JavaScript编程中的window与window.screen对象
Oct 26 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
python实现FTP服务器服务的方法
Apr 11 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
python绘制中国大陆人口热力图
Nov 07 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
利用Python+OpenCV三步去除水印
May 28 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
php横向重复区域显示二法
2008/09/25 PHP
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
html5的localstorage详解
2017/05/09 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
《记承天寺夜游》教学反思
2014/02/16 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
大学生受助感言
2015/08/01 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
golang生成vcf通讯录格式文件详情
2022/03/25 Golang