본문 바로가기
기술자료/C C++

Pcap 함수 파라미터

by 알 수 없는 사용자 2009. 8. 24.
728x90
반응형

1. typedef void(*? pcap_handler )(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
[ 기능 ]
패킷을 받는 콜백 함수의 프로토타입
[ 파라미터 ]
u_char *user : pcap_dispatch()나 pcap_loop()를 호출할 때 전달하는 u_char 포인터
const struct pcap_pkthdr *pkt_header : 패킷의 정보를 기지고 있는 pcap_pkthdr 구조체
const u_char *pkt_data : 패킷의 데이터를 가리키고 있는 u_char 포인터
?
2. pcap_t *pcap_open_live (char *device, int snaplen, int promisc, int to_ms, char *ebuf)
[ 기능 ]
네트워크의 패킷들을 보기위해 필요한 packet capture descriptor를 얻기위해 사용된다.
[ 파라미터 ]
char *device : 사용할 네트워크 디바이스를 지시하는 스트링
int snaplen : 캡쳐할 최대 bytes
int promisc : NIC가 promiscuous mode로 동작할 지 여부
int to_ms : millisecond 단위의 read timeout
char *ebuf : pcap_open_live()가 실패할 경우에만 에러 메시지가 저장된다. 보통 NULL
[ 반환 ]
성공 : 패킷 캡쳐 descriptor
실패 : NULL
?
3. pcap_t * pcap_open_dead (int linktype, int snaplen)
[ 기능 ]
libpcap의 다른 함수를 호출할 때 pcap_t structure를 생성한다.
?
4. pcap_t *pcap_open_offline(char *fname, char *ebuf)
[ 기능 ]
기존에 저장된 파일에서 패킷을 읽기 위해 사용된다.
stdin에서 읽기 위해서는 파일 이름을 "-"으로 한다.
[ 파라미터 ]
char *fname : 오픈할 파일의 이름
char *ebuf : 실패할 경우 에러 메시지가 저장된다 .
[ 리턴 ]
성공 : descriptor
실패 : NULL
?
5. pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname)
[ 기능 ]
캡쳐한 내용을 파일에 저장하기 위해서 파일을 오픈한다.
stdout을 지시하려면 파일이름을 "-"를 이용한다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
char *fname : 오픈할 파일의 이름
[ 리턴 ]
성공 : pcap_dumper_t로 패킷 덤프와 관련된 구조체
실패 : NULL
?
6. int pcap_setnonblock(pcap_t *p, int nonblock, char *errbuf)
[ 기능 ]
블록킹과 논블록킹 모드를 바꾼다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
int nonblock : non-zero 혹은 zero 값을 지닌다.
char *errbuf : 실패시 에러 메시지가 채워진다.
[ 리턴 ]
성공 : 0
실패 : -1
?
7. int? pcap_getnonblock (pcap_t *p, char *errbuf)
[ 기능 ]
인터페이스의 non-blocking 상태를 얻는다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
char *errbuf : 실패시 에러 메시지가 채워진다.
[ 리턴 ]
성공 : 0
실패 : -1
?
8. int? pcap_findalldevs (pcap_if_t **alldevsp, char *errbuf)
[ 기능 ]
pcap_open_live()로 열린 네트워크 디바이스의 리스트를 구한다.
[ 파라미터 ]
pcap_if_t **alldevsp : 네트워크 다비이스의 리스트 포인터
char *errbuf : 실패시 에러 메시지가 채워진다.
[ 반환 ]
성공 : 0
실패 : -1
?
9. void? pcap_freealldevs (pcap_if_t *alldevsp)
[ 기능 ]
pcap_findalldevs()에 의해 리턴된 인터페이스 리스트를 해제한다.
[ 파라미터 ]
pcap_if_t **alldevsp : 네트워크 다비이스의 리스트 포인터
?
10. char *? pcap_lookupdev (char *errbuf)
[ 기능 ]
패킷을 캡쳐할 적당한 네트워크 디바이스(NIC : Network Interface Card)를 찾아
그 디바이스를 지칭하는 스트링을 리턴한다.
네트워크 디바이스를 지칭하는 스트링은 각 운영체제 별로 표현되는 별명(alias)를
말하며 Linux의 경우 "eth0", "eth1" 식으로 표현되고 BSD 계열은 각 네트워크
디바이스 벤더별로 별도로 명명된다.
[ 파라미터 ]
char *errbuf : 실패시 에러 메시지가 채워진다.
[ 리턴 ]
성공 : 네트워크 디바이스의 별명(alias)
실패 : NULL
?
11. int? pcap_lookupnet (char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf)
[ 기능 ]
네트워크 디바이스의 네트워크 주소와 netmask 정보를 가져오기위해 사용된다.
[ 파라미터 ]
char *device : 네트워크 디바이스의 별명(alias)
bpf_u_int32 *netp : 네트워크 디바이스의 네트워크 주소가 저장될 주소
bpf_u_int32 *maskp : 네트워크 디바이스의 netmask가 저장될 주소
char *errbuf : 에러 발생시 에러 메시지 저장
[ 리턴 ]
성공 : 0
실패 : -1
?
12. int? pcap_dispatch (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
[ 기능 ]
프로세스 패킷을 구성할 때 사용된다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
int cnt : 읽을 패킷의 갯수
pcap_handler callback : 패킷을 처리할 루틴
u_char *user : 패킷 데이타 포인터
[ 리턴 ]
성공 : 읽은 패킷의 수
실패 : -1
?
13. int? pcap_loop (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
[ 기능 ]
패킷의 그룹을 모은다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
int cnt : 읽을 패킷의 갯수
pcap_handler callback : 패킷을 처리할 루틴
u_char *user : 패킷 데이타 포인터
[ 리턴 ]
성공 : 읽은 패킷의 수
실패 : -1
?
14 void? pcap_dump (u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
[ 기능 ]
pcap_dump_open()을 통해 저장할 파일을 결정했다면 이 함수로 실제 저장이 이루어진다.
callback 루틴을 호출할 때와 같은 파라미터를 가진다.
[ 파라미터 ]
u_char *user : 사용자 데이터
struct pcap_pkthdr *h : 패킷의 정보를 가리키고 있는 포인터
u_char *sp : 패킷의 데이터를 가리키고 있는 u_char 포인터
?
15. int? pcap_compile (pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
[ 기능 ]
스트링 형태의 필터링 룰을 해석해 bpf_program 구조체에 저장한다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
struct bpf_program *fp : 필터링 룰에 따라 결정될 구조체
char *str : 스트링 형태의 필터링 룰
int optimize : 결과 코드를 수행할 때 최적화 여부
bpf_u_int32 netmask : 네트워크의 mask
?
16. int? pcap_compile_nopcap (int snaplen_arg, int linktype_arg, struct bpf_program *program, char *buf, int optimize, bpf_u_int32 mask)
[ 기능 ]
어댑터를 열지 않고 패킷 필터를 컴파일한다.
커널레벨의 필터링룰에 의해 인터프리트될 수 있는 프로그램에서
높은레벨의 필터링표현을 변환한다.
[ 파라미터 ]
int snaplen_arg :
int linktype_arg :
struct bpf_program *program : 필터링 룰에 따라 결정될 구조체
char *buf : 스트링 형태의 필터링 룰
int optimize : 결과 코드를 수행할 때 최적화를 물어본다
bpf_u_int32 mask : mask
[ 리턴 ]
성공 :
실패 : -1
?
17. int? pcap_setfilter (pcap_t *p, struct bpf_program *fp)
[ 기능 ]
pcap_compile()을 통해 결정된 bpf_program 구조체를 적용할 때 사용된다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
struct bpf_program *fp : 보통 pcap_compile()에서 결과
[ 리턴 ]
성공 : 0
실패 : -1
?
18. void? pcap_freecode (struct bpf_program *fp)
[ 기능 ]
필터를 해제한다.
[ 파라미터 ]
struct bpf_program *fp : 보통 pcap_compile()에서 결과
?
19. u_char *? pcap_next (pcap_t *p, struct pcap_pkthdr *h)
[ 기능 ]
다음 패킷의 포인터를 리턴한다. 내부적으로 pcap_dispatch()를 호출한다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
struct pcap_pkthdr *h : 패킷의 정보를 가리키고 있는 포인터
[ 리턴 ]
성공 : 패킷을 가리키는 포인터
실패 : NULL
?
20. int? pcap_datalink (pcap_t *p)
[ 기능 ]
link의 type을 리턴한다.
pcap_t의 멤버 중 linktype.
linke type은 bpf.h에 정의되어 있다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
[ 리턴 ]
성공 : link type
?
21. int? pcap_snapshot (pcap_t *p)
[ 기능 ]
pcap_open_live()가 호출될 때 지정된 길이인 snapshot length를 리턴한다.
pcap_t의 멤버 중 snapshot
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
[ 리턴 ]
성공 : snapshot length
실패 :
?
22. int? pcap_is_swapped (pcap_t *p)
[ 기능 ]
사용하고 있는 저장 파일과 사용하는 시스템이 같은 byte order를 사용하는지 여부를
알 수 있다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
[ 리턴 ]
0 : 같은 byte order를 사용할 경우
1 : 다른 byte order를 사용할 경우
?
23. int pcap_major_version(pcap_t *p)
[ 기능 ]
저장 파일에 사용된 pcap의 메이저 버전을 리턴한다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
[ 리턴 ]
성공 : pcap의 메이저 버전
?
24. int pcap_minor_version(pcap_t *p)
[ 기능 ]
저장 파일에 사용된 pcap의 마이너 버전을 리턴한다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
[ 리턴 ]
성공 : pcap의 마이너 버전
?
25. int pcap_stats(pcap_t *p, struct pcap_stat *ps)
[ 기능 ]
패킷 캡쳐에 관한 상태 정보를 ps에 저장한다. 송수신된 패킷의 갯수나 에러 발생 정보 등의 통계 정보를 알 수 있다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
struct pcap_stat *ps : 패킷 캡쳐 상태 정보 구조체
[ 리턴 ]
성공 : 0
실패 : -1
?
26. FILE *pcap_file(pcap_t *p)
[ 기능 ]
p가 가리키는 패킷 캡쳐에서 사용하는 저장 파일의 FILE 포인터를 넘겨준다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
[ 리턴 ]
성공 : 파일 포인터
?
27. int pcap_fileno(pcap_t *p)
[ 기능 ]
p가 가리키는 패킷 캡쳐에서 사용하는 저장 파일의 descriptor를 넘겨준다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
[ 리턴 ]
성공 : file descriptor
?
?
28. void pcap_perror(pcap_t *p, char *prefix)
[ 기능 ]
최근에 발생한 에러에 대해 에러메시지를 stderr에 출력한다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
char *prefix : 메시지를 출력할 때 앞에 추가할 내용
?
29. char *pcap_geterr(pcap_t *p)
[ 기능 ]
최근에 발생한 에러에 대한 메시지를 리턴한다.
[ 파라미터 ]
pcap_t *p : 패킷 캡쳐 descriptor
[ 리턴 ]
성공 : 최근 발생한 에러 메시지
?
30. char *pcap_strerror(int error)
[ 기능 ]
strerror(1)이 없을 경우를 위해 제공된다.
[ 파라미터 ]
int error : error number
[ 리턴 ]
성공 : error 메시지
?
31. void? pcap_close (pcap_t *p)
[ 기능 ]
패킷을 닫고 메모리 해제
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
?
32. void pcap_dump_close(pcap_dumper_t *p)
[ 기능 ]
저장 파일을 닫는다.
[ 파라미터 ]
pcap_dumper_t *p : 패킷 덤프 descriptor
?
33. int? pcap_setbuff (pcap_t *p, int dim)
[ 기능 ]
어댑터와 연결된 커널 버퍼의 크기를 지정한다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
int dim : 버퍼의 사이즈
[ 리턴 ]
성공 : 0
실패 : -1
?
34. int? pcap_setmode (pcap_t *p, int mode)
[ 기능 ]
인터페이스 p의 모드를 지정한다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
int mode : 모드(MODE_CAPT : 기본캡춰모드, MODE_STAT : 통계모드)
?
35. int? pcap_sendpacket (pcap_t *p, u_char *buf, int size)
[ 기능 ]
로우 패킷을 보낸다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
u_char *buf : 보내어진 패킷의 데이터
int size : 버퍼 크기
[ 리턴 ]
성공 : 0
실패 : -1
?
36. int? pcap_setmintocopy (pcap_t *p, int size)
[ 기능 ]
싱글 호출에서 커널에 의해 받아진 데이터의 최소 크기를 지정한다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
int size : 사이즈
[ 리턴 ]
성공 : 0
실패 : -1
?
37. HANDLE? pcap_getevent (pcap_t *p)
[ 기능 ]
인터페이스 p와 연결된 이벤트의 핸들을 구한다.
[ 파라미터 ]
pcap_t *p : pcap_open_offline()이나 pcap_open_live()에서 return되는 descriptor
[ 리턴 ]
성공 : 핸들
?
pcap_send_queue *? pcap_sendqueue_alloc (u_int memsize)
[ 기능 ]
send queue를 할당한다.
[ 파라미터 ]
u_int memsize : 큐의 최소 사이즈
?
38. void pcap_sendqueue_destroy? (? pcap_send_queue *queue? )??
[ 기능 ]
send queue를 해제한다.
[ 파라미터 ]
pcap_send_queue *queue : 큐 포인터
?
39. int? pcap_sendqueue_queue (pcap_send_queue *queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
[ 기능 ]
send queue의 끝에 패킷을 추가한다.
[ 파라미터 ]
pcap_send_queue *queue :
const struct pcap_pkthdr *pkt_header : 패킷의 헤더와 길이를 포함하는 pcap_pkthdr 자료구조의 포인터
const u_char *pkt_data : 패킷의 데이터를 포함하는 버퍼의 포인터
?
40. u_int? pcap_sendqueue_transmit (pcap_t *p, pcap_send_queue *queue, int sync)
[ 기능 ]
로우 패킷의 큐를 네트워크로 보낸다.
[ 파라미터 ]
pcap_t *p : 보내어진 패킷을 가진 어댑터의 포인터
pcap_send_queue *queue : 보내기 위한 패킷을 포함하는 pcap_send_queue 자료구조의 포인터
int sync : 동기화, 비동기화의 여부로 non-zero(TRUE)일 경우 동기화가 된다.
[ 리턴 ]
성공 : 실제 보내어진 바이트 수
?
41. int? pcap_next_ex (pcap_t *p, struct pcap_pkthdr **pkt_header, u_char **pkt_data)
[ 기능 ]
오프라인 캡처로부터 혹은 인터페이스로부터 패킷을 읽는다.
[ 파라미터 ]
pcap_t *p : 보내어진 패킷을 가진 어댑터의 포인터
struct pcap_pkthdr **pkt_header :
u_char **pkt_data :
?
[ 리턴 ]
1 : 성공
0 : timeout이 만기될 경우
-1 : 에러 발생
-2 : EOF
?
42. int? pcap_live_dump (pcap_t *p, char *filename, int maxsize, int maxpacks)
[ 기능 ]
인터페이스로부터 네트워크 트래픽 덤프를 파일로 저장한다.
[ 파라미터 ]
pcap_t *p : 어댑터의 포인터
char *filename : 파일 이름
int maxsize : 최대 사이즈
int maxpacks : 최대 패킷
[ 리턴 ]
성공 : 1
실패 : 0
?
43. int? pcap_live_dump_ended (pcap_t *p, int sync)
[ 기능 ]
커널 덤프 프로세스의 상태를 구한다.
[ 파라미터 ]
pcap_t *p : 어댑터의 포인터
int sync : nonzero면 덤프가 끝날때까지 함수는 블록킹 된다.
[ 리턴 ]
성공 : 1
실패 : -1
?
44. pcap_stat *? pcap_stats_ex (pcap_t *p, int *pcap_stat_size)
[ 기능 ]
현재 캡춰한 통계를 보여준다.
[ 파라미터 ]
pcap_t *p : 어댑터의 포인터
int *pcap_stat_size : pcap_stat 자료구조의 사이트를 포함한다.
[ 리턴 ]
성공 : pcap_stat 포인터로 현재 디바이스의 통계를 저장
실패 : NULL
?
char* pcap_strerror? (? int? ? error? )??
[ 기능 ]
strerror()가 이용가능하지 않을때 제공된다.
[ 파라미터 ]
int error : 에러
[ 리턴 ]
성공 : 에러 메시지
728x90