Python编写nmap扫描工具


Posted in Python onJuly 21, 2021

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对象初始化要放到循环里面,并且要设置超时时间,不然默认的连接要好长时间才返回结果。\

到此这篇关于Python编写nmap扫描工具的文章就介绍到这了,更多相关Python nmap扫描工具内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python图算法实例分析
Aug 13 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
python实现逐个读取txt字符并修改
Dec 24 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
python统计文章中单词出现次数实例
Feb 27 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 Python
Django模型层实现多表关系创建和多表操作
Jul 21 #Python
Python基本数据类型之字符串str
Jul 21 #Python
Python中22个万用公式的小结
Jul 21 #Python
python字典的元素访问实例详解
Jul 21 #Python
Opencv实现二维直方图的计算及绘制
python scrapy简单模拟登录的代码分析
Jul 21 #Python
python异步的ASGI与Fast Api实现
Jul 16 #Python
You might like
星际争霸秘籍
2020/03/04 星际争霸
强烈推荐:php.ini中文版(2)
2006/10/09 PHP
刚才在简化php的库,结果发现很多东西
2006/12/31 PHP
smarty自定义函数用法示例
2016/05/20 PHP
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
Python PIL库图片灰化处理
2020/04/07 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
小学校长竞聘演讲稿
2014/05/16 职场文书
小学班级特色活动方案
2014/08/31 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang