一、常用端口
有一些服務使用固定的端口號,比如如下的:
二、端口掃描工具
常見的端口掃描工具有nmap,nmap,Metasploit。nmap更慢更全面,zmap則更快更粗略,Metasploit提供多種掃描。
為什么zmap掃描更快一些,關鍵性的問題出現在對回復的SYN-ACK進行seq number的校驗。傳統上就需要記錄狀態。而ZMap是將對方receiver ip地址進行hash,將其處理保存到了sender port和seq number兩個字段中,當SYN-ACK回來的時候,就可以根據sender ip、receiver port、ack number這些字段進行校驗。因此避免了狀態存儲,接近了網絡帶寬極限。
nmap使用
默認使用SYN方式掃描
掃描單個主機或IP地址
掃描多個IP或子網
掃描IP地址范圍:
掃描IP地址范圍,使用通配符:
掃描整個子網:
使用-iL允許nmap從文件中讀取主機/IP,在掃描很多主機時很有用。創建一個文件文件,如下:
掃描文件中的主機:
1
|
$
nmap
-
iL
host
.list
|
三、端口掃描種類
3.1 ICMP掃描
ICMP報文格式如下;

- ICMP時間戳請求報文,可以向其他機器請求時間
- ICMP地址掩碼請求報文,用於無盤機請求掩碼
- ICMP端口不可達報文,如果收到一份UDP數據報而目的端口與正在使用的端口不符合,則UDP返回一個端口不可達報文
- ICMP回顯請求報文,ping使用的就是這個,也是最常用的
- 異常IP包,比如偽造IP包的頭部長度和IP選項,則會返回ICMP parameter problem error,不同系統和路由器的返回不同,可用於檢測OS或網絡
- 超長包,但設置禁止分片,則會收到差錯報文
- 對於目標主機在防火牆內部,則可以構造可能的IP地址列表,逐個發送數據包。對不在其服務范圍內的則對方路由器會返回ICMP Host Unreachable或ICMP Time Exceeded,沒有收到則被認為IP地址在網絡中
3.2 TCP掃描
TCP掃描速度慢,且容易留下審計數據,TCP掃描主要有以下幾種實現,
- 直接建立TCP連接
- SYN掃描,如果發送SYN包的時候,返回RST包,則表示端口不開
- ACK掃描,不管端口是否打開,都會返回RST,所以不能測試端口是否打開,但是可以用來測試防火牆的策略,時有狀態還是無狀態,那些端口時被過濾的
- FIN掃描,如果端口關閉,則收到RST,如果端口打開,則無回復,如果收到ICMP差錯報文,則端口狀態未知
- NULL掃描,發送沒有任何位的TCP包,如果沒有回復,則端口打開,如果有RST包則表示端口關閉
- x-mas掃描發送一個URG、FIN、PUSH位全部打開的包,同樣時沒有意義的數據包,結果同NULL
3.3 UDP掃描
一般是構造空的UDP包,如果返回ICMP端口不可達,則表示端口時關閉的,如果沒有反應,則表示端口可能時開放的
3.4 空閑掃描
在IP頭中,有一個16位的標識,表示IP的ID,標識(identification)的用途是讓目標主機確定一個新到達的分段是哪一個數據流的。同一個數據流所有包都是一個相同的標識。他是可以預測的,增量是固定的(是每次偵聽到一個包就增加1嗎?)。
首先找一個空閑機器,不發出或接受任何流量。先和它通信,獲得IP的ID增長值,然后假冒空閑機器,想目的機器發出SYN包,則有以下兩種情況:
- 端口打開,則目的機器回復SYN/ACK,然后空閑機器回復RST包
- 端口關閉,目的主機就不回復SYN/ACK,空閑機器也不回復RST包
最后檢測空閑機器的IP的ID值,如果增長1,則表示后一種情況,增長2表示第一種情況。
3.5 隱秘掃描
不容易留下掃描信息,包括了FIN掃描、XMAS掃描、NULL掃描、UDP掃描等。
四、端口掃描的實現
原生套接字可以實現。