tcpdump :“패킷 캡처”대“필터가받은 패킷”


11

우리는 호출하는 스크립트가 있습니다

tcpdump -v src host <IP address> and port <port number> >>out.txt 2>>err.txt -w capture.cap

스크립트의 다른 부분이 백그라운드에서 일부 트래픽을 시작하는 동안 여러 IP에서. 우리는 패킷이 우리에게 다시 오는지 확인하고 패키지를받을 때만 수동으로 검사합니다. tcpdump의 오류 출력은 처음에는 괜찮 았습니다.

문제는 주제에서 알 수 있듯이 "포집 된 패킷"과 "필터로받은 패킷"의 차이점은 무엇입니까? 어떤 패킷도 기록하지 않은 캡처가 있지만, 캡처 된 패킷이없는 경우, 그 중 2 개는 어떻게 필터링 되었기 때문에 모순처럼 들리는 "0 개의 캡처 된 패킷, 필터에 의해 수신 된 2 개의 패킷"을 출력합니다. 처음에, 우리는 "필터에 의해 수신 된 0 패킷"을 찾고 있었지만 수신 된 패킷이 없을 때 항상 오류 출력에 기록되지 않습니다. 이 숫자들은 무엇을 보여줍니까?

응답 패킷이 수신되지 않은 경우를 필터링하려면 무엇을 찾아야하는지 알아야합니다.

답변:


12

나는 이것이 문제에 대해 약간의 빛을 비추기를 바란다. 에서 맨 페이지 :

tcpdump가 패킷 캡처를 마치면 다음 개수를보고합니다.

패킷 캡처 (tcpdump가 수신하고 처리 한 패킷 수);

필터에 의해 수신 된 패킷 (이 의미는 tcpdump를 실행하는 OS 및 OS 구성 방법에 따라 다름)-명령 줄에 필터가 지정된 경우 일부 OS에서는 필터가 패킷을 계산합니다. tcpdump가 읽고 처리했는지 여부에 관계없이 필터 표현식과 일치하더라도 필터 표현식과 일치하더라도 다른 OS에서는 tcpdump의 읽기 여부에 관계없이 필터 표현식과 일치하는 패킷 만 계산합니다. 아직 처리하지 않았으며 다른 OS에서는 필터 표현식과 일치하고 tcpdump로 처리 된 패킷 만 계산합니다.

커널에 의해 삭제 된 패킷 (이는 OS가 해당 정보를 애플리케이션에보고하는 경우 tcpdump가 실행중인 OS의 패킷 캡처 메커니즘에 의해 버퍼 공간 부족으로 인해 삭제 된 패킷 수임) 0으로보고됩니다.

그리고 2009 년부터 메일 링리스트 항목이 있습니다 :

"필터에 의해 수신 된 패킷"번호는 ps_recv전화를 건 번호입니다 pcap_stats(). 와 BPF , 그것은이다 bs_recv로부터 수 BIOCGSTATS ioctl. 이 수에는 BPF에 전달 된 모든 패킷이 포함됩니다. 이러한 패킷은 여전히 ​​libpcap에 의해 읽히지 않은 (따라서 tcpdump에 전달되지 않은) 버퍼에 있거나, libpcap에 의해 읽히지 만 아직 tcpdump에 전달되지 않은 버퍼에있을 수 있으므로 패킷을 계산할 수 있습니다. "캡처 된"것으로보고되지 않습니다.

프로세스가 너무 빨리 종료 될 수 있습니까? 패킷이 캡처 -c N될 때 tcpdump가 종료되도록 지시 하는 플래그 도 있습니다 N.

문제가 꽤 전문적인 것처럼 보이기 때문에 직접 또는 수백 가지 언어 바인딩 중 하나를 통해 사용할libpcap 수도 있습니다 .

귀하의 질문에, 당신이 얻는 모든 것은 파일 의 캡처 된 패키지 capture.cap이기 때문에 비어 있지 않은 실행을보고 이것들을 검사 할 수 있습니다.

tcpdump -r capture.cap | wc -l

libpcap을 사용하여 캡처 파일의 항목 수를 반환하는 더 좋은 방법이 있습니다.


1
또한 패킷 처리 속도가 느리면 커널에서 패킷을보기 전에 NIC 하드웨어에서 패킷이 삭제 될 수 있습니다.
Craig

@Craig :이 스크립트를 실행하는 상자가 가상화되어 있으므로 NIC 속도에 대해 잘 모릅니다.
Alex Biro

@ sr_ : 라인에 대한 좋은 아이디어, 너무 쉬운 :) -w 스위치를 사용할 필요가없는 것보다 출력을 파일로 리디렉션하고 라인 번호를 계산합니다. 최대한 빨리 확인합니다.
Alex Biro

@ tuareg85 : 캡처 된 패킷을 분석하는 -w것이 좋습니다. 예를 들어 Wireshark를 사용할 수 있습니다.
sr_

1
트래픽을 멈춘 후 3 초를 기다리기 때문에 프로세스를 너무 빨리 종료하는 것은 문제가되지 않을 것입니다. 또한 tcpdump는 오류 출력을 완료 할 시간이 있으며 커널에 의해 삭제 된 패킷은 항상 0입니다.
Alex Biro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.