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实现随机密码字典生成器示例
Apr 09 Python
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
python中单例常用的几种实现方法总结
Oct 13 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
python剪切视频与合并视频的实现
Mar 03 Python
Pycharm中如何关掉python console
Oct 27 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
Python基础之函数嵌套知识总结
May 23 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程序的方法小结
2012/02/23 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
2016/12/12 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
javascript,jquery闭包概念分析
2010/06/19 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
Python基础之函数用法实例详解
2014/09/10 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
python使用TensorFlow进行图像处理的方法
2018/02/28 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
Python sorted对list和dict排序
2020/06/09 Python
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
一封普通求职者的求职信
2013/11/20 职场文书
小学英语教学反思案例
2014/02/04 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
党性心得体会
2014/09/03 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
canvas 中如何实现物体的框选
2022/08/05 Javascript