ZMap 為什么能在一個(gè)小時(shí)內(nèi)就掃描整個(gè)互聯(lián)網(wǎng)?
全球互聯(lián)網(wǎng)包含數(shù)十億個(gè)不重復(fù)地址,掃描整個(gè)互聯(lián)網(wǎng)是一項(xiàng)勞動(dòng)密集型工作,需要耗費(fèi)幾周甚至幾個(gè)月?,F(xiàn)在,密歇根大學(xué)研究人員發(fā)布了一個(gè)工具ZMap,用一臺(tái)普通的服務(wù)器耗時(shí)44分鐘就能掃描全部互聯(lián)網(wǎng)地址。掃描工具如Nmap使用的方法是發(fā)送請(qǐng)求然后監(jiān)聽(tīng)回應(yīng),雖然請(qǐng)求可以同步進(jìn)行,但為了記錄每一個(gè)未回應(yīng)請(qǐng)求需要大量開(kāi)銷(xiāo),導(dǎo)致速度下降。而ZMap使用了不同的方法,它發(fā)生的是無(wú)狀態(tài)請(qǐng)求,發(fā)送之后就忽略了,它不需要記錄未回應(yīng)請(qǐng)求的名單,而是在發(fā)送的數(shù)據(jù)包中編碼身份信息去識(shí)別回應(yīng),從而降低開(kāi)銷(xiāo)。ZMap發(fā)送數(shù)據(jù)包的速度是Nmap的上千倍。Nmap需要數(shù)周時(shí)間掃描全部網(wǎng)址,而ZMap只要幾十分鐘。密歇根研究人員利用ZMap發(fā)現(xiàn),100萬(wàn)***網(wǎng)站內(nèi)HTTPS使用率一年內(nèi)增加了23%。
傳統(tǒng)上的TCP/IP需要“三次握手”報(bào)文交互,在此期間需要維持記錄著與對(duì)方交互的狀態(tài)。
這種狀態(tài)記錄量是巨大的,占用內(nèi)存和CPU資源很大。
而ZMap索性就不進(jìn)行三次握手,只進(jìn)行***個(gè)SYN,然后等待對(duì)方回復(fù)SYN-ACK,之后即RST取消連接。這樣肯定會(huì)因網(wǎng)絡(luò)原因丟失一定比例的數(shù)據(jù),根據(jù)其實(shí)驗(yàn),這個(gè)比例在2%左右。
以上策略,在nmap中也有實(shí)現(xiàn),即其TCP SYN掃描方式。
關(guān)鍵性的問(wèn)題出現(xiàn)在對(duì)回復(fù)的SYN-ACK進(jìn)行seq number的校驗(yàn)。傳統(tǒng)上就需要記錄狀態(tài)。
而ZMap是將對(duì)方receiver ip地址進(jìn)行hash,將其處理保存到了sender port和seq number兩個(gè)字段中,當(dāng)SYN-ACK回來(lái)的時(shí)候,就可以根據(jù)sender ip、receiver port、ack number這些字段進(jìn)行校驗(yàn)。
因此避免了狀態(tài)存儲(chǔ),接近了網(wǎng)絡(luò)帶寬極限。

性能方面:
單臺(tái)服務(wù)器,掃描整個(gè)IPv4地址空間,耗時(shí)45分鐘,將所接1Gb的帶寬占用了97%。

不僅速度上比Nmap(TCP SYN模式)高不少,而且其設(shè)計(jì)的無(wú)狀態(tài)機(jī)制,讓其搜索成功的覆蓋率也增加了。

與Nmap等已有系統(tǒng)對(duì)比:
NMap是一個(gè)通用網(wǎng)絡(luò)監(jiān)測(cè)工具,可以適用于不同協(xié)議、不同范圍的測(cè)試。
而ZMap專(zhuān)做單端口、大范圍的網(wǎng)絡(luò)監(jiān)測(cè)。
這也讓ZMap能在這單一領(lǐng)域做很多優(yōu)化。
