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实现从订阅源下载图片的方法
Mar 11 Python
进一步了解Python中的XML 工具
Apr 13 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 Python
python函数与方法的区别总结
Jun 23 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
使用tensorflow进行音乐类型的分类
Aug 14 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循环结构实例讲解
2014/02/10 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
js实现新浪微博首页效果
2015/10/16 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
学习vue.js计算属性
2016/12/03 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
js实现动态时钟
2020/03/12 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
Python字典对象实现原理详解
2019/07/01 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
演讲稿怎么写才完美
2014/01/02 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
市级三好学生评语
2014/12/29 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
家长会感言
2015/08/01 职场文书
安全生产感想
2015/08/07 职场文书
高一军训口号
2015/12/25 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
ipad隐藏软件app图标方法
2022/04/19 数码科技