nmap掃描的方法
原文 the art of port scanning
tcp connect()
這種方式最簡(jiǎn)單。直接與被掃描的端口建立tcp鏈接,如果成功,則說(shuō)明端口開(kāi)放,如果不成功則說(shuō)明端口關(guān)閉的。這種掃描的特點(diǎn)是與被掃描端口建立完成的tcp鏈接,完整的tcp三次握手。優(yōu)點(diǎn)主要是不需要root權(quán)限即可掃描端口。因?yàn)閏onnect可以在用戶態(tài)直接調(diào)用
TCP SYN scanning
這種掃描方式又被稱為tcp半開(kāi)放掃描。顧名思義,這種掃描不需要建立完整的tcp連接,即可掃描端口的狀態(tài)。發(fā)送tcp syn數(shù)據(jù)包,這個(gè)也是tcp握手的第一個(gè)包。如果端口開(kāi)放,則會(huì)返回 tcp syn+ack數(shù)據(jù)包。如果端口關(guān)閉,則返回 tcp rst數(shù)據(jù)包。這樣我們就不用進(jìn)行tcp 握手的第三步,也可以探測(cè)端口的狀態(tài)。這種掃描需要構(gòu)建raw socket。所以需要root權(quán)限
TCP FIN scanning
有些時(shí)候防火墻繪過(guò)濾tcp syn數(shù)據(jù)包,有些時(shí)候會(huì)記錄syn數(shù)據(jù)包并檢測(cè)時(shí)候有nmap掃描。這時(shí)候可以使用TCP FIN scanning。這種方式很簡(jiǎn)單。發(fā)送tcp FIN數(shù)據(jù)包到待測(cè)端口。如果返回RST數(shù)據(jù)包,則說(shuō)明該端口關(guān)閉,如果無(wú)返回則說(shuō)明該端口開(kāi)放。這時(shí)tcp協(xié)議的一個(gè)BUG,所以這種掃描方式不一定百分之百可靠(例如windows),但是這種掃描方式適合大部分 *NIX 系統(tǒng)。
TCP NULL, FIN, and Xmas scans
在RFC 793的第65頁(yè)寫(xiě)到,如果目的端口的是關(guān)閉的,并且接受到的tcp數(shù)據(jù)包如果可能會(huì)導(dǎo)致系統(tǒng)錯(cuò)誤,則返回RST。如果開(kāi)放的端口接受到諸如SYN RST ACK,則丟棄或者不做任何處理。根據(jù)此RFC描述,我們可以發(fā)送不包含SYN RST或者ACK標(biāo)志的數(shù)據(jù)包,如果返回RST則說(shuō)明端口是關(guān)閉狀態(tài),如果什么都沒(méi)有返回則說(shuō)明端口是開(kāi)放狀態(tài)。
- Null scan
tcp flag headers 全為0 - FIN scan
只設(shè)置tcp FIN標(biāo)志 - xmas scan
同時(shí)設(shè)置FIN PSH URG標(biāo)志位。
上面這三種掃描的結(jié)果都是一致的,如果接受到到RST,則說(shuō)明端口是關(guān)閉的。如果無(wú)響應(yīng),則端口可能是開(kāi)放或者filteted狀態(tài)。如果返回icmp unreachable error(type 3, code 0, 1, 2, 3, 9, 10, 13),則說(shuō)明端口一定是filtered的。
TCP ACK scan
這種掃描只設(shè)置tcp ack標(biāo)志位。這種掃描一般來(lái)探測(cè)防火墻是否過(guò)濾被掃描的端口。如果掃描的端口未被防火墻保護(hù),那么無(wú)論是開(kāi)放或者是關(guān)閉,都會(huì)返回RST。nmap將該端口標(biāo)記為未被封鎖的(unfiltered),但是不能確定該端口是開(kāi)放或者關(guān)閉狀態(tài)。如果無(wú)響應(yīng),或者返貨icmp error,則該端口一定被防火墻封鎖了
TCP Window scan
tcp窗口掃描,如果接收到RST,則說(shuō)明端口封鎖了。在某些操作系統(tǒng),開(kāi)放的端口會(huì)返回一個(gè)正數(shù)的tcp窗口值,如果端口關(guān)閉,則返回tcp窗口值為0或者負(fù)數(shù)。但是這種掃描不是很靠譜
TCP Maimon scan
這種掃描為發(fā)送同時(shí)設(shè)置FIN/ACK的數(shù)據(jù)包。如果返回RST,則說(shuō)明端口是開(kāi)放的,如果無(wú)響應(yīng),則是關(guān)閉狀態(tài)的。
IP protocol scan
這種是專門(mén)掃描ip協(xié)議的。掃描類似于udp掃描,如果IP協(xié)議號(hào)不存在,返回 icmp錯(cuò)誤。具體沒(méi)用過(guò),不太好寫(xiě)
UDP ICMP port unreachable scanning
如果udp端口開(kāi)放,則無(wú)響應(yīng)。如果udp端口關(guān)閉,則會(huì)返回icmp unreachable error錯(cuò)誤。這種掃描需要root權(quán)限,因?yàn)樾枰獦?gòu)建raw socket。
UDP connect掃描
這種直接一個(gè)一個(gè)建立udp連接,如果能建立,則說(shuō)明端口開(kāi)放,不能建立則端口關(guān)閉唄。