嵌入式linux的Pcap移植与测试

2019-07-12 22:29发布

1.下载libpcap-1.6.2.tar.gz,解压至libpcap-1.6.2目录下


2.在目录libpcap-1.6.2 下 执行 ./configure --host=arm-linux


3.修改configure文件 ,将以下几行注释


#if test -z "$with_pcap" && test "$cross_compiling" = yes; then
# as_fn_error $? "pcap type not determined when cross-compiling; use --with-pcap=..." "$LINENO" 5
#fi


4. 修改Makefile的prefix项为 prefix=/work/pcap, 此目录即为目标文件的存储库的位置。
    用户可以自由设定


5. 执行命令make,make install,完成了libpcap的编译和安装,查看/work/pcap文件夹下,有include和lib文件夹


6.编写使用pcap的应用程序,程序的makefile文件如下: makefile文件下的指令行 必须以tab键作为开始
arm-linux-gcc -o test -static test.c -lpcap -L/work/pcap/lib  -I/work/pcap/include
生成的test文件即可在嵌入式设备 上运行,链接属性为-static,无需拷贝库文件,需要注意的是 运行程序之前 确保程序为可执行属性 chmod 777 test

7.    一个简单的test.c 程序
      #include
#include
#include
#include


int main()
{
  char errBuf[PCAP_ERRBUF_SIZE], * devStr;
  /* get a device */
  devStr = pcap_lookupdev(errBuf);
  if(devStr)
  {
    printf("success: device: %sn", devStr);
  }
  else
  {
    printf("error: %sn", errBuf);
    exit(1);
  }
  /* open a device, wait until a packet arrives */
  pcap_t * device = pcap_open_live(devStr, 65535, 1, 0, errBuf);
  if(!device)
  {
    printf("error: pcap_open_live(): %sn", errBuf);
    exit(1);
  }
  /* wait a packet to arrive */
  struct pcap_pkthdr packet;
  const u_char * pktStr = pcap_next(device, &packet);
  if(!pktStr)
  {
    printf("did not capture a packet!n");
    exit(1);
  }
  printf("Packet length: %dn", packet.len);
  printf("Number of bytes: %dn", packet.caplen);
  printf("Recieved time: %sn", ctime((const time_t *)&packet.ts.tv_sec));
  pcap_close(device);
  return 0;
}