tcpdump: 패킷 손실

tcpdump: 패킷 손실

무차별 모드인지 여부에 관계없이 실행합니다.

tcpdump -i "$INTERFACE" -vvv -n -XX -S -s0 -e

중지하면 다음과 같은 결론이 나옵니다.

601 packets captured
938 packets received by filter
230 packets dropped by kernel

왜 차이가 있나요? 107개의 패킷이 손실된 곳은 어디입니까? 라우터 뒤에 있는 나만 로컬 네트워크의 패킷을 100% 가져오거나 캡처할 수 있습니까?

답변1

tcpdump가 패킷을 "삭제"하는 이유는 네트워크에서 도착하는 패킷을 따라잡을 만큼 충분한 버퍼 공간이 없기 때문입니다.

캡처된 패킷과 수신된 패킷 간의 차이는 운영 체제나 tcpdump 구현으로 인해 발생하거나 보다 일반적으로 ^C를 사용하여 프로세스를 중단함으로써 발생할 수 있습니다.

패킷당 버퍼 크기를 "s0"으로 설정하면 각각 64KB로 설정됩니다 man tcpdump. 일반적으로 -X를 사용하여 전체 패킷을 보고 tcpdump를 사용하여 헤더를 보려면 최대 1500으로 설정합니다. 필수 값 - 160바이트, IPv4 헤더 크기.

화면 작업도 일반적으로 느립니다. 속도가 필요한 경우 실제로 실시간으로 볼 필요가 없으면 출력을 파일로 보냅니다.

"tcpdump"라는 사람에게서:

"더 큰 스냅샷을 찍으면 패킷을 처리하는 데 필요한 시간이 늘어날 뿐만 아니라 패킷 버퍼링 양이 효과적으로 줄어듭니다. 이로 인해 패킷 손실이 발생할 수 있습니다. snaplen을 캡처된 프로토콜 정보의 최소량으로 제한해야 합니다. "

답변2

답변대로다른 곳에서, 그리고여기, tcpdump(4.0 이후의 기본값, 1.0 이후의 libpcap)에는 -B NNNN버퍼 크기(NNNN*1024바이트 단위, Linux의 경우 기본값 2MiB)를 설정하는 옵션이 있습니다. snaplen을 더 낮게 설정하고 싶지 않은 경우 이는 유용한 대안입니다.

예:

tcpdump -i "${INTERFACE}" -B 4096 -nn -w capture.pcap

pcap 사용을 고려할 수도 있습니다.캡처 필터알려진 특정 유형이나 알려진 속성을 가진 패킷을 찾고 있고 모든 것을 캡처하는 데 관심이 없는 경우.

스위스답변에는 또 다른 유용한 점이 포함되어 있습니다. 패킷 캡처를 실시간으로 볼 필요가 없다면 터미널보다는 파일로 출력하는 것이 좋습니다.

관련 정보