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 subprocess模块学习总结
Mar 13 Python
常见的在Python中实现单例模式的三种方法
Apr 08 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
基于Django用户认证系统详解
Feb 21 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
python输出带颜色字体实例方法
Sep 01 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
python numpy 矩阵堆叠实例
Jan 17 Python
区分python中的进程与线程
Aug 13 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 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中将网址转换为超链接的函数
2011/09/02 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
python数据类型_字符串常用操作(详解)
2017/05/30 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python实现一组典型数据格式转换
2018/12/15 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
Python作用域与名字空间原理详解
2020/03/21 Python
解决c++调用python中文乱码问题
2020/07/29 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
Python读写Excel表格的方法
2021/03/02 Python
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
放飞中国梦演讲稿
2014/04/23 职场文书
学校对教师的评语
2014/04/28 职场文书
环境卫生倡议书
2014/08/29 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
Python基础之Socket通信原理
2021/04/22 Python
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS