2011-06-10 64 views
1

我想在使用模塊Net :: Pcap的Debian服務器上運行腳本。該腳本在所有機器上都能正常工作,但這臺服務器恰好是我需要運行的唯一一臺服務器。Debian服務器「無法找到可加載對象」但「模塊是最新的」

一旦運行該腳本,我得到了常見的「無法定位模塊加載網::對象在PCAP @INC(路徑..等)」

但是,當我嘗試使用安裝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); 

回答

3

也許你缺少原生庫。嘗試以root身份運行:

apt-get install libnet-pcap-perl 
+0

就是這樣!謝謝你的幫助! – MBrowning 2011-06-10 13:45:53

1

大廈jjmontes的回答是:

strace可以是非常有幫助的。例如,在這種情況下,你可能會遇到

strace perl -e 'use Net::Pcap' 

我也有類似的問題,今天的XSLoader找不到駝鹿庫(由於陳舊NFS文件句柄)。當我看到strace試圖在許多路徑上打開Moose.so,並且從未發現它時,我能夠追蹤到這個Moose.so,但是它缺失或不可讀。然而,如果你不知道如何過濾,strace會有很多噪音。

相關問題