摘要:2、測試一下rate爲210kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。3、測試一下rate爲170kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。

少俠,請留步!

在下這有一份你要搞的那個內網的主機端口明細表。

少俠你在接下來進行的全內網端口探測的過程中,可能會遇到以下棘手的情況:

①需要對巨量的ip進行全端口探測;(nmap耗時太長,等的讓你懷疑人生的那種)

② 高速度與低誤報二者不可兼得;(魚與熊掌不可兼得)

③有些服務器有着嚴格的防火牆策略;(tcp頭改啥標誌位怕也是不好混進去)

關於以上問題本文提出了恰當的解決方案,全文充滿了作者獨到的見解,不可不看呀;

資產統計中你拿到巨多的ip,需要爲每個ip統計詳細到每個端口的信息時,你有沒有經歷過漫長的等待,看着nmap緩慢的百分比進度,簡直想卸載了nmap。

nmap的優勢不在於進行如此大範圍的資產探測;

而是對於少量ip進行細緻的探測。

masscan和zmap則是此類擅長者。

關於nmap、zmap、masscan對比,此處不做贅述,請看下面這位老哥的文章;

https://www.freebuf.com/sectool/119340.html

簡言之,zmap與masscan皆採用異步傳輸;

而且,在對任意地址端口的組合的探測時,masscan表現的更加靈活和出色;

但是,masscan和zmap都有一個無法忍受的誤報率。

影響masscan誤報率的因素有很多,主要有這麼三個方面:發包速度、網絡性能、tcp/ip堆棧衝突;

不同網絡環境中網絡的性能不同,且網絡性能涉及到的因素很多,丟包率、抖動率、時延、包轉發率等等,且網絡性能這項是我們無法改變的,所以我們先把網絡性能作爲一個常量;

但是發包速度和tcp/ip堆棧衝突是我們能改變的。

理論上:

 a、解決了堆棧衝突誤報率會變低;
 b、發包速度越慢誤報率越低;

但是發包速度和誤報率之間並不是嚴格的正比關係,並且發包速度太低masscan就沒有了使用意義。

所以,需要先來探究一下,怎樣的網絡性能下配置多少的發包速度可以兼顧速度與準確率。

我在本地網絡做了一個關於masscan的小實驗:

1、先測試一下本地網絡最大能支持的包轉發率,如下圖所示

結果:表示包轉發率的rate值一直在170-kpps~210kpps之間波動

2、測試一下rate爲210kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

結果:探測的開放端口數量爲38個

3、測試一下rate爲170kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

結果:探測到開放端口數量爲48個

4、測試一下rate爲110kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

結果:探測到開放端口數量爲52個

5、測試一下rate爲100kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

結果:探測到開放端口數量爲52個

6、測試一下rate爲80kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

結果:探測到開放端口數量爲53

7、測試一下rate爲50kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

結果:探測到開放端口數量爲53個

8、測試一下rate爲10kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

結果:探測到開放端口數量爲53個

9、測試一下rate爲1kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

結果:探測到開放端口數量爲53個

測試速度低於1kpps,就太慢了,就算結果更準確卻沒有意義了,所以低於1kpps的就不做測試了。

統計一下以上測試的結果:

轉發率(kpps) 210 170 110 100 80 50 10 1
探測到的開放端口個數 38 48 52 53 53 53 53 53

我們可以發現在我當前的網絡環境中,轉發率爲100kpps時是最合適的速度大小,可能在不同網絡中會有一些差異。

以上是測試結果,我們每一次使用masscan總不可能都這麼測吧,確實如此。

我分享一下我的經驗:最合適的速度一般是在網絡最大轉發率的50%左右。

看完了速度與誤報率的關係後,我們來看一下masscan的tcp/ip堆棧衝突。

其實呀,masscan是擁有獨立的TCP/IP堆棧的;

在平時使用中,我發現當爲masscan配置單獨的ip時;

它的性能才能被充分發揮!!!誤報率顯著降低。

我們來看一下,當配置獨立ip,轉發率爲100kpps時,其他情況完全不變,masscan的掃描結果如何?如下圖所示

結果:探測到開放的的端口數量爲157個

這與剛纔的100kpps時發現的53個相比,幾乎三倍!!!

在這種情況下我估算了一下它的速度:10分鐘掃描1000個ip的全端口。

這是nmap速度的一千多倍,而且在準確度上幾乎沒有差別。

在獲得ip的全端口探測結果之後,你並不能確定端口對應的服務是什麼?

這時候就可以使用nmap了,nmap有着豐富的指紋庫,可以爲我們確定端口對應的服務版本。

先調用masscan庫掃描,再調用nmap庫掃描,如果ip端口數量過多,可以配合多線程;後面會完善一下代碼再放在github上,這裏先放出簡略版。

以上代碼實現如下:

還有開篇提到的最後一個問題,有些服務器有着嚴格的防火牆策略怎麼辦?

有防火牆,需要對其進行各種騷姿勢的繞過時,masscan就顯得很無力了。

這時還是nmap更爲適合,配合python的多線程,速度也過的去。

過防火牆姿勢有很多,感興趣的可以去看《nmap滲透測試》這本書,這裏只講我平時常用的兩種。

1、數據包分片

有些防火牆爲了減少數據包壓力,不會對數據包進行組合之後再檢查,而是對單個數據包直接檢查。

如下圖所示

2、指定源端口

防火牆的存在往往會影響一些業務的工作,管理員很有可能會放行來自特定端口的數據包,比如說源端口53的dns服務。

如下圖所示

相關文章