커널 공간에서 패킷을 캡처하기위한 버퍼 크기?


16

의 man 페이지를 살펴보면 tcpdump버퍼가 가득 차면 커널이 패킷을 삭제할 수있는 것 같습니다. 나는 궁금합니다 :

  1. 해당 크기는 구성 및 / 또는
  2. 내 배포판의 크기를 어디에서 볼 수 있습니까?

매뉴얼 페이지에서 (쉽게 참조 할 수 있도록) :

``커널에 의해 삭제 된 ''패킷 (OS가 해당 정보를 응용 프로그램에보고하는 경우 tcpdump가 실행중인 OS의 패킷 캡처 메커니즘에 의해 버퍼 공간 부족으로 인해 삭제 된 패킷 수) 그렇지 않으면 0으로보고됩니다.

답변:


27

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 크기를 줄여 버퍼에 맞는 패킷 수를 늘릴 수 있습니다 (따라서 삭제되지 않음).


2
나는 이것이 오래된 스레드라는 것을 알고 있지만 GitHub에서 소스를 인용 할 때 현재 커밋을 지정하십시오 (마스터 브랜치가 변경 될 수 있음). 예 : github.com/mcr/tcpdump/blob/ ... .
bruno nery

@brunonery 이는 게시물 자체가 매우 오래된 경우에도 실제로 사용자가 답변을 개선하도록 권장하는 Stack Exchange 사이트의 문제는 아닙니다. (얼마나 찌푸린 포럼과 달리)
Léo Lam

오래된 링크 수정
Eli Heady
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.