使用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的端口开放情况相关推荐

  1. java扫描指定主机的端口socket服务

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java扫描指定主机的端口服务.此处扫描本机的端口.获取具有socket服务的端口 当端口不存在socket服务时,会抛出异常. 测试代码 pub ...

  2. centos 对某ip开放 防火墙端口_CentOS7 firewalld防火墙指定IP与端口访问

    1.指定IP与端口firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address= ...

  3. centos7 firewall指定IP与端口访问(常用)

    1.启动防火墙 systemctl start firewalld.service 2.指定IP与端口 firewall-cmd --permanent --add-rich-rule="r ...

  4. django项目manage.py指定IP和端口

    默认运行方法:python manage.py runserver 指定ip和端口: python manage.py runserver 211.168.15.23:8000 问题:127.0.0. ...

  5. C# 基于TCP 实现扫描指定ip端口

    文章目录 一.单线程扫描 1.代码 2.界面 3.结果 4.抓包 二.多线程扫描 1.代码 2.界面 3.结果 4.抓包 三.总结 四.源码 1.github 2.gitee 一.单线程扫描 1.代码 ...

  6. python扫描ip的端口打开情况

    我们的韩国bss系统上线之后,要求对主机的端口.资源使用进行统计,端口每个主机去看,太费劲了,所以,就写了这样一个小程序,不是很完美但是,可以用啊!哈哈哈,别喷,本人是个菜鸟 #!/usr/bin/p ...

  7. 解决pycharm运行Flask指定ip、端口更改无效

    后来查了一下官网文档,原来Flask 1.0 版本不再支持之前的FLASK_ENV 环境变量了. Prior to Flask 1.0 the FLASK_ENV environment variab ...

  8. 通过DNS解析将子域名绑定指定ip和端口

        服务器绑定了域名:m.xmbygy.com,服务器上部署了一个Web项目,端口是81,访问web项目的时候就得在地址栏中输入:m.xmbygy.com:81,这样明显不太好.         ...

  9. nmap 扫描局域网内的机器 扫描指定电脑的开放的端口

    1. 扫描局域网内的机器 nmap -sP 192.168.1.0/24 nmap -sS 192.168.1.0/24 2.扫描指定机器的端口开放 nmap -sS 192.168.1.61 -p ...

  10. python爆破端口_挑战全网多线程批量扫描爆破弱办事端口工具,Python制造专属!...

    挑战全网多线程批量扫描&爆破弱办事端口工具,Python制造专属!-1.jpg (29.47 KB, 下载次数: 0) 2018-8-16 17:05 上传 前言 你学习Python的目的是什 ...

最新文章

  1. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
  2. 曹大带我学 Go(12)—— 面向火焰图编程
  3. ES6对象(3):类的继承
  4. mysql的递归查询_比较两种mysql递归tree查询效率-mysql递归tree
  5. 做了十年的功能测试,下一步该晋升测试开发还是转行软件开发?
  6. 51—Nod 1384 全排列
  7. transform与rigibody以及角色控制器的运动
  8. jdbc数据库连接池连接
  9. Demo 示例:如何原生的在 K8s 上运行 Flink?
  10. 计算机windows8黑屏怎么办,Win8电脑开机黑屏只有鼠标光标怎么解决
  11. 1.ECMAScript 6简介(阮一峰ES6)
  12. 微信转发软件后缀_简单修改后缀让微信发送25M以上微信大视频
  13. SGX软硬件栈(四)——桥函数
  14. android 蓝牙耳机 找不到驱动程序,bluetooth外围设备找不到驱动程序现象的解决方法介绍...
  15. 泰坦尼克号生存预测 (Logistic and KNN)
  16. 大数据分析技术与应用
  17. InfoPath 2007 常见问题
  18. OSChina 周五乱弹 ——妹子喜欢我的幻觉封印怎么破除
  19. 百度上传网站服务器地址,用浏览器访问 一个网站(www.baidu.com) 的过程
  20. iOS 自定义推送铃声问题

热门文章

  1. (凭什么断点要放入堆栈?)微机学习:第八课
  2. string字符串比较
  3. 数据可视化——ECharts基础
  4. 1090 Highest Price in Supply Chain (25 分) 树的遍历:深度搜索+vector
  5. python编程方式_python的两种编程方式是什么
  6. mapper同时添加数据只能添加一条_神器之通用mapper的使用
  7. uniapp弹出框_uni-app 弹出框插件 模态框 小程序dialog
  8. js文件里获取路由 vue_纯js文件中,怎么使用vue的路由
  9. hdoj2044:一只小蜜蜂(递推)
  10. iis服务器转发消息至服务端,IIS服务器配置NXLog进行syslog转发