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的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
Python求出0~100以内的所有素数
Jan 23 Python
Python3爬虫学习入门教程
Dec 11 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
对Python3使运行暂停的方法详解
Feb 18 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
Python一行代码实现快速排序的方法
Apr 30 Python
python运用sklearn实现KNN分类算法
Oct 16 Python
python几种常用功能实现代码实例
Dec 25 Python
python中怎么表示空值
Jun 19 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
Jan 10 Python
Python爬取酷狗MP3音频的步骤
Feb 26 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
几个php应用技巧
2008/03/27 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
Vue实现简易计算器
2020/02/25 Javascript
javascript实现画板功能
2020/04/12 Javascript
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
为什么group by 和order by会使查询变慢
2014/05/16 面试题
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
网络工程专业自荐信范文
2014/03/16 职场文书
平安工地汇报材料
2014/08/19 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
承诺函范文
2015/01/21 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
国庆节新闻稿
2015/07/17 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL