패킷 길이에 따라 TCPDUMP 필터링

패킷 길이에 따라 TCPDUMP 필터링

패킷 길이를 기준으로 범위를 좁히고 싶습니다 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의 IP "총 길이" 필드는 60이지만 총 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.TotalLength = IP.헤더[20] + UDP.헤더[8] + UDP.페이로드[1316]

당신은 필터를 얻습니다 ip[2:2] == 1344.

관련 정보