【发布时间】:2012-06-02 14:00:39
【问题描述】:
我有一个用于向远程主机发送 SNMP 陷阱的 perl 脚本
my (@varbinds,$hostname);
GetOptions(
"hostname=s" =>\$hostname,
);
$hostnode = `hostname`; # Unix command to find the hosts name
chomp $hostnode;
push (@varbinds, ".0.1",OCTET_STRING, $hostnode);
for (my $i;$i <= $#ARGV;$i++){
push (@varbinds, ".0.".($i + 3),OCTET_STRING, $ARGV[$i]);
}
my ($session, $error) = Net::SNMP->session(
-hostname => $hostnode,
-community => 'public',
-port => 162,
-version => 2,
);
my $result = $session->snmpv2_trap(
-varbindlist => \@varbinds
);
$session->close();
print " SNMP Trap Hostname -> $hostnode\n";
for (my $i;$i <= $#varbinds;$i++)
{
print "\n\t\t$varbinds[$i], $varbinds[($i+1)],$varbinds[($i+2)]";
$i += 2;
}
我使用这个命令调用这个脚本 perl snmptrap.pl -h myhost "我现在的 snmpMsg"
myhost 是等待我的 snmp 陷阱的远程主机
当我调用这个 perl 脚本时,远程主机正确接收到 snmp 消息。
当我尝试在 java 类中调用这个 perl 脚本时,问题就出现了。
我使用的代码如下。
String SNMPMSG = "\"my snmpMsg now\" ";
String script_url = "./snmptrap.pl "+" -h myhost "+SNMPMSG;
Process p = Runtime.getRuntime().exec(script_url);
InputStream stdin= p.getInputStream();
BufferedReader reader = new BufferedReader (new InputStreamReader(stdin));
while ((line = reader.readLine ()) != null) {
System.out.println(" " + line);
}
奇怪的是,这个 myhost 期望 snmp 消息会根据其空格截断消息,并接收为 3 条消息。
1 我的
2.snmpMsg
3.现在
如果我使用了非空格的消息 - 例如(my_snmpMsg_now),它将作为一条消息接收
我对 perl 脚本非常陌生,由于基础设施相关问题,我无法使用 java 实现 snmp 陷阱发送过程,需要使用 perl 脚本并使用 java 调用它。
尝试使用转义字符传递消息字符串也可以。
我们非常感谢这方面的任何帮助。
【问题讨论】:
-
使用exec(String[])在数组中传递参数。