pcap_get_selectable_fd()는 UNIX에서 select() 또는 poll()을 수행할 수 있는 파일 설명자 에 대한 파일 설명자 번호로, 이러한 설명자가 있는 경우 또는 -1(이러한 설명자가 없는 경우) 차단 없이 패킷을 읽을 수 있을 때까지 기다립니다. pcap_open_live()로 열린 일부 네트워크 장치는 select() 또는 poll(예: FreeBSD 4.3 및 4.4 및 Endace DAG 장치의 일반 네트워크 장치)을 지원하지 않으므로 해당 장치에 대해 -1이 반환됩니다. 위의 프로그램을 루트로 실행하지 않는 경우 sudo를 사용하여 libpcap 라이브러리에서 수행하는 작업에 는 수퍼 사용자 권한이 필요하므로 프로그램을 실행해야 합니다. 잘 시작하기에는 커버할 끔찍한 것이 많이 있습니다. 그래서 그냥 libpcap에 익숙해 수 있습니다. 이 자습서의 모든 예제는 이더넷에 앉아 있다고 가정합니다. 그렇지 않은 경우 기본 사항은 여전히 관련이 있지만 나중에 이더넷 헤더를 디코딩하는 데 제시된 코드는 :-A *죄송합니다*가 아닙니다. 괜찮아요… 당신의 너클 * 위기 * 균열과 우리의 첫 번째 LIBPCAP 프로그램을 코딩 할 준비를 할 수 있습니다 :).

가서 좋아하는 편집기로 다음 프로그램을 복사 (당신이 어떤 의미가있는 경우 vim해야한다 🙂 저장 및 컴파일 … %>gcc ldev.c -lpcap 다음 예제 프로그램은 라이브 캡처를 위해 네트워크 장치를 열고 단일 패킷을 캡처하는 방법을 보여줍니다. 파일 핸들을 얻기 위해 파일을 열 때와 마찬가지로 pcap_open_live를 사용하여 핸들을 얻습니다. 대신 파일 형식 핸들 하지만 pcap_t 형식입니다. 리눅스 배포판에 libpcap를 설치 하려면 웹 사이트에서 소스를 다운로드 하 고 컴파일 하 고 설치할 수 있습니다. 또는 우분투 같은 배포판에 있는 경우 다음 시 냅 스 패키지 관리자에서 설치할 수 있습니다. 시냅틱 패키지 관리자의 패키지 목록에서 libpcap0.8 및 libpcap0.8-dev로 명명된 2개의 패키지를 찾습니다. 참고: 라이브 캡처를 읽을 때 pcap_dispatch()는 읽기 시간이 지나갈 때 반드시 반환되지 는 않습니다. 일부 플랫폼에서는 읽기 시간 시간이 지원되지 않으며 다른 플랫폼에서는 하나 이상의 패킷이 도착할 때까지 타이머가 시작되지 않습니다. 즉, 시간 제한 시간이 만료된 후 pcap_dispatch()가 반환된다는 보장이 없으므로 패킷 캡처 루프가 사용자 입력에 대해 주기적으로 `poll`로 허용되도록 대화형 응용 프로그램과 같은 대화형 응용 프로그램에서는 읽기 시간 제한을 사용하지 않아야 합니다.

libpcap 라이브러리를 설치한 후에는 C. pcap_open_live()에서 스니퍼를 코딩하여 네트워크의 패킷을 보기 위해 패킷 캡처 설명기를 얻는 데 사용됩니다. 장치는 열도록 네트워크 장치를 지정하는 문자열입니다. 2.2 이상 커널이 있는 Linux 시스템에서는 «any» 또는 NULL의 장치 인수를 사용하여 모든 인터페이스에서 패킷을 캡처할 수 있습니다. snaplen은 캡처할 최대 바이트 수를 지정합니다. 이 값이 캡처된 패킷의 크기보다 작으면 해당 패킷의 첫 번째 snaplen 바이트만 캡처되어 패킷 데이터로 제공됩니다. 65535의 값은 대부분의 경우 모든 네트워크에서 패킷에서 사용할 수 있는 모든 데이터를 캡처하기에 충분해야 합니다. promisc는 인터페이스를 무차별 모드로 넣을 지 지정합니다. (이 매개 변수가 false이더라도 인터페이스는 다른 이유로 무차별 모드에 있을 수 있습니다.) 지금은 «임의» 장치에서는 작동하지 않습니다.

«any» 또는 NULL의 인수가 제공되면 promisc 플래그는 무시됩니다. to_ms는 읽기 시간 시간을 밀리초 단위로 지정합니다. 읽기 시간 아웃은 패킷이 보일 때 반드시 즉시 반환되지는 않지만 더 많은 패킷이 도착하고 한 번의 작업으로 OS 커널에서 여러 패킷을 읽을 때까지 기다립니다. 모든 플랫폼에서 읽기 시간 시간을 지원하지는 않습니다. 그렇지 않은 플랫폼에서는 읽기 시간 시간이 무시됩니다. read 시간 시간을 지원하는 플랫폼에서 to_ms에 대한 0 값을 사용하면 시간 시간 설정 없이 충분한 패킷이 도착할 때까지 읽기가 영원히 기다립니다. errbuf는 오류 또는 경고 텍스트를 반환하는 데 사용됩니다.