使用socket模块,多线程扫描指定ip的端口开放情况
使用socket模块,多线程扫描指定ip的端口开放情况
#!/usr/bin/env python
# -*- coding: utf-8 -*-import sys
import socket
import optparse
import threading
import queue# 端口扫描类,继承threading.Thread
class PortScaner(threading.Thread):# 需要传入 端口队列 目标IP 探测超时时间def __init__(self, portqueue, ip, timeout=3):threading.Thread.__init__(self)self._portqueue = portqueueself._ip = ipself._timeout = timeoutdef run(self):while True:# 判断端口队列是否为空if self._portqueue.empty():# 端口队列为空说明已经扫描完毕,跳出循环break# 从端口队列中取出端口,超时时间为1sport = self._portqueue.get(timeout=0.5)try:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置超时时长s.settimeout(self._timeout)result_code = s.connect_ex((self._ip, port))# sys.stdout.write("[%d]Scan\n" % port)# 若端口开放则会返回0if result_code == 0:sys.stdout.write("[%d] OPEN\n" % port)except Exception as e:print(e)finally:s.close()# 启动扫描方法
def StartScan(targetip, port, threadNum):# 端口列表portList = []portNumb = port# 判断是单个端口还是端口范围,如果是范围,就放入多个需要验证的端口号进端口列表里if '-' in port:for i in range(int(port.split('-')[0]), int(port.split('-')[1]) + 1):portList.append(i)else:portList.append(int(port))# 目标IP地址ip = targetip# 线程列表threads = []# 线程数量threadNumber = threadNum# 端口队列portQueue = queue.Queue()# 生成端口,加入到端口队列for port in portList:portQueue.put(port)for t in range(threadNumber):threads.append(PortScaner(portQueue, ip, timeout=3))# 启动线程for thread in threads:thread.start()# 阻塞线程for thread in threads:thread.join()#219.150.184.218 104.21.27.222if __name__ == '__main__':parser = optparse.OptionParser('Example: python %prog -i 127.0.0.1 -p 80 \n python %prog -i 127.0.0.1 -p 1-100\n')# 目标IP参数-iparser.add_option('-i', '--ip', dest='targetIP', default='127.0.0.1', type='string', help='target IP')# 添加端口参数-pparser.add_option('-p', '--port', dest='port', default='80', type='string', help='scann port')# 线程数量参数-tparser.add_option('-t', '--thread', dest='threadNum', default=100, type='int', help='scann thread number')(options, args) = parser.parse_args()StartScan(options.targetIP, options.port, options.threadNum)
执行结果:
使用socket模块,多线程扫描指定ip的端口开放情况相关推荐
- java扫描指定主机的端口socket服务
全栈工程师开发手册 (作者:栾鹏) java教程全解 java扫描指定主机的端口服务.此处扫描本机的端口.获取具有socket服务的端口 当端口不存在socket服务时,会抛出异常. 测试代码 pub ...
- centos 对某ip开放 防火墙端口_CentOS7 firewalld防火墙指定IP与端口访问
1.指定IP与端口firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address= ...
- centos7 firewall指定IP与端口访问(常用)
1.启动防火墙 systemctl start firewalld.service 2.指定IP与端口 firewall-cmd --permanent --add-rich-rule="r ...
- django项目manage.py指定IP和端口
默认运行方法:python manage.py runserver 指定ip和端口: python manage.py runserver 211.168.15.23:8000 问题:127.0.0. ...
- C# 基于TCP 实现扫描指定ip端口
文章目录 一.单线程扫描 1.代码 2.界面 3.结果 4.抓包 二.多线程扫描 1.代码 2.界面 3.结果 4.抓包 三.总结 四.源码 1.github 2.gitee 一.单线程扫描 1.代码 ...
- python扫描ip的端口打开情况
我们的韩国bss系统上线之后,要求对主机的端口.资源使用进行统计,端口每个主机去看,太费劲了,所以,就写了这样一个小程序,不是很完美但是,可以用啊!哈哈哈,别喷,本人是个菜鸟 #!/usr/bin/p ...
- 解决pycharm运行Flask指定ip、端口更改无效
后来查了一下官网文档,原来Flask 1.0 版本不再支持之前的FLASK_ENV 环境变量了. Prior to Flask 1.0 the FLASK_ENV environment variab ...
- 通过DNS解析将子域名绑定指定ip和端口
服务器绑定了域名:m.xmbygy.com,服务器上部署了一个Web项目,端口是81,访问web项目的时候就得在地址栏中输入:m.xmbygy.com:81,这样明显不太好. ...
- nmap 扫描局域网内的机器 扫描指定电脑的开放的端口
1. 扫描局域网内的机器 nmap -sP 192.168.1.0/24 nmap -sS 192.168.1.0/24 2.扫描指定机器的端口开放 nmap -sS 192.168.1.61 -p ...
- python爆破端口_挑战全网多线程批量扫描爆破弱办事端口工具,Python制造专属!...
挑战全网多线程批量扫描&爆破弱办事端口工具,Python制造专属!-1.jpg (29.47 KB, 下载次数: 0) 2018-8-16 17:05 上传 前言 你学习Python的目的是什 ...
最新文章
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
- 曹大带我学 Go(12)—— 面向火焰图编程
- ES6对象(3):类的继承
- mysql的递归查询_比较两种mysql递归tree查询效率-mysql递归tree
- 做了十年的功能测试,下一步该晋升测试开发还是转行软件开发?
- 51—Nod 1384 全排列
- transform与rigibody以及角色控制器的运动
- jdbc数据库连接池连接
- Demo 示例:如何原生的在 K8s 上运行 Flink?
- 计算机windows8黑屏怎么办,Win8电脑开机黑屏只有鼠标光标怎么解决
- 1.ECMAScript 6简介(阮一峰ES6)
- 微信转发软件后缀_简单修改后缀让微信发送25M以上微信大视频
- SGX软硬件栈(四)——桥函数
- android 蓝牙耳机 找不到驱动程序,bluetooth外围设备找不到驱动程序现象的解决方法介绍...
- 泰坦尼克号生存预测 (Logistic and KNN)
- 大数据分析技术与应用
- InfoPath 2007 常见问题
- OSChina 周五乱弹 ——妹子喜欢我的幻觉封印怎么破除
- 百度上传网站服务器地址,用浏览器访问 一个网站(www.baidu.com) 的过程
- iOS 自定义推送铃声问题
热门文章
- (凭什么断点要放入堆栈?)微机学习:第八课
- string字符串比较
- 数据可视化——ECharts基础
- 1090 Highest Price in Supply Chain (25 分) 树的遍历:深度搜索+vector
- python编程方式_python的两种编程方式是什么
- mapper同时添加数据只能添加一条_神器之通用mapper的使用
- uniapp弹出框_uni-app 弹出框插件 模态框 小程序dialog
- js文件里获取路由 vue_纯js文件中,怎么使用vue的路由
- hdoj2044:一只小蜜蜂(递推)
- iis服务器转发消息至服务端,IIS服务器配置NXLog进行syslog转发