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类:class创建、数据方法属性及访问控制详解
Jul 25 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
通过实例解析Python RPC实现原理及方法
Jul 07 Python
Python依赖包迁移到断网环境操作
Jul 13 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
pytorch 中forward 的用法与解释说明
Feb 26 Python
pandas提升计算效率的一些方法汇总
May 30 Python
Pandas数据结构之Series的使用
Mar 31 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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加密解密函数(动态加密)
2013/06/19 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
简单易懂的python环境安装教程
2017/07/13 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
python装饰器使用实例详解
2019/12/14 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
自我反省检讨书
2014/01/23 职场文书
租房协议书怎么写
2014/04/10 职场文书
个人欠款担保书
2014/05/20 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
Python WSGI 规范简介
2021/04/11 Python
分享Python获取本机IP地址的几种方法
2022/03/17 Python