Python编写nmap扫描工具
作者:公众号_小博测试成长之路 时间:2021-08-07 14:53:10
NMAP是一款开源的网络探测和安全审核的工具,他能够快速的扫描出某个服务器对外暴露的端口信息。是在安全测试领域很常见的一个工具。
今天我们用python的模拟实现一个简单版本的端口扫描工具,主要使用到socket模块,socket模块中提供了connect()和connect_ex()两个方法,其中connect_ex()方法有返回值,返回值是一个int类型的数字,标记是否连接成功,0为连接成功,其他数字表示有异常。
def connect(self, address: Union[_Address, bytes]) -> None: ...
def connect_ex(self, address: Union[_Address, bytes]) -> int: ...
第一版:
def scan_tools_v1(self):
host = input('请输入服务器ip地址:')
port = int(input('请输入要扫描的端口:'))
sk = socket.socket()
sk.settimeout(0.1)
conn_result = sk.connect_ex((host, port))
if conn_result == 0:
print('服务器{}的{}端口已开放'.format(host, port))
else:
print('服务器{}的{}端口未开放'.format(host, port))
sk.close()
运行结果:
D:\Software\Python\Python39\python.exe D:/MyScripts/study_srripts/SockerTools/nmap_tools.py
请输入服务器ip地址:8.129.162.225
请输入要扫描的端口:8080
服务器8.129.162.225的8080端口已开放
缺点:
1、一次只能扫描一个端口
第二版:(支持扫描多个接口)
def scan_tools_v2(self):
host = input('请输入服务器ip地址:')
ports = input('请输入要扫描的端口范围,格式0-65536:')
port_start, port_end = ports.split('-')
count = 0
for port in range(int(port_start), int(port_end)+1):
sk = socket.socket()
sk.settimeout(0.1)
conn_result = sk.connect_ex((host, port))
if conn_result == 0:
print('服务器{}的{}端口已开放'.format(host, port))
count += 1
sk.close()
if count == 0:
print(f'服务器{host}的{ports}端口均未开放')
输出结果只输出已开放的端口信息,如果输入的端口范围中,没有一个端口开放,那么就直接输出端口未开放。
总结:
1、以上只是一个简易的版本,如果扫描服务器全量端口的话,耗时较长,后面可以考虑用多线程的技术再进行优化。
2、代码中针对异常输入未进行校验,可以优化
3、要注意ip为字符串类型,端口为int类型,socket对象初始化要放到循环里面,并且要设置超时时间,不然默认的连接要好长时间才返回结果。\
来源:https://juejin.cn/post/6985917393625153566
标签:Python,nmap,扫描工具


猜你喜欢
SQLServer2005 没有服务器名称的两种解决方法
2024-01-20 10:29:43

tensorflow图像裁剪进行数据增强操作
2023-06-23 14:33:20

Python抽象基类的定义与使用方法
2021-07-31 21:48:43

提高MySQL查询效率的三个技巧
2009-02-11 13:19:00
python 实现自动远程登陆scp文件实例代码
2022-04-02 20:25:31
Django vue前后端分离整合过程解析
2022-04-07 21:01:04

python selenium爬取斗鱼所有直播房间信息过程详解
2023-11-19 07:00:11
mysql 8.0.22 安装配置图文教程
2024-01-18 19:47:34

解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2024-06-07 15:22:43

Vision Transformer图像分类模型导论
2022-09-09 08:37:39

Python实现爬取网页中动态加载的数据
2021-08-11 18:35:27

javascript实现双端队列
2024-05-02 16:18:58
加速 PyTorch 模型训练的 9 个技巧(收藏)
2023-12-17 10:35:58

Pycharm配置anaconda环境图文教程
2023-11-10 02:18:20

基于mysql事务、视图、存储过程、触发器的应用分析
2024-01-28 18:27:51
MySQL中replace into语句的用法详解
2024-01-20 10:45:53
浅析MySQL - MVCC
2024-01-24 14:29:22
通过python将大量文件按修改时间分类的方法
2023-04-11 00:26:03
使用keras实现非线性回归(两种加激活函数的方式)
2023-07-23 23:33:53

MySQL创建表操作命令分享
2024-01-25 20:08:35
