在Ubuntu 16.04系统上,一直尝试使用ld_preload和自定义编译的libpcap.so并运行tcpdump。
编译libpcap(1.8.0)
./configure --prefix=`pwd`/inst
make install
然后在使用此命令时,tcpdump使用自定义libpcap
LD_PRELOAD=/home/user/tcpdump/inst/libpcap.so.1.8.0 /usr/sbin/tcpdump --version
输出是:
tcpdump version 4.7.4
libpcap version 1.8.0
OpenSSL 1.0.2g 1 Mar 2016
然后,当我将libpcap移动到另一个文件夹时,例如/ usr / local / lib 它已不再适用了。
我收到以下错误:
ERROR: ld.so: object '/usr/local/lib/libpcap.so.1.8.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored
据我所知,它存在某种权限问题。但是我已经知道了,我想到了我能想到的一切。 我错过了什么?
这应该让你知道可能出现的问题。
编辑: 问题似乎特定于某些目录和tcpdump本身。 当LD_PRELOAD在/ bin / true
上时输出straceLD_PRELOAD=/usr/local/lib/libpcap.so.1.8.0 strace -fF /bin/true 2>&1 | grep libp
open("/usr/local/lib/libpcap.so.1.8.0", O_RDONLY|O_CLOEXEC) = 3
这是tcpdump
上的strace输出LD_PRELOAD=/usr/local/lib/libpcap.so.1.8.0 strace -fF /usr/sbin/tcpdump 2>&1 | grep libp
open("/usr/local/lib/libpcap.so.1.8.0", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
writev(2, [{"ERROR: ld.so: object '", 22}, {"/usr/local/lib/libpcap.so.1.8.0", 31}, {"' from ", 7}, {"LD_PRELOAD", 10}, {" cannot be preloaded (", 22}, {"cannot open shared object file", 30}, {"): ignored.\n", 12}], 7ERROR: ld.so: object '/usr/local/lib/libpcap.so.1.8.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
open("/usr/lib/x86_64-linux-gnu/libpcap.so.0.8", O_RDONLY|O_CLOEXEC) = 3
这两个命令都以sudo
运行答案 0 :(得分:0)
查找文件(perms或不正确的路径)似乎有问题。我看到你提到你已经将文件移动到/ usr / local / lib但我看到错误消息为/usr/local/libpcap.so.1.8.0。也许是一个错字?
如果没有,请运行
LD_PRELOAD=/usr/local/lib/libpcap.so.1.8.0 strace -fF -e open /bin/true 2>&1 | grep libp
要确认的另一件事是/ usr / local / lib是链接器的标准路径(如果您不想使用LD_PRELOAD):
ldconfig -v 2>/dev/null | grep -v ^$'\t'