• 沒有找到結果。

來源端與接收端間Hop Count 檢測

3. 研究方法與內容

3.1 研究方法

3.1.1 來源端與接收端間Hop Count 檢測

要探測接收端到來源端之間的 router 數,最簡單的做法為 tracert 指 令[20,35],例如 Windows 下的 tracert 及 linux 下的 tracerouter,都可以 列舉出來源端到接收端之間所經過的 router。其原理為持續送出慢慢遞 增的 TTL 值的 UDP 封包,當封包到達目的地途中而 TTL 降到 0 的時 候 , 路 由 器 就 會 丟 棄 這 個 封 包 , 並 且 同 時 向 來 源 端 送 出 一 個 time_exceeded 的 ICMP 封包,所以當我們發送第一個 TTL 為 1 的 UDP

封包時,封包會在第一個 router 被丟棄,並傳回 ICMP 封包告知我們,

而第二個 TTL 為 2 的 UDP 封包將會在第二個 router 被丟棄,以此類 推,所以我們將能得知主機與目的地間中途所要經過的 router 及其個數。

在本研究系統中,我們並不是利用 tracert 指令去取得來源端與目的 端間的 router 個數,而是直接跟目標主機進行 TCP 交握,根據 TCP/IP 協定規則,雙方主機欲進行 TCP 通訊時,並須先進行 TCP 三向交握,

當 A 端主機發送標有 SYN Flag 的封包給 B 主機時,B 主機如果正在 Listen 這個 Port,則會傳送回標有 SYN 及 ACK Flag 的 TCP 封包,而 如果 B 主機此時並沒有 Listen 這個 Port 的話,則會送回標有 RST Flag 的封包中斷這個連線,如圖 3-2 所示。

圖 3-2 TCP/IP 封包溝通

藉由這個方式,我們可以順利取得網路中廣大網域的主機所傳回的

封包,並取得其封包中的 TTL 值,記錄到資料庫內以便進行以後的比對 動作。利用這個方式跟 tracert 比起來,有三點的好處。

1. tracert 是持續送出遞增的 TTL 值封包,所以從來源端到接收端間的 router 數有多少個,tracert 就必須送出多少次的封包,比較起來,

直接對目標主機發出 SYN 封包將會大大的減少我們的時間與網路 流量,尤其是在我們需對廣大的主機進行檢測的動作時。

2. 如果 tracert 途中,有 router 或是主機端被設置為拒絕或是不允許回 應 ICMP 封包,則可能會影響到我們收集 Hop Count 的精準性及正 確性。

3. 使用 tracert 所得到的 Hop count 雖然正確,但如果某些主機所發送 的初始 TTL 值並不是一般的固定數值(32、64、128、255),則可能 產生誤差的情況。例如,我們探得到某處電腦 A 的 Hop count 為 5,

則我們在本機的資料庫這邊將電腦 A 的 Hop Count 記錄為 5,那往 後如果電腦 A 傳送封包來時,由於其初始 TTL 值的不同,封包 TTL 值經過轉換後皆不在合理範圍,便會將此封包視為偽造封包,影響 了封包接收的正常性。而利用其所傳回的 TCP 封包,將封包內的 TTL 經過轉換,不管電腦 A 初始的 TTL 值為多少,在往後收到此主 機所傳送之封包進行檢測時,在本機端這邊都是由相同的數值(32、

64、128、255)轉換,將可解決這個問題。