日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

端口掃描軟件有哪些 手機(jī)掃描軟件排行榜( 三 )


怎么設(shè)計(jì)的代碼布局文件main.c包含該main()函數(shù) 。它還包含transmit_thread()和receive_thread()功能 。這些函數(shù)已被故意扁平化并進(jìn)行了大量注釋,以便您可以通過(guò)逐行逐行瀏覽每個(gè)函數(shù)來(lái)閱讀程序的設(shè)計(jì) 。
異步這是一個(gè)異步設(shè)計(jì) 。它具有獨(dú)立的發(fā)送和接收線程,這些線程在很大程度上彼此獨(dú)立 。
因?yàn)樗钱惒降?,所以它的運(yùn)行速度與底層數(shù)據(jù)包傳輸允許的一樣快 。
隨機(jī)化Masscan 與其他掃描儀的主要區(qū)別在于它隨機(jī)化目標(biāo)的方式 。
基本原則是有一個(gè)從零開始的單個(gè)索引變量,每次探測(cè)都增加 1 。在 C 代碼中,這表示為:
for (i = 0; i < range; i++) {scan(i);}我們必須將索引轉(zhuǎn)換為 IP 地址 。假設(shè)您要掃描所有“私有”IP 地址 。那將是范圍表,例如:
192.168.0.0/1610.0.0.0/8172.16.0.0/12在此示例中,前 64k 索引附加到 192.168.xx 以形成目標(biāo)地址 。然后,將接下來(lái)的 1600 萬(wàn)附加到 10.xxx 范圍內(nèi)的其余索引應(yīng)用到 172.16.xx
在這個(gè)例子中,我們只有三個(gè)范圍 。在掃描整個(gè) Internet 時(shí),我們實(shí)際上有 100 多個(gè)范圍 。那是因?yàn)槟仨殞⒃S多子范圍列入黑名單或排除在外 。這將所需的范圍切成數(shù)百個(gè)較小的范圍 。
這是代碼中最慢的部分之一 。我們每秒傳輸 1000 萬(wàn)個(gè)數(shù)據(jù)包,并且必須為每個(gè)探測(cè)將索引變量轉(zhuǎn)換為 IP 地址 。我們通過(guò)在少量?jī)?nèi)存中進(jìn)行“二分搜索”來(lái)解決這個(gè)問(wèn)題 。在此數(shù)據(jù)包速率下,緩存效率開始超過(guò)算法效率 。理論上有很多更有效的技術(shù),但它們都需要太多的內(nèi)存,以至于在實(shí)踐中會(huì)變慢 。
我們將把索引轉(zhuǎn)換成 IP 地址的pick()函數(shù) 。在使用中,它看起來(lái)像:
for (i = 0; i < range; i++) {ip = pick(addresses, i);scan(ip);}Masscan 不僅支持 IP 地址范圍,還支持端口范圍 。這意味著我們需要從索引變量中選擇 IP 地址和端口 。這是相當(dāng)簡(jiǎn)單的:
range = ip_count * port_count;for (i = 0; i < range; i++) {ip= pick(addresses, i / port_count);port = pick(ports,i % port_count);scan(ip, port);}這導(dǎo)致代碼的另一個(gè)昂貴部分 。在 x86 CPU 上,除法/模數(shù)指令大約為 90 個(gè)時(shí)鐘周期或 30 納秒 。當(dāng)以 1000 萬(wàn)個(gè)數(shù)據(jù)包/秒的速率傳輸時(shí),我們每個(gè)數(shù)據(jù)包只有 100 納秒 。我認(rèn)為沒(méi)有辦法更好地優(yōu)化它 。幸運(yùn)的是,兩個(gè)這樣的操作可以同時(shí)執(zhí)行,因此執(zhí)行其中兩個(gè)操作(如上所示)并不比執(zhí)行一個(gè)更昂貴 。
對(duì)于上面的性能問(wèn)題其實(shí)有一些簡(jiǎn)單的優(yōu)化,但是都依賴于i++索引變量增加 。實(shí)際上,我們需要隨機(jī)化這個(gè)變量 。我們需要隨機(jī)化我們掃描的 IP 地址的順序 。我們需要將流量均勻地分布在目標(biāo)上 。
隨機(jī)化的方式是簡(jiǎn)單地加密索引變量 。根據(jù)定義,加密是隨機(jī)的,并在原始索引變量和輸出之間創(chuàng)建一對(duì)一的映射 。這意味著當(dāng)我們線性地遍歷范圍時(shí),輸出的 IP 地址是完全隨機(jī)的 。在代碼中,這看起來(lái)像:
range = ip_count * port_count;for (i = 0; i < range; i++) {x = encrypt(i);ip= pick(addresses, x / port_count);port = pick(ports,x % port_count);scan(ip, port);}這也有很大的成本 。由于范圍是不可預(yù)測(cè)的大小,而不是很好的 2 的偶次冪,因此我們不能使用廉價(jià)的二進(jìn)制技術(shù),如 AND (&) 和 XOR (^) 。相反,我們必須使用昂貴的操作,例如 MODULUS (%) 。在我當(dāng)前的基準(zhǔn)測(cè)試中,加密變量需要 40 納秒 。
這種架構(gòu)允許許多很酷的功能 。例如,它支持“分片” 。您可以設(shè)置 5 臺(tái)機(jī)器,每臺(tái)機(jī)器執(zhí)行五分之一的掃描或 range / shard_count. 分片可以是多臺(tái)機(jī)器,也可以是同一臺(tái)機(jī)器上的多個(gè)網(wǎng)絡(luò)適配器,甚至(如果需要)同一網(wǎng)絡(luò)適配器上的多個(gè) IP 源地址 。

推薦閱讀