OpenWrt 및 교재 Q&A

openwrt에서 pcap.h 사용시 질문

페이지 정보

작성자 백유진 작성일18-01-24 13:13 조회3,963회 댓글5건

본문

openwrt에서 pcap.h를 쓸려고 하는데 에러가 나서 질문 올립니당.

소스코드는 이거고요

#include <stdio.h>
#include <stdlib.h>
#include </home/uj100/backfire/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/mips-openwrt-linux/sys-include/pcap.h>    //libpcap 헤더 포험
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char **argv)
{
    char *dev;    // 사용중인 네트웍 디바이스 이름
    char *net;    // 네트웍 어드레스
    char *mask;  // 네트웍 mask 어드레스
    int ret;      // 
    char errbuf[PCAP_ERRBUF_SIZE];
    bpf_u_int32 netp;  // ip
    bpf_u_int32 maskp; // submet mask
    struct in_addr addr;
    // 네트웍 디바이스 이름을 얻어온다.
 dev = pcap_lookupdev(errbuf);
 // 에러가 발생했을경우
 if(dev == NULL)
  {
  printf("%s\n",errbuf);                               
  exit(1);
 }
  // 네트웍 디바이스 이름 출력
 printf("DEV: %s\n",dev);
 // 네트웍 디바이스 이름 dev 에 대한
 // mask, ip 정보 얻어오기 
 ret = pcap_lookupnet(dev,&netp,&maskp,errbuf);
 if(ret == -1)
 {
  printf("%s\n",errbuf);
  exit(1);
 }
 
  // 네트웍 어드레스를 점박이 3형제 스타일로
 addr.s_addr = netp;
 net = inet_ntoa(addr);
 if(net == NULL)
 {
  perror("inet_ntoa");
  exit(1);
 }
 printf("NET: %s\n",net);
 // 마찬가지로 mask 어드레스를 점박이 3형제 스타일로
 addr.s_addr = maskp;
 mask = inet_ntoa(addr);
 if(mask == NULL)
 {
  perror("inet_ntoa");
  exit(1);
 }
 printf("MASK: %s\n",mask);
 return 0;
}

컴파일은 이렇게 하고요

/home/uj100/backfire/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-gcc -o pcap_tar pcap.c -lpcap

에러메시지는 이렇게 나옵니다.
4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-gcc -o pcap_tar pcap.c -lpcap
/home/uj100/backfire/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/lib/gcc/mips-openwrt-linux-uclibc/4.3.3/../../../../mips-openwrt-linux-uclibc/bin/ld: cannot find -lpcap
collect2: ld returned 1 exit status

// 관리자 2018-01-24: 11-11-17 04:04 에 작성된 글입니다

댓글목록

백유진님의 댓글

백유진 작성일

도움 부탁드려요 ㅜ
// 관리자 2018-01-24: 11-11-17 04:05 에 작성된 글입니다

김동준님의 댓글

김동준 작성일

아마도 라이브러리가 없으신듯.

-lpcap 옵션을 사용하시려면 동적 라이브러리가 있어야 할 것입니다.

libpcap 라이브러리를 설치하신뒤 컴파일 하시면 해당 문제를 해결하실수 있을것 같습니다 ^^

opks install libpcap

// 관리자 2018-01-24:  11-11-18 15:48 에 작성된 글입니다

박우재님의 댓글

박우재 작성일

opkg 패키지에는 헤더 및 데브 파일을 포함하지 않습니다.
make menuconfig에서 openwrt libpcap을 한번 컴파일 하시고 staging_dir에서 찾아보셔야 합니다.
Openwrt는 업데이트를 하면서 패키지의 변화가 굉장히 많습니다. 자신의 패키지의 소스를 찾아 보시려면 openwrt 소스 디렉토리 밑에서 pacakage 디렉토리의 libpcap의 Makefile을 참조하시면 libpcap의 다운로드 http url을 찾으실 수 있을 겁니다. 직접 다운받아서 make 하실 때, I플래그와 L플래그에 넣어서 크로스 컴파일 하시면 됩니다. 밑의 분의 질문과 비슷하군요. 밑에 분의 질문을 참조하시기 바랍니다.

// 관리자 2018-01-24: 11-11-18 20:00 에 작성된 글입니다

백유진님의 댓글

백유진 작성일

답변 감사드립니다.

make 할때 I플래그와 L플래그 넣는 방법을 좀 알고 싶어요.

tcpdump.org에서 패키지는 다운 받은 상태입니다

다시한번 답변 부탁드려요.
// 관리자 2018-01-24: 11-11-20 18:25 에 작성된 글입니다

박우재님의 댓글

박우재 작성일

BUILDROOT=/home/lokios/openwrt/trunk
mipsel-openwrt-linux-gcc rsa_encryp.c \
    -I$BUILDROOT/staging_dir/target-*/usr/include \
    -L$BUILDROOT/staging_dir/target-*/usr/lib \
    -Wl,-rpath-link=$BUILDROOT/staging_dir/target-*/usr/lib \
    -lcrypto -o encrypt

이렇게 하시면 됩니다.

// 관리자 2018-01-24: 11-11-22 01:36 에 작성된 글입니다