我正在尝试使用Net::SNMPTrapd附带的示例脚本,但它在套接字例程上失败。我的代码:
#!/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
}
} 当我运行此命令并从我的思科路由器向其发送v2陷阱时,它只是转储:
Undefined subroutine &Net::SNMPTrapd::pack_sockaddr_in called at /usr/local/share/perl/5.14.2/Net/SNMPTrapd.pm line 554.有人能告诉我怎么解决这个问题吗?
发布于 2013-01-29 11:43:41
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);
}即使模块的作者得到了修复,这也不会中断(在您将其mention给他之后...)
https://stackoverflow.com/questions/14575180
复制相似问题