pcap_ 함수들을 호출하면 에러가 발생합니다
글쓴이: 이명수 / 작성시간: 월, 2010/04/19 - 10:26오전
pcap_lookupnet() pcap_compile() pcap_setfilter() 함수 등 pcap_ 함수들을 호출하면 에러가 발생합니다
TCP 패킷만 캡쳐하기 위해 아래와 같은 패킷 필더링 코드를 넣었는데
struct in_addr network; struct in_addr netmask; struct bpf_program fcode; pcap_lookupnet(device, &network.s_addr, &netmask.s_addr, ebuf); pcap_compile(pcapd, &fcode, "tcp", 0, netmask.s_addr); pcap_setfilter(pcapd, &fcode);
아래와 같은 에러가 발생합니다
# gcc -o login login.c -lpcap /usr/local/lib/libpcap.a(gencode.o): In function `pcap_compile': gencode.c:(.text+0x54b): undefined reference to `lex_init' /usr/local/lib/libpcap.a(gencode.o): In function `pcap_compile_nopcap': gencode.c:(.text+0x6bb): undefined reference to `lex_init' /usr/local/lib/libpcap.a(grammar.o): In function `yyparse': grammar.c:(.text+0x527): undefined reference to `yylex' grammar.c:(.text+0x5c4): undefined reference to `yylex' collect2: ld returned 1 exit status
CentOS 5.x에서 아래와 같이 pcap 라이브러리 패키지를 설치하였습니다
# yum install libpcap-devel
맨위의 패킷 필터링 코드만 빼면
에러 없이 컴파일도 잘 되고 패킷 캡쳐도 잘 됩니다
단지 TCP, UDP 전부 다 엄청나게 캡쳐되어서
패킷 필터링을 반드시 사용해야 합니다
(반드시 TCP, UDP 필터링 때문만이 아니라 패킷 필터링을 응용해서 사용해야 합니다)
다른 패키지를 더 설치해야 하는지
아니면 더 추가해야할 헤더파일이 있는지 궁금합니다
현재 인클루드 된 헤더파일은 아래와 같습니다
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/time.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/in_systm.h> #include <netinet/ip.h> #include <netinet/udp.h> #include <netinet/if_ether.h> #include <arpa/inet.h> #include <pcap.h>
Forums:
pcap lib이 제대로
pcap lib이 제대로 설치되지 않은 것 같습니다.
예전에 wireshark 설치시에 비슷한 문제가 있었던것으로 기억하는데
결국엔 libpcap source를 받아 강제로 경로 할당해주고 깔았던 기억이 있군요.
(제 경우는 yum 으로 설치했다가 libpcap을 아예 못찾아서 소스 다운후 컴파일해서 lib file 강제로 지정)
yum 말고 소스 다운받으셔서 ./configure 먼저 해보시고 컴파일 시도해보세요 :)
댓글 달기