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学习之第三方包安装方法(两种方法)
Jul 30 Python
详解Python中的Descriptor描述符类
Jun 14 Python
快速了解Python相对导入
Jan 12 Python
Python实现模拟登录网易邮箱的方法示例
Jul 05 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
基于python中__add__函数的用法
Nov 25 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
基于python图像处理API的使用示例
Apr 03 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 Python
Keras-多输入多输出实例(多任务)
Jun 22 Python
python 动态绘制爱心的示例
Sep 27 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实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Django web框架使用url path name详解
2019/04/29 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
C语言笔试题
2014/09/04 面试题
建筑设计师岗位职责
2013/11/18 职场文书
人事任命书格式
2014/06/05 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸