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中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python中用于计算对数的log()方法
May 15 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
对python 调用类属性的方法详解
Jul 02 Python
django 类视图的使用方法详解
Jul 24 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 Python
Python3的socket使用方法详解
Feb 18 Python
python时间序列数据转为timestamp格式的方法
Aug 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
php中实现简单的ACL 完结篇
2011/09/07 PHP
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
js opener的使用详解
2014/01/11 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
python代码实现ID3决策树算法
2017/12/20 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
python多线程与多进程及其区别详解
2019/08/08 Python
python如何实现单链表的反转
2020/02/10 Python
django model通过字典更新数据实例
2020/04/01 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
中层竞聘演讲稿
2014/01/09 职场文书
超市端午节活动方案
2014/01/23 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
校园安全标语
2014/06/07 职场文书
高中运动会广播稿
2014/09/16 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
限期整改通知书
2015/04/22 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
Python 阶乘详解
2021/10/05 Python
MySQL 数据 data 基本操作
2022/05/04 MySQL