<font id="nc9yk"></font>
  • <tt id="nc9yk"></tt>
          <rp id="nc9yk"><optgroup id="nc9yk"></optgroup></rp>
          <tt id="nc9yk"><form id="nc9yk"></form></tt>

            <cite id="nc9yk"></cite>

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

             更新時間:2020年12月29日 14:16:49   作者:Hunter網絡安全  
            這篇文章主要介紹了利于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內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

            相關文章

            • Python struct.unpack

              Python struct.unpack

              Python中按一定的格式取出某字符串中的子字符串,使用struck.unpack是非常高效的。
              2008-09-09
            • 從零開始學Python第八周:詳解網絡編程基礎(socket)

              從零開始學Python第八周:詳解網絡編程基礎(socket)

              本篇文章主要介紹了從零開始學Python第八周:詳解網絡編程基礎(socket) ,具有一定的參考價值,有興趣的可以了解一下。
              2016-12-12
            • Python線程障礙對象Barrier原理詳解

              Python線程障礙對象Barrier原理詳解

              這篇文章主要介紹了Python線程障礙對象Barrier原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
              2019-12-12
            • 簡單介紹Python的輕便web框架Bottle

              簡單介紹Python的輕便web框架Bottle

              這篇文章主要介紹了Python的輕便web框架Bottle,因其注重輕便的設計,與Flask一樣,Bottle框架的人氣同樣也非常高,需要的朋友可以參考下
              2015-04-04
            • Python中Proxypool庫的安裝與配置

              Python中Proxypool庫的安裝與配置

              今天小編就為大家分享一篇關于Python中Proxypool庫的安裝與配置,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
              2018-10-10
            • Django在win10下的安裝并創建工程

              Django在win10下的安裝并創建工程

              本篇文章主要介紹了Django在win10下的安裝并創建工程,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
              2017-11-11
            • 詳解分布式任務隊列Celery使用說明

              詳解分布式任務隊列Celery使用說明

              這篇文章主要介紹了詳解分布式任務隊列Celery使用說明,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
              2018-11-11
            • 基于jupyter代碼無法在pycharm中運行的解決方法

              基于jupyter代碼無法在pycharm中運行的解決方法

              這篇文章主要介紹了基于jupyter代碼無法在pycharm中運行的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
              2020-04-04
            • Python用5行代碼寫一個自定義簡單二維碼

              Python用5行代碼寫一個自定義簡單二維碼

              今天小編就為大家分享一篇關于Python用5行代碼寫一個自定義簡單二維碼的文章,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
              2018-10-10
            • 編程語言Python的發展史

              編程語言Python的發展史

              這篇文章主要介紹了編程語言Python的發展史,本文詳細介紹了Python語言的發展歷史,需要的朋友可以參考下
              2014-09-09

            最新評論

            hao500彩票 www.godfoodwine.com:许昌县| www.aumetrodeslilas.com:济宁市| www.dow98.com:芒康县| www.heeeun.com:右玉县| www.michaeltrevillion.com:工布江达县| www.clutchsdelpotosi.com:汝州市| www.ibcscout.com:富平县| www.aiweizhi.com:昭平县| www.amnestyforanimals.org:合阳县| www.ceriacell.com:深水埗区| www.logosheji8.com:芦溪县| www.mesutaydin.com:南陵县| www.tszscl.com:绿春县| www.benhvienungthu.com:龙口市| www.fzv0.com:崇信县| www.camiladrozd.com:垦利县| www.dflvshi110.com:板桥市| www.borealmatters.org:满洲里市| www.xzrxsf.com:治县。| www.joedonovanpersonaltraining.com:海林市| www.rdknw.cn:巴彦县| www.vintage-denim.com:龙岩市| www.alao333.com:商水县| www.todoslosdiaz.com:凤阳县| www.hanse88.com:福州市| www.dlm-music.com:桦川县| www.cacros.com:革吉县| www.mfwwn.com:日喀则市| www.netcnz.com:武平县| www.gotta-go-fast.com:庄河市| www.rabarg.com:凉山| www.coimbratrail.com:长寿区| www.hao-jiazheng.com:盐山县| www.jtjdg.cn:阳东县| www.cinematocinema.com:广丰县| www.abouthorses.net:隆子县| www.3883pj.com:车险| www.zj-meihong.com:五大连池市| www.dawdev.com:喀喇沁旗| www.xpresspropane2u.com:博白县| www.aluminumcane.com:博客| www.ssmoban.com:泊头市| www.qqyyzs.com:句容市| www.dg-dacheng.com:儋州市| www.coimbratrail.com:武冈市| www.thailandelitevisa.org:南阳市| www.teeshirtyeswekahn.com:新余市| www.yangyang588.com:含山县| www.zhuzaiwl.com:康平县| www.postcanal.com:罗甸县| www.shilongwangcn.com:惠州市| www.agenciaaccords.com:沁水县| www.pentucketpride5k.com:大理市| www.blgzs88.com:新绛县| www.elihunter.com:海南省| www.f3n3.com:当雄县| www.187296.com:寻甸| www.weipengsc.com:沈阳市| www.5510086.com:安宁市| www.hbccp.com:廊坊市| www.vivaviralvideo.com:利辛县| www.hellobuynow.com:利川市| www.ipcstz-africa.org:富源县| www.dalyanpatiohotel.com:雷山县| www.greatlivecds.com:石屏县| www.mai0565.com:泉州市| www.zk597.com:二连浩特市| www.androidanalyze.com:古田县| www.karimjavadi.com:曲沃县| www.parachuteins.com:屏边| www.ceriacell.com:郓城县| www.foxconn371.com:崇明县| www.edhardybazar.com:潞城市| www.chaoren555.com:万源市| www.majohairbraiding.com:苏州市| www.homeworkoutsforseniors.com:高邮市| www.inlogan.com:南木林县| www.hand-code-directory.com:南昌县| www.bigideasgroup.org:镇雄县| www.ds1980.com:中卫市| www.deeblick.com:徐州市| www.sharansoft.com:多伦县| www.kd933.com:绥德县| www.cjbluxury.com:孝昌县|