의 man 페이지를 살펴보면 tcpdump
버퍼가 가득 차면 커널이 패킷을 삭제할 수있는 것 같습니다. 나는 궁금합니다 :
- 해당 크기는 구성 및 / 또는
- 내 배포판의 크기를 어디에서 볼 수 있습니까?
매뉴얼 페이지에서 (쉽게 참조 할 수 있도록) :
“커널에 의해 삭제 된 ”패킷 (OS가 해당 정보를 응용 프로그램에보고하는 경우 tcpdump가 실행중인 OS의 패킷 캡처 메커니즘에 의해 버퍼 공간 부족으로 인해 삭제 된 패킷 수) 그렇지 않으면 0으로보고됩니다.
답변
Tcpdump에는 -B
캡처 버퍼 크기를 설정 하는 옵션 이 있습니다. 그런 다음 값은 pcap_set_buffer_size()
함수 를 통해 libpcap (tcpdump가 실제 패킷 캡처를 수행하는 데 사용하는 라이브러리)으로 전달 됩니다. Tcpdump 맨 페이지는 -B로 버퍼 크기가 지정된 단위를 지정하지 않지만 소스 에서 KiB 인 것으로 보입니다.
manual 페이지는 pcap_set_buffer_size()
기본 버퍼 크기 (이 함수가 호출되지 않은 경우 사용됨)를 지정하지 않지만 libpcap source 에서 적어도 Linux에서는 2 MiB 인 것으로 보입니다 (그러나 대부분 시스템에 따라 다름).
패킷 버퍼링 및 삭제와 관련하여 snaplen ( -s
) 매개 변수 설정에주의해야합니다 . man tcpdump
:
-s Snarf snaplen bytes of data from each packet rather than the
default of 65535 bytes. Packets truncated because of a limited snapshot
are indicated in the output with ``[|proto]'', where proto is the name of
the protocol level at which the truncation has occurred. Note that taking
larger snapshots both increases the amount of time it takes to
process packets and, effectively, decreases the amount of packet buffering.
This may cause packets to be lost. You should limit snaplen to the
smallest number that will capture the protocol information you're
interested in. Setting snaplen to 0 sets it to the default of 65535, for
back-wards compatibility with recent older versions of tcpdump.
즉, 고정 버퍼 크기를 사용하면 snaplen 크기를 줄여 버퍼에 맞는 패킷 수를 늘릴 수 있습니다 (따라서 삭제되지 않음).