Debian服务器“找不到可加载对象”“模块是最新的”

时间:2011-06-10 13:32:03

标签: linux perl debian gnu

我正在尝试在使用模块Net :: Pcap的Debian服务器上运行脚本。该脚本在所有机器上运行正常,但是这台服务器恰好是我需要运行的唯一一台。

运行脚本后,我得到了常见的“无法在@INC(路径等等)中找到模块Net :: Pcap的可加载对象”

但是,当我尝试使用CPAN安装时,收到消息“Net :: Pcap是最新的(0.16)。”

我手动从@INC中的所有文件夹中删除了Net :: Pcap,并手动和通过CPAN重新安装它们。

任何人都知道我的问题是什么?

对于它的价值,这是代码:

    use Net::Pcap;
    use NetPacket::TCP;
    use NetPacket::IP;
    use NetPacket::Ethernet;
    use Net::PcapUtils;

    open (TXT, ">", "data.txt");
    Net::PcapUtils::loop(\&process_packet,SNAPLEN => 65536,PROMISC => 1, );

    sub process_packet {
      my($user_data, $header, $packet) = @_;
      my $tcp_obj = NetPacket::TCP->decode($packet);
      my $ip_obj = NetPacket::IP->decode($packet);
      my $len = length $packet;
      my $i=0;
      print TXT "From: "."$ip_obj->{src_ip}".":"."$tcp_obj->{src_port}\n";
      print TXT "To: "."$ip_obj->{dest_ip}".":"."$tcp_obj->{dest_port}\n";
      do {    
        my $lg = substr $packet, $i, 16;
        printf TXT "%.8X : ", $i;
        $i+=16;
        print TXT unpack ('H2'x16, $lg), '  'x(16-length $lg);
        $lg =~ s/[\x00-\x1F\xFF]/./g;
        print TXT " $lg\n";
        } until $i>=$len;
        print TXT "\n";
      }
   close (TXT);

2 个答案:

答案 0 :(得分:3)

也许你错过了原生的libs。尝试以root身份运行:

apt-get install libnet-pcap-perl

答案 1 :(得分:1)

以jjmontes的答案为基础:

strace非常有帮助。例如,在这种情况下,您可以运行

strace perl -e 'use Net::Pcap'

我今天遇到类似的问题,XSLoader找不到Moose的库(由于过时的NFS文件句柄)。当我看到strace尝试在许多路径中打开Moose.so并且从未找到它时,我能够追踪到Moose.so要么丢失要么不可读。但是,如果您不知道如何过滤它,那么strace可能会产生很多噪音。