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