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进行稳定可靠的文件操作详解
Dec 31 Python
python rsa 加密解密
Mar 20 Python
解决uWSGI的编码问题详解
Mar 24 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
python批量处理文件或文件夹
Jul 28 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
python单例模式的应用场景实例讲解
Feb 24 Python
python 下划线的多种应用场景总结
May 12 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
谈一谈收音机的高放电路
2021/03/02 无线电
PHP实现文件安全下载
2006/10/09 PHP
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
node.js入门教程
2014/06/01 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
vue路由切换之淡入淡出的简单实现
2019/10/31 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
极简的Python入门指引
2015/04/01 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
python实现对输入的密文加密
2019/03/20 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
会计岗位职责
2013/11/08 职场文书
会计岗位描述
2014/02/22 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
入党转正介绍人意见
2015/06/03 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
nginx请求限制配置方法
2021/07/09 Servers