Linux
如何使用 tcpdump 僅過濾保持活動的數據包
我需要分析網路上的流量轉儲,以檢查是否所有 PC 都啟用了 tcp keep-live 功能。我為此目的使用 tcpdump。
我需要知道的是是否有可能只過濾保持活動的數據包。
在windows上我看到wireshark可以做到這一點,但在我只有控制台模式的linux系統上,我不知道如何過濾那種數據包。
keepalive 探測是其中沒有數據且 ACK 標誌打開的數據包
port="port_number_being_used" intf="name_of_the_network_interface" tcpdump -pni ${intf} -v "tcp port ${port} and ( tcp[tcpflags] & tcp-ack != 0 and ( (ip[2:2] - ((ip[0]&0xf)<<2) ) - ((tcp[12]&0xf0)>>2) ) == 0 ) "
這是做什麼的:
- 按位並在 tcp flags 欄位和 tcp-ack 之間確保它是一個 ACK
- IP 數據包長度(以字節為單位) - IP 標頭長度 - TCP 標頭長度以確保它沒有數據
免責聲明:未經實際測試,但應該為您指明一個好的方向
注意:分解 tcpdump 過濾器以使其更具可讀性。大概可以取出第一組括號。
tcp port ${port} and ( tcp[tcpflags] & tcp-ack != 0 and ( (ip[2:2] - ((ip[0] & 0xf) << 2)) - ((tcp[12] & 0xf0) >> 2) ) == 0 )