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 相关文章推荐
kNN算法python实现和简单数字识别的方法
Nov 18 Python
Python实现对excel文件列表值进行统计的方法
Jul 25 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
Python使用Phantomjs截屏网页的方法
May 17 Python
selenium 安装与chromedriver安装的方法步骤
Jun 12 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
Python格式化字符串f-string概览(小结)
Jun 18 Python
pycharm实现print输出保存到txt文件
Jun 01 Python
Python爬虫爬取博客实现可视化过程解析
Jun 29 Python
Python Selenium自动化获取页面信息的方法
Aug 31 Python
Python数据结构之队列详解
Mar 21 Python
python lambda 表达式形式分析
Apr 03 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
初始Nodejs
2014/11/08 NodeJs
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
基于jquery实现多级菜单效果
2017/07/25 jQuery
教你如何用node连接redis的示例代码
2018/07/12 Javascript
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
2014年创卫实施方案
2014/02/18 职场文书
竞聘演讲稿
2014/04/24 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Golang map映射的用法
2022/04/22 Golang