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编写批量卸载手机中安装的android应用脚本
Jul 21 Python
Python二分查找详解
Sep 13 Python
简单了解OpenCV是个什么东西
Nov 10 Python
OpenCV+python手势识别框架和实例讲解
Aug 03 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
Python全栈之列表数据类型详解
Oct 01 Python
使用Tensorflow将自己的数据分割成batch训练实例
Jan 20 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
如何实现一个python函数装饰器(Decorator)
Oct 12 Python
python实现双人五子棋(终端版)
Dec 30 Python
python实现录制全屏和选择区域录屏功能
Feb 05 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 mysql数据库操作分页类
2008/06/04 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
php中数字0和空值的区别分析
2014/06/05 PHP
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
解决python 找不到module的问题
2020/02/12 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
联强国际笔试题面试题
2013/07/10 面试题
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
国际贸易个人求职信范文
2014/01/04 职场文书
毕业生自荐书
2014/02/03 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
市场部经理岗位职责
2014/04/10 职场文书
党员个人自我评价
2015/03/03 职场文书
学习党章心得体会2016
2016/01/15 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
golang 实用库gotable的具体使用
2021/07/01 Golang
Python类方法总结讲解
2021/07/26 Python