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 相关文章推荐
windows下安装python paramiko模块的代码
Feb 10 Python
sqlalchemy对象转dict的示例
Apr 22 Python
python简单文本处理的方法
Jul 10 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
python实现装饰器、描述符
Feb 28 Python
python 解压pkl文件的方法
Oct 25 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
Keras loss函数剖析
Jul 06 Python
使用python实现学生信息管理系统
Feb 25 Python
Python读写yaml文件
Mar 20 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和ACCESS写聊天室(四)
2006/10/09 PHP
PHP无限分类的类
2007/01/02 PHP
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
微信小程序实现发红包功能
2018/07/11 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
中间件分为哪几类
2012/03/14 面试题
厨房工作人员岗位职责
2013/11/15 职场文书
环保标语口号
2014/06/13 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
个人向公司借款协议书
2014/10/09 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js