TCP端口扫描方式
一、TCP
常用的端口掃描方式有以下三種:
1.connect掃描
我們知道,常見的TCP的socket實現(xiàn)過程為
更本質(zhì)的連接和結束的過程是如下這個樣子的:
從上面兩個圖我們可以看出來目標主機的一個端口如果是監(jiān)聽狀態(tài)(LISTENING或者LINSTEN),那么當我connect目標主機時就能成功,否則說明端口是關閉的。
優(yōu)點: ?編程簡單,是需要一個API connect(),比較可靠,因為TCP是可靠協(xié)議,當丟包的時候,會重傳SYN幀。
缺點: ?正因為TCP的可靠性,所以當端口不存在的時候,源主機會不斷嘗試發(fā)SYN幀企圖得到ack的應答,多次嘗試后才會放棄,因此造成了掃描的時間較長。并且,connect的掃描方式可能較容易被目標主機發(fā)現(xiàn)。
2.SYN掃描
上面說到出去開放狀態(tài)的端口,是在等待其它主機發(fā)送SYN幀,所以SYN掃描的原理就是向目標端口發(fā)送SUN數(shù)據(jù)幀,如果源主機收到SYN+ACK數(shù)據(jù)包,說明此端口開放,如果收到RST說明此端口關閉。由于SYN掃描并不會完成TCP三次握手過程,所以又叫半開放掃描。
優(yōu)點: ?速度快;如果不被防火墻過濾的話,基本都能收到應答包。
缺點: ?掃描行為容易被發(fā)現(xiàn);因為是自己攢包發(fā),是在ip層的,因此不可靠,可能會丟包;實現(xiàn)起來比connect稍復雜。
3.FIN掃描
根據(jù)上述四次揮手過程,主動結束的一方會發(fā)送FIN幀。當我們發(fā)送FIN幀給一個非監(jiān)聽的端口時,會有RST應答,反之,發(fā)給一個正在監(jiān)聽的端口時,不會有任何回應。
優(yōu)點: ?隱蔽性好;速度快。
缺點: ?只能用于Linux系統(tǒng),windows系統(tǒng)下無效,在windows下,無論端口是否監(jiān)聽,都將回應RST幀,造成無法判斷;不可靠,當收不到應答包時,不確定是端口在監(jiān)聽,還是丟包了。
二、UDP
?常見的方式有UDP recvfrom掃描,UDP ICMP端口不可達掃描,我采用的是后者,也就是,給一個端口發(fā)送UDP報文,如果端口是開放的,則沒有響應,如果端口是關閉的,對方會回復一個ICMP端口不可達報文(對應ICMP首部前兩個字段:類型3 代碼3,ICMP詳見ping那篇文章),
優(yōu)點:linux?windows都能用
缺點:也是不可靠的,因為返回的是錯誤信息,所以速度相對于TCP的FIN,SYN掃描要慢一些,如果發(fā)送的UDP包太快了,回應的ICMP包會出現(xiàn)大量丟失的現(xiàn)象。
三、隨便玩玩在開始編程前可以對端口的開放與否有個感性的認識。
查看當前主機的開放端口可以使用netstat命令。
linux下查看TCP的監(jiān)聽端口:netstat -na -t TCP | grep LISTEN (測試環(huán)境 ubuntu 11.04)
windows下查看TCP的監(jiān)聽端口:netstat -na -p TCP | findstr LISTENING (測試環(huán)境 winXP)
linux下下掃描端口可以使用端口掃描工具nmap,有多種掃描方式,這里列舉幾個常用的:
僅進行ping掃描,打印出對掃描做出響應的主機,不做進一步測試(如端口掃描或者操作系統(tǒng)探測):
nmap -sP 192.168.1.0/24
使用頻率最高的掃描選項:SYN掃描,又稱為半開放掃描,它不打開一個完全的TCP連接,執(zhí)行得很快:
nmap -sS 192.168.1.0/24
當SYN掃描不能用時,TCP Connect()掃描就是默認的TCP掃描:
nmap -sT 192.168.1.0/24
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結