python实现多线程端口扫描


Posted in Python onAugust 31, 2019

一个简易的TCP端口扫描器,使用python3实现。

需求:扫描目标网站开放哪些端口号,将所有开放的端口号输出。

分析:使用socket连接,如果连接成功,认为端口开放,如果连接失败,认为端口关闭(有可能端口开放但连接失败,这里简单认为端口不开放)

使用到的库:socket, threading

过程:

先定义一个函数,对给定的(ip, port)进行扫描,看其是否能连接成功。

def tcpPortScan(ip, port, openPort):
 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建套接字
 sock.settimeout(0.1)   # 设置延时时间
 try:
  result = sock.connect_ex((ip, port))
  if result == 0:    # 如果连接成功,返回值为0
   openPort.append(port) # 如果端口开放,就把端口port赋给openPort
 except:
  pass
 sock.close()     # 关闭套接字

当需要扫描目标地址的多个端口时,循环使用上述函数的话,扫描速度会极其慢,因为考虑使用多线程。

再定义一个函数,实现多线程扫描。

def threadingPortScan(host, portList, openPorts = []):
 
 hostIP = socket.gethostbyname(host) # 获取域名对应的IP地址
 nloops = range(len(portList))
 threads = []
 
 for i in nloops:
  t = threading.Thread(target=tcpPortScan, args=(hostIP, portList[i], openPorts))
  threads.append(t)
 
 for i in nloops:
  threads[i].start()
 
 for i in nloops:
  threads[i].join()
 return openPorts  # 返回值为该域名下开放的端口列表

完整代码如下:

# -*- coding:utf-8 -*-
'''
使用多线程,检测一个目标地址的端口开放情况,目标地址由用户输入,端口暂时定义为0~1024,
检测TCP连接是否成功,如果连接成功,则端口开放,不成功则端口关闭
'''
 
import socket
import threading
 
def main():
 host = input('please input domain:')
 portList = range(0, 1025)
 openPorts = threadingPortScan(host, portList)
 print(host,'open ports:', openPorts)
 
# 对给定的(ip, port)进行TCP连接扫描
def tcpPortScan(ip, port, openPort):
 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建套接字
 sock.settimeout(0.1)   # 设置延时时间
 try:
  result = sock.connect_ex((ip, port))
  if result == 0:
   openPort.append(port) # 如果端口开放,就把端口port赋给openPort
 except:
  pass
 sock.close()     # 关闭套接字
 
 
def threadingPortScan(host, portList, openPorts = []):
 
 hostIP = socket.gethostbyname(host) # 获取域名对应的IP地址
 nloops = range(len(portList))
 threads = []
 
 for i in nloops:
  t = threading.Thread(target=tcpPortScan, args=(hostIP, portList[i], openPorts))
  threads.append(t)
 
 for i in nloops:
  threads[i].start()
 
 for i in nloops:
  threads[i].join()
 return openPorts  # 返回值为该域名下开放的端口列表
 
if __name__ == '__main__':
 main()

使用www.qq.com做一个测试,测试结果如下:

>>>please input domain: www.qq.com
www.qq.com open ports: [80, 843]

总结:这个小程序仅适用于新手练习,不适合真正应用。该简易端口扫描器仅能扫描出一部分端口,有些端口可能因为防火墙拦截导致扫描失败。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中将字典转换成其json字符串
Jul 16 Python
python实现根据图标提取分类应用程序实例
Sep 28 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
对python中的iter()函数与next()函数详解
Oct 18 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
基于Python实现扑克牌面试题
Dec 11 Python
深入了解NumPy 高级索引
Jul 24 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
python spilt()分隔字符串的实现示例
May 21 Python
python游戏开发Pygame框架
Apr 22 Python
python实现复制大量文件功能
Aug 31 #Python
django 做 migrate 时 表已存在的处理方法
Aug 31 #Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 #Python
解决Django migrate不能发现app.models的表问题
Aug 31 #Python
python django生成迁移文件的实例
Aug 31 #Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 #Python
python+django+rest框架配置创建方法
Aug 31 #Python
You might like
PHP查询分页的实现代码
2017/06/09 PHP
java解析json方法总结
2019/05/16 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
FCK调用方法..
2006/12/21 Javascript
javascript smipleChart 简单图标类
2011/01/12 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
python with (as)语句实例详解
2020/02/04 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
python3 kubernetes api的使用示例
2021/01/12 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
自荐信写法介绍
2014/01/25 职场文书
毕业生面试求职信
2014/06/23 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
环境建议书
2015/02/04 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
消防验收申请报告
2015/05/15 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android