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 相关文章推荐
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
Python编程实现从字典中提取子集的方法分析
Feb 09 Python
Python3 SSH远程连接服务器的方法示例
Dec 29 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 Python
Python新手如何理解循环加载模块
May 29 Python
Python sorted对list和dict排序
Jun 09 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 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&&mysql)五
2006/10/09 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
JS中对Cookie的操作详解
2016/08/05 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
python中的字典详细介绍
2014/09/18 Python
python实现定时同步本机与北京时间的方法
2015/03/24 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
招商经理岗位职责
2013/11/16 职场文书
商场总经理岗位职责
2014/02/03 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
优秀校长事迹材料
2014/12/24 职场文书
安全员岗位职责
2015/02/10 职场文书
离职证明范本
2015/06/12 职场文书
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers