리눅스 libpcap 예제

On agosto 2, 2019 by adminmg

pcap_compile()는 문자열 str을 필터 프로그램으로 컴파일하는 데 사용됩니다. 프로그램은 bpf_program 구조체에 대한 포인터이며 pcap_compile()로 채워져 있습니다. 최적화하여 결과 코드에 대한 최적화가 수행되는지 여부를 제어합니다. netmask는 패킷이 캡처되는 네트워크의 IPv4 넷마스크를 지정합니다. 필터 프로그램에서 IPv4 브로드캐스트 주소를 확인할 때만 사용됩니다. 패킷이 캡처되는 네트워크의 넷마스크가 프로그램에 알려지지 않았거나 둘 이상의 네트워크에서 캡처할 수 있는 Linux “임의” 의사 인터페이스에서 패킷이 캡처되는 경우 0 값을 제공받을 수 있습니다. IPv4 브로드캐스트 애드레스에 대한 테스트는 올바르게 수행되지 않지만 필터 프로그램의 다른 모든 테스트는 확인됩니다. -1의 반환은 pcap_geter()가 오류 텍스트를 표시하는 데 사용될 수 있는 오류를 나타냅니다. pcap_loop()를 활용하는 방법에 대한 전체 프로그램 예제를 살펴보겠습니다. 패킷을 처리하는 콜백 함수 내부에서는 이전 예제에서와 마찬가지로 패킷 정보를 인쇄합니다. 이 프로그램은 패킷을 지속적으로 루프하고 처리하기 때문에 CTRL-C를 사용하여 프로그램을 종료하거나 kill 명령을 사용해야 합니다. 참고: 라이브 캡처를 읽을 때 pcap_dispatch()는 읽기 시간이 지나갈 때 반드시 반환되지 는 않습니다.

일부 플랫폼에서는 읽기 시간 시간이 지원되지 않으며 다른 플랫폼에서는 하나 이상의 패킷이 도착할 때까지 타이머가 시작되지 않습니다. 즉, 시간 제한 시간이 만료된 후 pcap_dispatch()가 반환된다는 보장이 없으므로 패킷 캡처 루프가 사용자 입력에 대해 주기적으로 `poll`로 허용되도록 대화형 응용 프로그램과 같은 대화형 응용 프로그램에서는 읽기 시간 제한을 사용하지 않아야 합니다. 링크 계층 디바이스 타입에 대한 Linux ARPHRD_ 값을 포함하는 2바이트 필드( 네트워크 바이트 순서); 우리는 천천히 pcap을 사용하여 우리의 기능에 점점 더 많은 것을 추가하고 있습니다. 장치 찾기, 장치 열기, 단일 패킷 캡처 방법 및 패킷에서 정보를 가져오는 방법을 다루었습니다. 단일 패킷을 캡처하는 것은 그리 실용적이지 않습니다. 단일 패킷을 찾고 있다면, 그것은 당신이 보는 첫 번째 패킷되지 않습니다, 하지만 많은 패킷의 스트림에 묻혀. 이제 우리는 지속적으로 수신 된 모든 패킷을 처리하는 방법에 대해 이야기 할 것이다. pcap_loop()가 들어오는 곳입니다. pcap_loop() 함수는 libpcap에 의해 제공됩니다. 이것이 pcap.h에서 선언된 모양입니다. 읽은 패킷 수가 반환됩니다. 라이브 캡처에서 패킷을 읽지 않은 경우 0이 반환됩니다(예: 패킷 필터를 통과하지 않아 삭제된 패킷또는 패킷이 도착하기 전에 시작되는 읽기 시간 지정을 지원하는 플랫폼에서 패킷이 패킷이 만료되기 전에 시간 지정이 만료되는 경우) 반환됩니다.

도착하거나 캡처 장치의 파일 설명자가 비차단 모드에 있고 패킷을 읽을 수 없는 경우) 또는 `savefile`에서 더 이상 패킷을 사용할 수 없는 경우.` -1의 반환은 pcap_perror() 또는 pcap_geterr()가 오류 텍스트를 표시하는 데 사용될 수 있는 오류를 나타냅니다.

Comments are closed.