我希望tcpdump
透過資料包長度來縮小範圍。我知道我可以`| grep 但我想知道是否可以將這個特定的資料包長度作為「tcpdump」中的選項傳遞。我正在嘗試編寫一個腳本來使用以下命令向我顯示網路上所有存在的 MPEG-TS 多播:
sudo tcpdump -c 1000 -ti <network_interface> multicast | grep 1316 | sort | uniq
因此,這個命令可以工作,並為我提供了我想要的輸出,但我想我可以透過在命令中傳遞長度來簡化它tcpdump
,例如:
sudo tcpdump -c 1000 -ti <network_interface> multicast and length 1316 | sort | uniq
答案1
乙太網路封包總大小
根據pcap 濾波器(7),您可以使用以下條件:
less length
, 相當於len <= length
greater length
, 相當於len >= length
根據範例,您還應該能夠使用,但這沒有記錄。
len == length
請注意,這包括鏈路層和網路層標頭(即捕獲的所有內容),因此空的 TCP ACK 將具有 60 的 IP「總長度」字段,但將被視為總共 74 位元組。
另請參閱此 StackOverflow 線程:https://stackoverflow.com/questions/9874093/how-to-filter-tcpdump-output-based-on-packet-length
IP 封包總大小
根據tcpdump(1),您可以存取 IPv4 標頭的「總長度」欄位:
ip[2:2] > 576
ip[2:2] <= 1000
- 和類似的。
UDP 封包或有效負載總大小
UDP沒有長度字段,但它的報頭大小始終為8,您可以通常假設 IPv4 標頭大小始終為 20(IPv4 選項為非常很少見,儘管它們確實在 IGMP 中使用)。
因此,如果您嘗試過濾 1316 位元組的 UDP 資料報,
- IP.總長度 = IP.標頭[20] + UDP.標頭[8] + UDP.有效負載[1316]
你得到了過濾器ip[2:2] == 1344
。