호출하는 스크립트가 있습니다.
tcpdump -v src host <IP address> and port <port number> >>out.txt 2>>err.txt -w capture.cap
여러 IP에서 스크립트의 다른 부분이 백그라운드에서 일부 트래픽을 시작합니다. 우리는 패킷이 우리에게 반환되었는지 확인하고 패키지를 받았을 때만 이러한 경우를 수동으로 확인하고 싶습니다. 그러나 처음에는 tcpdump의 오류 출력이 괜찮아 보였습니다.
문제는 주제에서 알 수 있듯이 "캡처된 패킷"과 "수신된 패킷 필터링"의 차이점이 무엇입니까? 캡처가 있고 패킷이 기록되지 않지만 출력은 "캡처된 패킷 0개, 필터에 의해 수신된 패킷 2개"입니다. 이는 패킷이 캡처되지 않으면 그 중 2개가 필터링되기 때문에 모순적으로 들립니다. 어떻게 필터링됩니까? 처음에는 "필터에 의해 수신된 패킷 0개"를 찾고 있었지만 패킷이 수신되지 않았을 때 오류 출력에 항상 기록되지는 않았습니다. 그렇다면 이 숫자는 무엇을 말해주는 걸까요?
응답 패킷이 수신되지 않는 경우를 필터링하려면 무엇을 찾아야 하는지 알아야 합니다.
답변1
이것이 문제에 대해 어느 정도 밝혀지기를 바랍니다. ~에서맨페이지:
tcpdump가 패킷 캡처를 마치면 다음 개수를 보고합니다.
캡처된 패킷(이것은 tcpdump가 수신하고 처리한 패킷 수입니다.)
수신된 패킷을 필터링합니다.(이것이 의미하는 바는 tcpdump를 실행하는 OS에 따라 다르며 OS가 구성된 방식에 따라 달라질 수 있습니다. 일부 OS에서는 필터 표현식이 있든 없든 명령줄에 필터가 지정되어 있는지 여부에 관계없이 패킷을 계산합니다. 필터 표현식과 일치하면 tcpdump가 읽고 처리했는지 여부에 관계없이 다른 운영 체제에서는 tcpdump가 읽고 가져오고 처리했는지 여부에 관계없이 필터 표현식과 일치하는 패킷만 계산하고 다른 운영 체제에서는 필터 표현식만 계산합니다. 필터 표현식과 일치하고 tcpdump에 의해 처리되는 패킷)
커널에 의해 삭제된 패킷(운영 체제가 이 정보를 애플리케이션에 보고하는 경우 이는 버퍼 공간 부족으로 인해 tcpdump를 실행하는 운영 체제에서 패킷 캡처 메커니즘에 의해 삭제된 패킷 수입니다. 그렇지 않은 경우 0으로 보고됩니다.)
게다가2009년 메일링 리스트 항목설명하다:
"수신된 필터 패킷" 번호는
ps_recv
다음과 같습니다pcap_stats()
.대역통과 필터, 이는bs_recv
의 숫자 입니다BIOCGSTATS ioctl
. 이 수에는 BPF로 전달된 모든 패킷이 포함됩니다. 이러한 패킷은 libpcap이 아직 읽지 않은 버퍼에 있거나(따라서 tcpdump에 제공되지 않음) libpcap이 읽었지만 아직 tcpdump에 제공되지 않은 버퍼에 있을 수 있습니다. "캡처됨"으로 보고되지 않는 패킷을 계산할 수 있습니다.
어쩌면 프로세스가 너무 빨리 종료된 걸까요? 패킷을 캡처하는 동안 tcpdump가 종료되도록 지시하는 플래그도 있습니다 -c N
.N
귀하의 질문이 매우 전문적인 것 같으므로 다음을 수행할 수도 있습니다.libpcap
직접 사용또는수백 가지 언어 바인딩 중 하나를 통해.
귀하의 질문에 대해 귀하가 얻는 것은캡처됩니다패키지를 파일에 추가 capture.cap
하면 비어 있지 않은 실행을 보고 이를 확인할 수 있습니다. 즉, 어, 줄 수를 세어볼까요?
tcpdump -r capture.cap | wc -l
libpcap을 사용하여 캡처 파일의 항목 수를 반환하는 더 좋은 방법이 있을 수 있습니다.