前言
执行sudo tcpdump,若报错找不到libpcap.so.1,error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file or directory
,则执行whereis libpcap.so.1
- 若显示
libpcap.so: /usr/local/lib/libpcap.so /usr/local/lib/libpcap.so.1
,则说明文件存在但执行时获取不到路径:- 我们做一个符号链接到/usr/lib/下即可,链接代码sudo ln -s /usr/local/lib/libpcap.so.1 /usr/lib/libpcap.so.1;
- 或者以管理员权限打开编辑 /etc/ld.so.conf 文件, 末尾新一行追加
/usr/local/lib/
, /usr/local/lib/ 为 libpcap.so.1.1.1 所在目录, 保存退出,然后以管理员权限执行 ldconfig 命令
- 若显示
libpcap.so:
,则说明缺少pcap库,需要安装libpcap库才可执行tcpdump。
libpcap库的安装
1. 安装
- 执行以下语句安装:
sudo yum install flex
sudo yum install bison
下载libpcap,连接,选择
libpcap-1.5.3.tar.gz
解压文件
tar -zxvf libpcap-1.3.0.tar.gz
进入解压文件
cd libpcap-1.3.0
,执行以下命令
./configure
make
make install
==执行每一步注意报错==:
- error:Your operating system's lex is insufficient to compile libpcap.意思就是你的操作系统的词法分析器(lex)不足以编译libpcap,是需要安装一个flex,sudo yum install flex回车
- yacc: 命令未找到。yacc(Yet Another Compiler Compiler)是unix/linux上用来生成编译器的编译器(编译器代码生成器)。yacc生成的编译器使用C语言写成的语法解析器(Parser),需要与词法分析器lex一起使用,再把两部分产生出来的C程序一并编译。解决这个问题的办法是:安装bison,sudo yum install bison。
- 如果以上执行过程都没有报错,但之后的检验无法编译测试代码,需要make clean之后重新执行以上三步。
2. 检验
编写测试代码test.c
#include <stdio.h>
#include <pcap.h>
int main(int argc,char *argv[]){
char *dev, errbuf[PCAP_ERRBUF_SIZE];
dev=pcap_lookupdev(errbuf);
if(dev==NULL){
fprintf(stderr,"couldn't find default device: %s\n",errbuf);
return(2);
}
printf("Device: %s\n",dev);
return(0);
}
执行gcc -o device test.c -lpcap
若报错undefined reference to 'pcap_lex' collect2: ld returned 1 exit status
返回【libpcap安装】步骤中检查是否是flex没有安装。
tcpdump的安装
执行安装sudo yum install tcpdump
执行tcpdump,若报错/usr/local/lib/libpcap.so.1: undefined symbol: pcap_lex
,说明pcap库的安装有问题,返回【libpcap的安装】进行排查。