利于python脚本编写可视化nmap和masscan的方法

介绍

我编写了一个快速且带有斑点的python脚本,以可视化nmap和masscan的结果。它通过解析来自扫描的XML日志并生成所扫描IP范围的直观表示来工作。以下屏幕截图是输出示例:

由于缺少更好的词,我将从现在开始将输出称为地图。每个主机由一个彩色正方形表示。覆盖地图大部分内容的浅蓝色方块表示主机处于脱机状态(或仅未响应masscan的SYN。)其他彩色方块表示处于联机状态且具有开放端口的主机。正方形的颜色从蓝色到红色。正方形越红,表示主机上打开的端口越多。将鼠标悬停在每个方块上,将在工具提示中显示IP地址和打开的端口。

该工具非常有用,因为它使您可以大致了解IP范围,而不必在日志文件中拖网。它使您可以轻松查看扫描中的主机块。该工具可以从github下载,但是我将在下面描述代码的工作方式。

如何使用

首先,我要说这段代码没有经过优化。我已经针对/ 21的日志运行了代码,并花费了大约40秒钟来生成输出映射。

第一步是查找运行扫描的IP地址范围。由于扫描命令未保存在日志文件中,因此这真是一个痛苦。因此,我们必须根据最低和最高IP结果来计算范围。我们从扫描中解析XML文件,并将扫描到的每个IP地址附加到名为ipList的列表中

ipList = []
for event, element in etree.iterparse('output.xml', tag="host"):
 for child in element:
  if child.tag == 'address':
  ipList.append(child.attrib['addr'])

然后,我们遍历ipList并将每个八位位组分成单独的列表,分别称为firstOctetRange,secondOctetRange,thirdOctetRang和forwardOctetRange。

firstOctetRange = []
secondOctetRange = []
thirdOctetRange = []
forthOctetRange = []
bitDelimeter = 0
startingIP = 0
endingIP = 0
for ip in ipList:
 binaryOctet = ''
 octets = ip.split('.')
 firstOctetRange.append(int(octets[0]))
 secondOctetRange.append(int(octets[1]))
 thirdOctetRange.append(int(octets[2]))
 forthOctetRange.append(int(octets[3]))

然后,我们将每个结果的每个八位位组与另一个结果的相同八位位组进行比较,以确定值发生变化的八位位组。例如。如果前两个八位位组始终相同。我们知道扫描的CIDR表示法将大于/ 16。我使用了变量bitDelimeter来存储CIDR表示法截取的八位字节的值。

if min(firstOctetRange) != max(firstOctetRange):
 bitDelimeter = 0
elif min(secondOctetRange) != max(secondOctetRange):
 bitDelimeter = 1
elif min(thirdOctetRange) != max(thirdOctetRange):
 bitDelimeter = 2
elif min(forthOctetRange) != max(forthOctetRange):
 bitDelimeter = 3

扫描的IP地址范围被添加到称为parsedServers的有序字典中。ip地址是使用一系列4个嵌套的FOR循环生成的,每个循环在0 – 256范围内循环。此范围开始的八位位组取决于bitDelimeter。例如。如果扫描了IP地址范围192.168.10.0/24。位定界符将为3,指示最后一个八位位组是更改其值的八位位组。因此,用于生成要放入parsedServers的IP地址的循环将固定前三个八位字节,并仅对最后一个八位字节循环范围为0 – 256。如果我们扫描/ 21,则位定界符将为2,因此生成IP地址的循环将固定前两个八位位组。将根据扫描的最小第三八位字节值和扫描的最大第三八位字节值的范围生成第三八位字节。第四个八位位组的范围是0 – 256。

if bitDelimeter == 0:
 for one in range(min(firstOctetRange), max(firstOctetRange) + 1):
  for two in range(0, 256):
   for three in range(0, 256):
    for four in range(0, 256):
     ip = "%d.%d.%d.%d" % (one, two, three, four)
     parsedServers[ip] = []
if bitDelimeter == 1:
 one = min(firstOctetRange)
 for two in range(min(secondOctetRange), max(secondOctetRange) + 1):
  for three in range(0, 256):
   for four in range(0, 256):
    ip = "%d.%d.%d.%d" % (one, two, three, four)
    parsedServers[ip] = []
if bitDelimeter == 2:
 one = min(firstOctetRange)
 two = min(secondOctetRange)
 for three in range(min(thirdOctetRange), max(thirdOctetRange) + 1):
  for four in range(0, 256):
   ip = "%d.%d.%d.%d" % (one, two, three, four)
   parsedServers[ip] = []
if bitDelimeter == 3:
 one = min(firstOctetRange)
 two = min(secondOctetRange)
 three = min(thirdOctetRange)
 for four in range(min(forthOctetRange), max(forthOctetRange) + 1):
  ip = "%d.%d.%d.%d" % (one, two, three, four)
  parsedServers[ip] = []

现在,我们有一个parsedServer排序的dict,其中包含我们扫描范围内的所有IP地址。下一步是将扫描中找到的打开端口添加到parsedServer字典中。

for event, element in etree.iterparse('output.xml', tag="host"):
 for child in element:
  if child.tag == 'address':
   ipAddress = child.attrib['addr']
  if child.tag == 'ports':
   for subChild in child:
    port = [subChild.attrib['portid']]
    parsedServers[ipAddress].append(port)

现在,我们需要生成一个HTML页面,可用于可视化结果。这是使用Flask完成的。我们遍历包含所有数据的pasedServers字典。创建一个infoString,其中包含当前迭代的IP地址和端口。当光标悬停在地图上的正方形上时,将在工具提示中使用此功能。创建htmlBuffer并将其附加到parsedServers字典的每次迭代中。每次迭代都会添加HTML代码,以使用从colourRange列表中提取的颜色添加新的表格数据单元。范围中总地址的平方根表示何时需要在表中添加新行。这样可以使结果在页面上显示为正方形。

count = 0
htmlBuffer = Markup('')
for key, value in parsedServers.items():
 infoString = str(key) + '<br>'
 if value:
  infoString += 'Ports:'
  for portValue in value:
   infoString += str(portValue) + ','
 colourRange = ['94A5FF', '0024E5', '2422C5', '4821A6', '6D1F87', '911E67', 'B61C48', 'DA1B29', 'FF1A0A']
 htmlBuffer += Markup('<td class="tooltip", bgcolor="' + colourRange[len(value)] + '"><span class="tooltiptext">' + infoString + '</span></td>')<br> count += 1<br> if count > math.sqrt(len(parsedServers)):<br>  htmlBuffer += Markup('</tr><tr>')
  count = 0

例如。我们正在parsedServers中进行迭代,地址为192.168.10.22,并且打开了3个端口。将使用工具提示中列出的IP地址和端口创建一个表格数据单元。单元格的背景颜色将从包含9个十六进制颜色代码的colourRange列表中提取。列表上的索引越高,颜色越红色。在此示例中,IP地址有3个开放的端口。因此,第三个索引中的颜色将设置为背景色,从而使数据单元格变为紫色。

最后,我们将模板传递给htmlBuffer。然后运行Web服务器。通过浏览至127.0.0.1:5000,可以找到输出。

@app.route('/')
def index():
 return render_template('index.html', name=htmlBuffer)

if __name__ == '__main__':
 app.run()

到此这篇关于利于python脚本编写可视化nmap和masscan的文章就介绍到这了,更多相关python编写可视化nmap和masscan内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python使用pyecharts库画地图数据可视化的实现

    python使用pyecharts库画地图数据可视化导库中国地图代码结果世界地图代码结果省级地图代码结果地级市地图代码结果 导库 from pyecharts import options as opts from pyecharts.charts import Map 中国地图 代码 data = [('湖北', 9074),('浙江', 661),('广东', 632),('河南', 493),('湖南', 463), ('安徽', 340),('江西', 333),('重庆', 275),

  • python代码实现TSNE降维数据可视化教程

    TSNE降维 降维就是用2维或3维表示多维数据(彼此具有相关性的多个特征数据)的技术,利用降维算法,可以显式地表现数据.(t-SNE)t分布随机邻域嵌入 是一种用于探索高维数据的非线性降维算法.它将多维数据映射到适合于人类观察的两个或多个维度. python代码 km.py #k_mean算法 import pandas as pd import csv import pandas as pd import numpy as np #参数初始化 inputfile = 'x.xlsx' #销量及

  • Python HTMLTestRunner可视化报告实现过程解析

    操作步骤 1.下载HTMLTestRunner.py 2.把文件复制到python安装/lib位置下 3. 3.导入:import HTMLTestRunner import unittest 4.mian执行: 1.实例化:ts = unittest.TestSuite() 2.按类加载全部testxxx测试用例:ts.addTest(unittest.TestLoader().loadTestsFromTestCase(类名)) 按函数加载testxxx测试用例:ts.addTest(类名(

  • python nmap实现端口扫描器教程

    NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting).它是网络管理员必用的软件之一,以及用以评估网络系统安全. 正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 .系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜

  • Python BeautifulReport可视化报告代码实例

    操作步骤 1.下载BeautifulReport文件,本例文件下载地址 最新文件下载地址 2.复制文件BeautifulReport,至python安装Lib\site-packages位置下 3. 3.导入:from BeautifulReport import BeautifulReport import unittest 4.testXXX测试用例函数下可视化报告用例描述:'''描述,第一个测试用例''' 5.mian下执行: 1.实例化:ts = unittest.TestSuite()

  • 利于python脚本编写可视化nmap和masscan的方法

    介绍 我编写了一个快速且带有斑点的python脚本,以可视化nmap和masscan的结果.它通过解析来自扫描的XML日志并生成所扫描IP范围的直观表示来工作.以下屏幕截图是输出示例: 由于缺少更好的词,我将从现在开始将输出称为地图.每个主机由一个彩色正方形表示.覆盖地图大部分内容的浅蓝色方块表示主机处于脱机状态(或仅未响应masscan的SYN.)其他彩色方块表示处于联机状态且具有开放端口的主机.正方形的颜色从蓝色到红色.正方形越红,表示主机上打开的端口越多.将鼠标悬停在每个方块上,将在工具提

  • POC漏洞批量验证程序Python脚本编写

    目录 编写目的 需求分析 实现过程 Main函数 获取目标 批量请求验证 加载POC 多线程类 urlParse getProxy randomHeaders 输出结果 其他 全局变量 命令行读取参数 poc详情显示 Ctrl+C结束线程 poc.json文件 运行结果 FoFa获取目标 poc验证 总结 完整代码 编写目的 批量验证poc,Python代码练习. 需求分析 1.poc尽可能简单. 2.多线程. 3.联动fofa获取目标. 4.随机请求头. 实现过程 脚本分为三个模块,获取poc

  • 用python脚本24小时刷浏览器的访问量方法

    如下所示: # -*- coding=utf-8 -*- import urllib2 import socket import time urls = raw_input("Please enter a web address: \n> ") print "\nAccess web page start..." brushNum = 3600 for i in range(brushNum): url = urls socket.setdefaulttime

  • Python脚本文件外部传递参数的处理方法

    前言 我们写的 Python 脚本需要修改参数,当我们将脚步上传到服务器或者给不会编程的人用时,会比较不方便,如果直接可以在外部指定参数,会非常方便,今天介绍的就是 Python 外部指定参数的几种方法. 一.流文本处理 这种方法适用于修改一下文件中的内容,配合 Linux 命令非常方便,举一个例子,我们需要从一个 binlog 文件中找到该里面最大的事物,我们要配合 mysqldump 来做: mysqlbinlog -v --base64-output=decode-row ./mysql-

  • python脚本设置超时机制系统时间的方法

    本文为大家介绍了python脚本设置系统时间的方法,一共有两种,其一是调用socket直接发送udp包到国家授时中心,其二是调用ntplib包.我在本地电脑ping 国家授时中心地址cn.pool.ntp.org有时出现丢包,然而,二者都没有检查udp是否丢包的机制,方法一在udp丢包后一直处于阻塞状态无法退出,方法二虽然会提示超时,但是不再做其它尝试,比如重新发包,或者向同一个域名的不同IP地址发包.于是,尝试在方法一的代码基础上,增加了超时机制,并且尝试向同一个域名的不同IP地址发包. 具体

  • python脚本设置系统时间的两种方法

    本文为大家分享了两种python脚本设置系统时间的方法,供大家参考,具体内容如下 第一种方法,使用Python设置系统时间,即给系统校时 #电脑时间用了一段时间后,系统时间不准了,想更新一下 #在windows里面,更新系统时间,时常失败,而且速度很忙. #在网上拷贝的代码,发现很好用,比windows自带的实现要快. #-*- coding:utf-8 -*- import socket import struct import time import win32api TimeServer

  • Python脚本利用adb进行手机控制的方法

    一.  adb 相关命令: 1. 关闭adb服务:adb kill-server 2. 启动adb服务  adb start-server 3. 查询当前运行的所有设备  adb devices 4. 可能在adb中存在多个虚拟设备运行 可以指定虚拟设备运行  -s 虚拟设备名称 5. 重启设备 adb reboot  --指定虚拟设备   adb -s 设备名称 reboot 6. 查看日志  adb logcat  清除日志 adb logcat -c 7. 进入linux shell下 

  • python Django编写接口并用Jmeter测试的方法

    一.环境准备 python3.6.7 Pycharm 二.创建项目 我这里是在Django项目中新建了个APP,目录结构如下图所示: 那么怎么在已有的Django项目中新建APP并进行配置呢: 2.1.新建app a.可以在终端输入命令:python manage.py startapp myapp(这里myapp是指你自己app的名称),如下图所示: b.也可以在pycharm中找到Tools-->Run manage.py Task, 在弹出的命令框中输入:startapp myapp(这里

  • python如何编写类似nmap的扫描工具

    本文主要是利用scapy包编写了一个简易扫描工具,支持ARP.ICMP.TCP.UDP发现扫描,支持TCP SYN.UDP端口扫描,如下: usage: python scan.py <-p ping扫描类型> <-s 端口发现类型> [-t target] [--port ports] 简单扫描工具,可以进行存活扫描及端口扫描. 存活扫描包括:ARP扫描.ICMP扫描.TCP扫描.UDP扫描. 端口扫描包括:TCP SYN扫描.TCP ACK扫描.TCP FIN扫描. optio

  • 利用Python进行数据可视化常见的9种方法!超实用!

    前言 如同艺术家们用绘画让人们更贴切的感知世界,数据可视化也能让人们更直观的传递数据所要表达的信息. 我们今天就分享一下如何用 Python 简单便捷的完成数据可视化. 其实利用 Python 可视化数据并不是很麻烦,因为 Python 中有两个专用于可视化的库 matplotlib 和 seaborn 能让我们很容易的完成任务. Matplotlib:基于Python的绘图库,提供完全的 2D 支持和部分 3D 图像支持.在跨平台和互动式环境中生成高质量数据时,matplotlib 会很有帮助

随机推荐