python实现一种基于TCP的端口扫描方法

该博客介绍了一个使用Python编写的TCP端口扫描程序,采用全连接扫描技术,利用多线程优化扫描速度。用户通过命令行指定目标主机IP和端口范围,程序返回开放端口列表。代码分为main函数、portScanner_1和portScanner_2函数,分别负责输入输出、多线程调度和具体扫描任务。
摘要由CSDN通过智能技术生成

设计思路

该程序由python语言编写,其功能为在局域网中对特定的主机进行端口扫描,并得到开放的端口列表。所使用的端口扫描技术为全连接扫描。
在编码实现的过程中,通过使用系统提供的connect函数来对目标主机的特定端口进行连接,如果连接成功则可视为该端口处于侦听状态,如果连接失败则说明该端口未提供服务。
采用全连接对端口进行扫描的优点在于不需要使用管理员权限以及导入scapy库来发送特定的数据包进行其他类型的端口扫描技术,但是该扫描技术最大的缺点在于耗时较长,而在实现过程中通过多线程调度可以大幅度缩短扫描时间。
为优化该程序的使用体验,在设计与编写时,对于数据与参数的设置通过以命令行来对程序进行执行时附加的参数来实现,这样编写有利于代码测试与程序运行,同时防止了因输入错误而导致的程序崩溃所造成的严重后果。

代码结构

该程序主要由三部分代码组成,分别为负责输入输出的main函数;进行多线程调度的portScanner_2函数;以及负责进行端口扫描的portScanner_1函数:

  1. portScanner_1:该函数的参数由目标主机IP,要扫描的端口号,以及开放的端口列表组成。该函数通过错误处理的方式来判断所进行的连接是否成功,如果成功则将该端口添加至开放端口的列表中,如果未成功则终止运行。

  2. portScanner_2:该函数的参数由目标主机IP,要扫描的端口号列表以及开放的端口号列表组成,而执行过程则是为每个要监测的端口建立一个进程,再将这些进程并行执行,从而大幅缩短总执行时间。

  3. main:该函数为程序的主函数,运行时首先获取附加的参数并对参数进行处理,确定要扫描的目标主机IP以及扫描的端口范围,随后执行portScanner_2函数并导入参数,最后输出得到的结果。

运行流程

程序的运行在安装有python3以上版本的windows或Linux系统上运行,运行命令为:
python3 main.py -h (目标主机IP) -p (起始端口)-(结束端口)
运行流程图如下:

在这里插入图片描述

数据结构

在程序中定义的各个常量与变量的含义如下:

变量名称 数据类型 变量含义
host 字符串 目标主机IP地址
openports 列表 目标主机中扫描出开放的端口号
portlist 列表 要扫描的端口号列表
start_port 数字 要扫描的端口号最小值
end_port 数字 要扫描的端口号最大值

源代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import *
import threading
import re
import sys
import getopt


# 扫描函数
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值