우리는 호출하는 스크립트가 있습니다
tcpdump -v src host <IP address> and port <port number> >>out.txt 2>>err.txt -w capture.cap
스크립트의 다른 부분이 백그라운드에서 일부 트래픽을 시작하는 동안 여러 IP에서. 우리는 패킷이 우리에게 다시 오는지 확인하고 패키지를받을 때만 수동으로 검사합니다. tcpdump의 오류 출력은 처음에는 괜찮 았습니다.
문제는 주제에서 알 수 있듯이 “포집 된 패킷”과 “필터로받은 패킷”의 차이점은 무엇입니까? 어떤 패킷도 기록하지 않은 캡처가 있지만, 캡처 된 패킷이없는 경우, 그 중 2 개는 어떻게 필터링 되었기 때문에 모순처럼 들리는 “0 개의 캡처 된 패킷, 필터에 의해 수신 된 2 개의 패킷”을 출력합니다. 처음에, 우리는 “필터에 의해 수신 된 0 패킷”을 찾고 있었지만 수신 된 패킷이 없을 때 항상 오류 출력에 기록되지 않습니다. 이 숫자들은 무엇을 보여줍니까?
응답 패킷이 수신되지 않은 경우를 필터링하려면 무엇을 찾아야하는지 알아야합니다.
답변
나는 이것이 문제에 대해 약간의 빛을 비추기를 바란다. 에서 맨 페이지 :
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을 사용하여 캡처 파일의 항목 수를 반환하는 더 좋은 방법이 있습니다.