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中的tuple元组详细介绍
Feb 02 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
python requests 测试代理ip是否生效
Jul 25 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
Django Rest framework三种分页方式详解
Jul 26 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
Python while true实现爬虫定时任务
Jun 08 Python
Python更改pip镜像源的方法示例
Dec 01 Python
Selenium 配置启动项参数的方法
Dec 04 Python
matplotlib绘制正余弦曲线图的实现
Feb 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
2006/12/14 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
php写app用的框架整理
2019/09/29 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
python pygame实现方向键控制小球
2019/05/17 Python
python装饰器常见使用方法分析
2019/06/26 Python
Python request使用方法及问题总结
2020/04/26 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
应聘自荐书
2013/10/08 职场文书
化妆品促销方案
2014/02/24 职场文书
团队激励口号
2014/06/06 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
研修心得体会
2014/09/04 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
2014年财政工作总结
2014/12/10 职场文书
2014年医务科工作总结
2014/12/18 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
班主任工作总结范文
2015/08/13 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
python图像处理 PIL Image操作实例
2022/04/09 Python