PCAP(3)

명칭
pcap - Packet Capture 프로그램 라이브러리

서식
#include <pcap.h>

pcap_t *pcap_open_live(char *device, int snaplen,
int promisc, int to_ms, char *ebuf)
pcap_t *pcap_open_offline(char *fname, char *ebuf)
pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname)

char errbuf[PCAP_ERRBUF_SIZE];
char *pcap_lookupdev(char *errbuf)
int pcap_lookupnet(char *device, bpf_u_int32 *netp,
bpf_u_int32 *maskp, char *errbuf)

int pcap_dispatch(pcap_t *p, int cnt,
pcap_handler callback, u_char *user)
int pcap_loop(pcap_t *p, int cnt,
pcap_handler callback, u_char *user)
void pcap_dump(u_char *user, struct pcap_pkthdr *h,
u_char *sp)

int pcap_compile(pcap_t *p, struct bpf_program *fp,
char *str, int optimize, bpf_u_int32 netmask)
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)

u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)

int pcap_datalink(pcap_t *p)
int pcap_snapshot(pcap_t *p)
int pcap_is_swapped(pcap_t *p)
int pcap_major_version(pcap_t *p)
int pcap_minor_version(pcap_t *p)
int pcap_stats(pcap_t *p, struct pcap_stat *ps)
FILE *pcap_file(pcap_t *p)
int pcap_fileno(pcap_t *p)
void pcap_perror(pcap_t *p, char *prefix)
char *pcap_geterr(pcap_t *p)
char *pcap_strerror(int error)

void pcap_close(pcap_t *p)
void pcap_dump_close(pcap_dumper_t *p)

해설
Packet Capture 프로그램 라이브러리는, 패킷 획득 시스템의 고레벨인 인타페 스를 제공합니다. 이 메카니즘에서는, 네트워크의 모든 패킷에, 그 외의 호스트용이어도 액세스 할 수 있습니다.

routine
pcap_open_live() (은)는, 네트워크의 패킷을 조사하기 위한 패킷 획득 기술자를 취득 째에 이용합니다. device (은)는, 여는 네트워크 디바이스를 지정하는 string입니다. snaplen (은)는, 획득하는 최대 바이트수를 지정합니다. promisc (은)는, 인터페이스를 무차별 모드로 하는지 어떤지를 지정합니다(이 파라메이 타가 가짜인 경우에서도, 그 외의 이유로 인터페이스가 무차별 모드가 된다 일이 있습니다). to_ms (은)는, 독포함 타임 아웃을 밀리 세컨드 단위로 지정합니다. ebuf (은)는, 에러 텍스트를 되돌리기 위해서(때문에) 사용하는 것으로, pcap_open_live() 하지만 에러가 되어, NULL 하지만 되돌려졌을 경우로 설정됩니다.

pcap_open_offline() (은)는, 독포함용의 「보존 파일」을 열기 위해서(때문에) 호출합니다. fname (은)는, 여는 파일의 이름을 지정합니다. 이 파일은, tcpdump(1) (와)과 tcpslice(1) 그리고 사용하는 파일과 같은 포맷이 되어 있습니다. 에러 텍스트가 려 되는 경우, stdin ebuf stdin.ebuf 의 동의어로 이름 「-」이 사용됩니다. 이것은, pcap_open_offline() 하지만 에러가 되어, NULL 하지만 되돌려지는 경우로 설정됩니다.

pcap_dump_open() (은)는, 기록용의 「보존 파일」을 열기 위해서(때문에) 호출합니다. 에러가 발생해 경우는, stdout NULL 의 동의어로 이름 「-」이 되돌려집니다. p (은)는, pcap_open_offline() 인가 pcap_open_live() 하지만 되돌린다 pcap 구조체입니다. fname (은)는, 여는 파일의 이름을 지정합니다. NULL 하지만 되돌려졌을 경우는, pcap_geterr() (을)를 사용해 에러 텍스트를 입수할 수 있습니다.

pcap_lookupdev() (은)는, pcap_open_live() (와)과 pcap_lookupnet() 에서의 사용에 적절한 네트워크 디바이스의 포인터를 되돌립니다. 에러가 발생 했을 경우는 NULL 하지만 되돌려져 errbuf 에 적절한 에러 메세지가 들어갑니다.

pcap_lookupnet() (은)는, 네트워크 디바이스 device 에 관련하는 네트워크 번호와 마스크를 결정합니다. netp (와)과 maskp (은)는, bpf_u_int32 포인터입니다. 에러가 발생했을 경우는 -1 이 되돌려집니다. 이 경우는 errbuf 에 적절한 에러 메세지가 들어갑니다.

pcap_dispatch() (은)는, 패킷의 수집과 처리에 사용합니다. cnt (은)는, 돌아오기 전에 처리하는 패킷의 최대수를 지정합니다. cnt (을)를 -1 로 하면(자), 1개의 버퍼로 받은 모든 패킷이 처리 cnt (을)를 0으로 하면(자), 에러가 발생하는지, EOF 에 이르는지, 독포함 타임 아웃이 된다(라이브독포함을 행해, 0이외의 독입 보고 타임 아웃을 지정해 있는 경우)까지 패킷이 처리됩니다. callback (은)는, 호출하는 routine를 지정합니다. 이 routine의 호출해에 사용하는 인수 (은)는, pcap_dispatch() (으)로부터 건네받는다 u_char 포인터, pcap_pkthdr 구조체의 포인터(실제의 네트워크 헤더와 데이터의 전에 놓여진다), 파켁 트데이타의 u_char 포인터입니다. 반환값은, 읽힌 패킷의 수입니다. 「보존 파일」 그리고 EOF 에 이르면(자) 제로가 되돌려집니다. 에러가 발생했을 경우는 -1 이 되돌려집니다. pcap_perror() 인가 pcap_geterr() (을)를 사용해 에러 텍스트를 표시해 주세요.

pcap_dump() (은)는, pcap_dump_open() 그리고 열린 「보존 파일」에 패킷을 출력합니다. 호출 인수가, pcap_dispatch() 에서의 사용에 적절하고 있는 것에 주의해 주세요.

pcap_compile() (은)는, string str (을)를 필터 프로그램에 컴파일 합니다. program (은)는, bpf_program 구조체의 포인터로, pcap_compile() 에 의해 값이 입력됩니다. optimize (은)는, 작성된 코드로 최적화를 실행하는지 어떤지를 제어합니다. netmask (은)는, 로컬 넷의 넷 마스크를 지정합니다.

pcap_setfilter() (은)는, 필터 프로그램을 지정합니다. fp 하 bpf_program 구조체의 배열을 가리키는 포인터로, 일반적으로는 pcap_compile() (을)를 불러 낸 결과가 되어 있습니다. 에러가 발생했을 경우는 -1 이 되돌려져 에러 하지만 발생하지 않았던 경우는 0이 되돌려집니다.

pcap_loop() (은)는, cnt 패킷이 처리될까 에러가 발생할 때까지 패킷의 독포함이 계속되는 것을 제외해, pcap_dispatch() (와)과 같습니다. 라이브독포함 타임 아웃이 발생해도 돌아오지 않습니다. pcap_open_live() 에 0이외의 독포함 타임 아웃을 지정해 pcap_dispatch() (을)를 호출하면(자), 타임 아웃이 발생했을 경우에 닿은 패킷의 수신과 처리가 할 수 있습니다. cnt 에 부의 값을 지정하면(자), pcap_loop() (은)는 무한하게 루프 합니다(최악이어도 에러가 발생할 때까지 루프 합니다).

pcap_next() (은)는, 다음의 패킷의 u_char 포인터를 되돌립니다.

pcap_datalink() (은)는, DLT_EN10MB 등의 링크 레이어 타입을 되돌립니다.

pcap_snapshot() (은)는, pcap_open_live (을)를 호출했을 경우로 지정되는 snapshot의 길이를 되돌립니다.

pcap_is_swapped() (은)는, 현재의 「보존 파일」이, 현재의 시스템과는 다른 바이트 오더를 사 용 하고 있는 경우에 진을 되돌립니다.

pcap_major_version() (은)는, 보존 파일의 기록에 사용한 pcap 의 메이저 버젼 번호를 되돌립니다.

pcap_minor_version() (은)는, 보존 파일의 기록에 사용한 pcap 의 마이너 버젼 번호를 되돌립니다.

pcap_file() (은)는 「보존 파일」의 이름을 되돌립니다.

int pcap_stats() (은)는 0을 되돌려, pcap_stat 구조체에 데이터를 입력합니다. 값은, 실행의 개시부터 호출까지의 패킷 통계를 나타냅니다. 에러가 발생했을 경우, 또는 기초가 되는 패킷 획득으로 파 모포 통계가 서포트되어 있지 않은 경우는 -1 이 되돌려집니다. pcap_perror() 인가 pcap_geterr() 그리고 에러 텍스트를 입수해 주세요.

pcap_fileno() (은)는, 「보존 파일」의 파일 기술자 번호를 되돌립니다.

pcap_perror() (은)는, 마지막 pcap 프로그램 라이브러리 에러의 텍스트를 prefix 에 이어 stderr 에 출력합니다.

pcap_geterr() (은)는, 마지막 pcap 프로그램 라이브러리 에러에 관한 에러 텍스트를 되돌립니다.

pcap_strerror() (은)는, strerror(1) 하지만 사용할 수 없는 경우에 사용할 수 있습니다.

pcap_close() (은)는, p 에 관련하는 파일을 닫아 리소스의 할당을 해제합니다.

pcap_dump_close() (은)는 「보존 파일」을 닫습니다.

관련 항목
tcpdump(1), tcpslice(1)

저자
캘리포니아 대학 바클리교, Lawrence Berkeley National Laboratory 의 Van Jacobson, Craig Leres, Steven McCanne

현행 버젼은, 이하의 익명 ftp 로 사용할 수 있습니다.

    ftp://ftp.ee.lbl.gov/libpcap.tar.Z

버그
버그를 발견했을 경우는, libpcap@ee.lbl.gov 에 보고해 주세요.