使用Python编写网络扫描程序
使用Python编写网络扫描程序
网络扫描程序通过向成百上千台计算机发送请求并分析其响应,扫描第2层和第3层网络中指定范围内的网络ID。利用某些扩展技术,网络扫描程序还可以获得通过Samba和NetBIOS协议提供的共享资源,以及运行共享协议的服务器上未受保护的数据。在渗透测试中也会用到网络扫描程序——白帽黑客模拟对网络资源的攻击以发现漏洞并评估公司的安全性。渗透测试的最终目的是生成一个包含目标系统中所有缺陷的报告,帮助用户针对潜在的攻击提升安全策略。
使用Python编写网路扫描程序,Python本身有许多模块,能够支持套接字(socket)以及TCP/IP应用。此外,Python还可以调用主机系统上的第三方命令扫描网络并获取相应的返回结果。
实验环境:
OS: macOS Monterey Version 12.3.1 (英文版)
IDE: PyCharm 2020.1
首先使用subprocess库,编写一个简单的示例程序,代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :4/13/22 5:35 PM
# 文件 :scannetwork.py
# IDE :PyCharm# 导入subprocess库
import subprocess
from netaddr import IPNetwork
# 指定需要扫描的网络号(本例如下)
network = '192.168.68.0/24' # 这里使用CIDR表示法,也可以使用子网掩码 # 该对象将发送Nmap命令并扫描网络。这里在Nmap命令中加上-sP标志,将输出重定向到由subprocess.PIPE创建的管道(stdout)中
p = subprocess.Popen(['sudo', 'nmap', '-sP', network],stdout=subprocess.PIPE)
# 遍历管道,逐行输出结果
for line in p.stdout:print(line)
运行结果如下:
(venv) (base) liuxiaowei@MacBookAir 自动运维 % python scannetwork.py
Password:
Starting Nmap 7.92 ( https://nmap.org ) at 2022-04-13 22:21 CSTNmap scan report for JDBoxV3.lan (192.168.68.1)Host is up (0.0061s latency).MAC Address: DC:D8:7C:28:B2:14 (Beijing Jingdong Century Trading)Nmap scan report for M2104K10AC.lan (192.168.68.235)Host is up (0.050s latency).MAC Address: 60:6E:E8:32:3E:2F (Xiaomi Communications)Nmap scan report for MacBookAir.lan (192.168.68.242)Host is up.Nmap done: 256 IP addresses (3 hosts up) scanned in 2.20 seconds
结果显示目前有3个设备在线。
备 注:
运行Python代码之前,需要先在系统安装nmap包, 运行需要root权限。
这只是一个简单的Python脚本,获得被扫描网络上的所有主机的概述。我们可以继续改进脚本获取更多信息,然后以表格形式显示每个主机的IP地址、MAC地址和MAC供应商,这样就可以轻松找到各个主机及其相关信息。
程序源码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :4/13/22 6:23 PM
# 文件 :nmap_scan.py
# IDE :PyCharm# 导入subprocess库
import subprocess
# 导入netaddr相关模块
from netaddr import IPNetwork, AddrConversionError
# 导入PrettyTable模块创建文本表格
from prettytable import PrettyTable
# 导入正则模块
import re# 定义一个扫描报告函数,参数为subprocess管道产生的输出stdout
def nmap_report(data):mac_flag = ''ip_flag = ''# 包含(IP, MAC, Vendor)三个元素的列表作为参数,创建表头Host_Table = PrettyTable(['IP', 'MAC', 'Vendor'])# 通过计算输出中的Host is up events, 能够获取网络中主机的数量,然后赋值给number_of_hostsnumber_of_hosts = data.count("Host is up ")# 使用'\n'(回车符)将输出结果拆分不同的行,结果为一个列表,进行遍历for line in data.split('\n'):if 'MAC Address:' in line:# mac地址mac = line.split("(")[0].replace("MAC Address: ", "")# 厂商vendor = line.split("(")[1].replace(")", "")mac_flag = 'ready'elif 'Nmap scan report for' in line:ip = re.search(r'Nmap scan report for (.*)', line).groups()[0]ip_flag = 'ready'if mac_flag == 'ready' and ip_flag == 'ready':# 向表格中添加数据Host_Table.add_row([ip, mac, vendor])mac_flag = ''ip_flag = ''print('Number of Live Hosts is {}'.format(number_of_hosts))print(Host_Table)network = '192.168.68.0/24'try:IPNetwork(network)p = subprocess.Popen(['sudo', 'nmap', '-sP', network],stdout=subprocess.PIPE)nmap_report(p.stdout.read())
# 如果输入不正确的IP会输出如下的错误信息
except AddrConversionError:print('Please enter a valid network IP address in x.x.x.x/y format')
运行结果如下图:
使用Python编写网络扫描程序相关推荐
- 使用python编写网络爬虫
使用python编写网络爬虫 前言 1.为何使用爬虫 2.编写爬虫的知识要求 3.确定爬虫使用的工具库 4.确定要获取的数据集 4.1 分析Url地址变化 4.2 获取目标数据集所在的HTML区域 5 ...
- 教你用Python 编写 Hadoop MapReduce 程序
摘要:Hadoop Streaming 使用 MapReduce 框架,该框架可用于编写应用程序来处理海量数据. 本文分享自华为云社区<Hadoop Streaming:用 Python 编写 ...
- 利用java编写网络聊天程序并加密信息
利用java编写网络聊天程序并加密信息 优化了代码后的地址:https://blog.csdn.net/qq_43483251/article/details/125470514?spm=1001.2 ...
- 为了偷懒,我开始用Python编写Android应用程序
为了偷懒,我开始用Python编写Android应用程序 说明 环境准备 开发环境准备(windows) 编译环境准备 自行配置制作编译环境 偷懒:直接下载配置好的虚拟机 编译 验证APK 总结 说明 ...
- Python 编写的图形程序打包为安卓 APP、IOS
如果想使用 Python 语言编写图形界面程序,那么有不少的框架可以提供支持,比如 Kivy.Tkinter.PyQt.WxPython.pyui4win等等. 这些框架都是只能创建桌面图形界面程序, ...
- python编写一计票程序,键盘输入候选人姓名(输入“#”结束),使用字典存储并统计出候选人得票数。python实现分段函数。
一.编程题目 编程题目1:python编写一计票程序,键盘输入候选人姓名(输入"#"结束),使用字典存储并统计出候选人得票数. 编程题目2:pytho ...
- 如何使用Python编写简易木马程序
这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Sublime text2 +JEDI(python自动补全插件)来撸代码. 首先 准备好我们需要的依赖库,pytho ...
- Python编写简易木马程序
0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Sublime text2 +JEDI(python自动补全 ...
- Java实验:编写网络聊天程序(图形界面)
课程名称 高级Java程序设计 实验项目 Java网络编程 实验目的: 使用客户机/服务器模式.基于TCP协议编写一对多"群聊"程序.其中客户机端单击"连接服务器&quo ...
最新文章
- ASIHTTPRequest取消异步请求
- 在C 函数中保存状态:registry、reference和upvalues
- php ci nginx 伪静态rewrite配置方法
- 控制是否展示_非线性控制(四)描述函数法
- 前端学习(1865)vue之电商管理系统电商系统之实现表单的数据绑定
- 你的项目是否真的需要 DevOps?
- MySQL 8.0中的JSON增强
- 在文件编辑器中添加dock菜单项_将应用程序添加到Mac 的Dock的简便方法
- SAP License:SAP不便解决的问题之七——权限问题
- 具体数学-第9课(取整进阶与数论入门)
- 【POJ3070】斐波那契数列f[n]的后四位,n达1e+9(矩阵快速幂模版题)
- 再谈mysql之执行计划explain
- iOS--地图找房(类似链家、安居客等地图找房)
- 2021-4-22-Python自动化31期-day01作业答案
- 28. 移动端touch触摸事件
- nas 软件 性能测试,NAS性能测试器(NAS performance tester)
- 武汉光谷国际人工智能产业论坛之学习
- Mac系统升级Python版本(Python2.7升级到Python3.8.2)
- 数据分析(一)豆瓣华语电影分析
- returnreturns