Tcp
tcpdump TCP 標頭偏移 13
我試圖了解如何
tcpdump
工作並嘗試讀取 TCP 標頭控制標誌 SYN、ACK 等。在網上研究後,我知道控制標誌在偏移量 13 處可用,我需要使用 tcp
$$ 13 $$但是我無法理解這個值 13 是如何計算的。 任何人都可以幫忙嗎?
TCP
$$ 13 $$是位(標誌)的數組。當它們設置為 1 時,它們被啟用,當它們為 0 時,它們被禁用。 這些
tcpdump
命令顯示瞭如何收集 TCP$$ 13 $$bits 並按位進行 ands 以測試這些位是否已啟用:
Show all URG packets: # tcpdump 'tcp[13] & 32 != 0' Show all ACK packets: # tcpdump 'tcp[13] & 16 != 0' Show all PSH packets: # tcpdump 'tcp[13] & 8 != 0' Show all RST packets: # tcpdump 'tcp[13] & 4 != 0' Show all SYN packets: # tcpdump 'tcp[13] & 2 != 0' Show all FIN packets: # tcpdump 'tcp[13] & 1 != 0' Show all SYN-ACK packets: # tcpdump 'tcp[13] = 18
引用的 URL(如下)有這個項目符號,它也解釋了它:
請記住這些過濾器起作用的原因。上面的過濾器會找到這些不同的數據包,因為 tcp
$$ 13 $$查看 TCP 標頭中的偏移量 13,數字表示字節內的位置,!=0 表示有問題的標誌設置為 1,即打開。
TCP 標頭
如果您查看RFC 793 3.1以及這篇關於tcpdump 高級過濾器的文章,它就會變得更加明顯。
TCP header ---------- 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |C|E|U|A|P|R|S|F| | | Offset| Res. |W|C|R|C|S|S|Y|I| Window | | | |R|E|G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - Matching any TCP traffic with a source port > 1024 # tcpdump -i eth1 'tcp[0:2] > 1024' - Matching TCP traffic with particular flag combinations The flags are defined in the 14th byte of the TCP header. +-+-+-+-+-+-+-+-+ |C|E|U|A|P|R|S|F| |W|C|R|C|S|S|Y|I| |R|E|G|K|H|T|N|N| +-+-+-+-+-+-+-+-+
**注意:**這些是我們感興趣的標誌。
計算標誌的位置
您從頂部開始計算字節(8 位),將它們編號為 0:
- 所以*“源埠”和“目標埠”*將組成字節 0、1、2 和 3。
- 下一行*“Sequence Number”*將是 4-7。
- *“確認號”*將是字節 8-11。
- “數據偏移”和“資源” 將是字節 12。
- 這會將您帶到第 13 個字節,該字節中的位是標誌。
位順序
我還要提到儲存在字節 13 中的數字是這樣排序的:
- 位 1 = FIN
- 位 2 = SYN
- 位 4 = RST
- 位 8 = PSH
- 位 16 =確認
- 位 32 = URG
參考