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 os模块学习笔记
Jun 21 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
详解 Python 读写XML文件的实例
Aug 02 Python
使用Python搭建虚拟环境的配置方法
Feb 28 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
python实现抠图给证件照换背景源码
Aug 20 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
Apr 14 Python
numpy库reshape用法详解
Apr 19 Python
什么是Python变量作用域
Jun 03 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 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之第八天
2006/10/09 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
js切换div css注意的细节
2012/12/10 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
vue中Element-ui 输入银行账号每四位加一个空格的实现代码
2018/09/14 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
简单介绍Python中的try和finally和with方法
2015/05/05 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
大学生应聘推荐信范文
2013/11/19 职场文书
音乐专业自荐信
2014/02/07 职场文书
幼师小班个人总结
2015/02/12 职场文书
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis