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实现批量监控网站
Sep 09 Python
TensorFlow搭建神经网络最佳实践
Mar 09 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
浅谈python图片处理Image和skimage的区别
Aug 04 Python
python调用支付宝支付接口流程
Aug 15 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
Django静态资源部署404问题解决方案
May 11 Python
python实现猜拳游戏项目
Nov 30 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
python基于tkinter制作下班倒计时工具
Apr 28 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操作SVN版本服务器类代码
2011/11/27 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
Python可以实现栈的结构吗
2020/05/27 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
房产代理公证处委托书
2014/04/04 职场文书
防灾减灾活动总结
2014/08/30 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
企业战略合作意向书
2015/05/08 职场文书
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
node快速搭建后台的实现步骤
2022/02/18 NodeJs
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python