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改变日志(logging)存放位置的示例
Mar 27 Python
python flask 多对多表查询功能
Jun 25 Python
教你使用python画一朵花送女朋友
Mar 29 Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
Python参数类型以及常见的坑详解
Jul 08 Python
解决python 文本过滤和清理问题
Aug 28 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
Python如何避免文件同名产生覆盖
Jun 09 Python
Python实现删除某列中含有空值的行的示例代码
Jul 20 Python
python数据可视化使用pyfinance分析证券收益示例详解
Nov 20 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网站提速三大“软”招
2006/10/09 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
php微信开发自定义菜单
2016/08/27 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
再论Javascript的类继承
2011/03/05 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
使用python实现省市三级菜单效果
2016/01/20 Python
python实现Adapter模式实例代码
2018/02/09 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
python 爬取小说并下载的示例
2020/12/07 Python
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
个人租房协议书
2014/04/09 职场文书
质量承诺书格式
2014/05/20 职场文书
工地安全标语
2014/06/07 职场文书
大学生标准自荐书
2014/06/15 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书