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中的atexit模块
Mar 07 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
python实现textrank关键词提取
Jun 22 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
pandas ix &iloc &loc的区别
Jan 10 Python
Django 日志配置按日期滚动的方法
Jan 31 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
Python time库基本使用方法分析
Dec 13 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
python中的装饰器该如何使用
Jun 18 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.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
php中如何执行linux命令详解
2018/11/06 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
javascript input输入框模糊提示功能的实现
2017/09/25 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
小学生元旦广播稿
2014/02/21 职场文书
小学作文评语大全
2014/04/21 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
学生安全责任书范本
2014/07/24 职场文书