欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利于python腳本編寫可視化nmap和masscan的方法

 更新時(shí)間:2020年12月29日 14:16:49   作者:Hunter網(wǎng)絡(luò)安全  
這篇文章主要介紹了利于python腳本編寫可視化nmap和masscan的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

介紹

我編寫了一個(gè)快速且?guī)в邪唿c(diǎn)的python腳本,以可視化nmap和masscan的結(jié)果。它通過解析來自掃描的XML日志并生成所掃描IP范圍的直觀表示來工作。以下屏幕截圖是輸出示例:

由于缺少更好的詞,我將從現(xiàn)在開始將輸出稱為地圖。每個(gè)主機(jī)由一個(gè)彩色正方形表示。覆蓋地圖大部分內(nèi)容的淺藍(lán)色方塊表示主機(jī)處于脫機(jī)狀態(tài)(或僅未響應(yīng)masscan的SYN。)其他彩色方塊表示處于聯(lián)機(jī)狀態(tài)且具有開放端口的主機(jī)。正方形的顏色從藍(lán)色到紅色。正方形越紅,表示主機(jī)上打開的端口越多。將鼠標(biāo)懸停在每個(gè)方塊上,將在工具提示中顯示IP地址和打開的端口。

該工具非常有用,因?yàn)樗鼓梢源笾铝私釯P范圍,而不必在日志文件中拖網(wǎng)。它使您可以輕松查看掃描中的主機(jī)塊。該工具可以從github下載,但是我將在下面描述代碼的工作方式。

如何使用

首先,我要說這段代碼沒有經(jīng)過優(yōu)化。我已經(jīng)針對(duì)/ 21的日志運(yùn)行了代碼,并花費(fèi)了大約40秒鐘來生成輸出映射。

第一步是查找運(yùn)行掃描的IP地址范圍。由于掃描命令未保存在日志文件中,因此這真是一個(gè)痛苦。因此,我們必須根據(jù)最低和最高IP結(jié)果來計(jì)算范圍。我們從掃描中解析XML文件,并將掃描到的每個(gè)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并將每個(gè)八位位組分成單獨(dú)的列表,分別稱為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]))

然后,我們將每個(gè)結(jié)果的每個(gè)八位位組與另一個(gè)結(jié)果的相同八位位組進(jìn)行比較,以確定值發(fā)生變化的八位位組。例如。如果前兩個(gè)八位位組始終相同。我們知道掃描的CIDR表示法將大于/ 16。我使用了變量bitDelimeter來存儲(chǔ)CIDR表示法截取的八位字節(jié)的值。

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個(gè)嵌套的FOR循環(huán)生成的,每個(gè)循環(huán)在0 – 256范圍內(nèi)循環(huán)。此范圍開始的八位位組取決于bitDelimeter。例如。如果掃描了IP地址范圍192.168.10.0/24。位定界符將為3,指示最后一個(gè)八位位組是更改其值的八位位組。因此,用于生成要放入parsedServers的IP地址的循環(huán)將固定前三個(gè)八位字節(jié),并僅對(duì)最后一個(gè)八位字節(jié)循環(huán)范圍為0 – 256。如果我們掃描/ 21,則位定界符將為2,因此生成IP地址的循環(huán)將固定前兩個(gè)八位位組。將根據(jù)掃描的最小第三八位字節(jié)值和掃描的最大第三八位字節(jié)值的范圍生成第三八位字節(jié)。第四個(gè)八位位組的范圍是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] = []

現(xiàn)在,我們有一個(gè)parsedServer排序的dict,其中包含我們掃描范圍內(nèi)的所有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)

現(xiàn)在,我們需要生成一個(gè)HTML頁面,可用于可視化結(jié)果。這是使用Flask完成的。我們遍歷包含所有數(shù)據(jù)的pasedServers字典。創(chuàng)建一個(gè)infoString,其中包含當(dāng)前迭代的IP地址和端口。當(dāng)光標(biāo)懸停在地圖上的正方形上時(shí),將在工具提示中使用此功能。創(chuàng)建htmlBuffer并將其附加到parsedServers字典的每次迭代中。每次迭代都會(huì)添加HTML代碼,以使用從colourRange列表中提取的顏色添加新的表格數(shù)據(jù)單元。范圍中總地址的平方根表示何時(shí)需要在表中添加新行。這樣可以使結(jié)果在頁面上顯示為正方形。

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中進(jìn)行迭代,地址為192.168.10.22,并且打開了3個(gè)端口。將使用工具提示中列出的IP地址和端口創(chuàng)建一個(gè)表格數(shù)據(jù)單元。單元格的背景顏色將從包含9個(gè)十六進(jìn)制顏色代碼的colourRange列表中提取。列表上的索引越高,顏色越紅色。在此示例中,IP地址有3個(gè)開放的端口。因此,第三個(gè)索引中的顏色將設(shè)置為背景色,從而使數(shù)據(jù)單元格變?yōu)樽仙?/p>

最后,我們將模板傳遞給htmlBuffer。然后運(yùn)行Web服務(wù)器。通過瀏覽至127.0.0.1:5000,可以找到輸出。

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

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

到此這篇關(guān)于利于python腳本編寫可視化nmap和masscan的文章就介紹到這了,更多相關(guān)python編寫可視化nmap和masscan內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中通用的文本相似度計(jì)算方法詳解

    Python中通用的文本相似度計(jì)算方法詳解

    這篇文章主要為大家詳細(xì)介紹了三種Python中通用的文本相似度計(jì)算方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • Python使用pathlib庫實(shí)現(xiàn)優(yōu)雅的處理路徑

    Python使用pathlib庫實(shí)現(xiàn)優(yōu)雅的處理路徑

    如果你需要在 Python 里進(jìn)行文件處理,那么標(biāo)準(zhǔn)庫中的os和os.path兄弟倆一定是你無法避開的兩個(gè)模塊,本文主要來和大家聊聊如何使用pathlib庫實(shí)現(xiàn)優(yōu)雅的處理路徑,感興趣的可以了解下
    2023-12-12
  • 使用python批量轉(zhuǎn)換文件編碼為UTF-8的實(shí)現(xiàn)

    使用python批量轉(zhuǎn)換文件編碼為UTF-8的實(shí)現(xiàn)

    這篇文章主要介紹了使用python批量轉(zhuǎn)換文件編碼為UTF-8的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python OpenCV實(shí)現(xiàn)視頻追蹤

    Python OpenCV實(shí)現(xiàn)視頻追蹤

    這篇文章主要為大家詳細(xì)介紹了Python OpenCV實(shí)現(xiàn)視頻追蹤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 解決selenium模塊利用performance獲取network日志請(qǐng)求報(bào)錯(cuò)的問題(親測(cè)有效)

    解決selenium模塊利用performance獲取network日志請(qǐng)求報(bào)錯(cuò)的問題(親測(cè)有效)

    這篇文章主要介紹了解決selenium模塊利用performance獲取network日志請(qǐng)求報(bào)錯(cuò)的問題(親測(cè)有效),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • 詳解Python如何實(shí)現(xiàn)批量為PDF添加水印

    詳解Python如何實(shí)現(xiàn)批量為PDF添加水印

    我們有時(shí)候需要把一些機(jī)密文件發(fā)給多個(gè)客戶,為了避免客戶泄露文件,會(huì)在機(jī)密文件中添加水印。本文將利用Python實(shí)現(xiàn)批量為PDF添加水印,需要的可以參考一下
    2022-05-05
  • python如何實(shí)現(xiàn)全角半角的相互轉(zhuǎn)換

    python如何實(shí)現(xiàn)全角半角的相互轉(zhuǎn)換

    這篇文章主要介紹了python如何實(shí)現(xiàn)全角半角的相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Python實(shí)現(xiàn)拉格朗日插值法的示例詳解

    Python實(shí)現(xiàn)拉格朗日插值法的示例詳解

    插值法是一種數(shù)學(xué)方法,用于在已知數(shù)據(jù)點(diǎn)(離散數(shù)據(jù))之間插入數(shù)據(jù),以生成連續(xù)的函數(shù)曲線,而格朗日插值法是一種多項(xiàng)式插值法。本文就來用Python實(shí)現(xiàn)拉格朗日插值法,希望對(duì)大家有所幫助
    2023-02-02
  • Python解決走迷宮問題算法示例

    Python解決走迷宮問題算法示例

    這篇文章主要介紹了Python解決走迷宮問題算法,結(jié)合實(shí)例形式分析了Python基于二維數(shù)組的深度優(yōu)先遍歷算法解決走迷宮問題相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    這篇文章主要介紹了python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例,代碼簡單卻功能強(qiáng)大!需要的朋友可以參考下
    2014-07-07

最新評(píng)論