我有一個用於將SNMP陷阱發送到遠程主機問題使用Java
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腳本傳遞給perl腳本參數的perl snmptrap.pl -^h爲myhost「我現在snmpMsg」
其中myhost的是期待我的SNMP陷阱
當我調用遠程主機正確接收SNMP消息這個perl腳本的遠程主機。
當我嘗試在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.now
,如果我使用非空間信息 - 例如(my_snmpMsg_now)接收的一個消息
我很新的Perl腳本,並且由於基礎設施相關的問題,我無法實現使用java的snmp陷阱發送過程,並且需要使用perl腳本並使用java爲此目的調用它。
試圖通過消息字符串轉義字符力量以及工作。
在這方面的任何幫助是高度讚賞。
使用[exec(String \ [\])](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec \( java.lang.String中[] \))。 –