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中for循环的使用方法
May 14 Python
Python的requests网络编程包使用教程
Jul 11 Python
python的多重继承的理解
Aug 06 Python
使用python serial 获取所有的串口名称的实例
Jul 02 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
python实现WebSocket服务端过程解析
Oct 18 Python
python实现银行实战系统
Feb 26 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
Python3 如何开启自带http服务
May 18 Python
Python实现信息管理系统
Jun 05 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
php检查页面是否被百度收录
2015/10/28 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
事件绑定之小测试  onclick && addEventListener
2011/07/31 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
python批量提交沙箱问题实例
2014/10/08 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
Python中正则表达式的用法总结
2019/02/22 Python
python交易记录链的实现过程详解
2019/07/03 Python
pytest中文文档之编写断言
2019/09/12 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
自主实习接收函
2014/01/13 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
高质量“欢迎词”
2019/04/03 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL