0

Net :: SNMPTrapdに含まれているサンプルスクリプトを使用しようとしていますが、Socketルーチンで失敗します。私のコード:

#!/usr/bin/perl
use Net::SNMPTrapd;

my $snmptrapd = Net::SNMPTrapd->new()
  or die "Error creating SNMPTrapd listener: ", Net::SNMPTrapd->error;

while (1) { 
    my $trap = $snmptrapd->get_trap();

    if ( !defined($trap) ) {
        printf "$0: %s\n", Net::SNMPTrapd->error;
        exit 1 
    } elsif ( $trap == 0 ) {
        next
    } 

    if ( !defined( $trap->process_trap() ) ) {
        printf "$0: %s\n", Net::SNMPTrapd->error
    } else { 
        printf "%s\t%i\t%i\t%s\n",
          $trap->remoteaddr,
          $trap->remoteport,
          $trap->version,
          $trap->community
    } 
} 

これを実行してCiscoルーターからv2トラップを送信すると、次のようにダンプされます。

Undefined subroutine &Net::SNMPTrapd::pack_sockaddr_in called at /usr/local/share/perl/5.14.2/Net/SNMPTrapd.pm line 554.

誰かがこれを修正する方法を教えてもらえますか?

4

1 に答える 1

0
use Socket qw(inet_ntoa AF_INET IPPROTO_TCP);

する必要があります

use Socket qw(inet_ntoa AF_INET IPPROTO_TCP pack_sockaddr_in);

回避策

変化する

use Net::SNMPTrapd;

use Net::SNMPTrapd;
BEGIN {
   *Net::SNMPTrapd::pack_sockaddr_in = \&Socket::pack_sockaddr_in
      if !defined(&Net::SNMPTrapd::pack_sockaddr_in);
}

モジュールの作成者がこれを修正しても、これは壊れません(あなたが彼にそれを言った後...

于 2013-01-29T03:43:41.400 に答える