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定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
Python threading多线程编程实例
Sep 18 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
使用Python来开发微信功能
Jun 13 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
golang中的空接口使用详解
Mar 30 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的控制语句
2006/10/09 PHP
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
php分页示例分享
2014/04/30 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
python模块之StringIO使用示例
2015/04/08 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
Python configparser模块操作代码实例
2020/06/08 Python
Python识别验证码的实现示例
2020/09/30 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
敏捷开发的主要原则都有哪些
2015/04/26 面试题
教育系毕业生中文求职信范文
2013/10/06 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
退学证明范本3篇
2014/10/29 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技