在 Java 中发送陷阱 v2
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3354091/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Send trap v2 in Java
提问by EK.
How can I send snmpv2 traps from Java application. I tried to do example on snmp4j, but it didn't work.
如何从 Java 应用程序发送 snmpv2 陷阱。我试图在 snmp4j 上做例子,但没有奏效。
采纳答案by Gopi
I use SNMP4Jfor this.
我为此使用SNMP4J。
Thisjavadoc might help you write your code. You can use the Snmp.trap()method
此javadoc 可能会帮助您编写代码。您可以使用Snmp.trap()方法
Edit:
编辑:
Well, I dont have code of my own at this moment, but you may refer thisone . You have to use Snmp.notify() for sending V2 trap instead of Snmp.trap() as trap() only supports sending V1 traps.
好吧,我现在没有自己的代码,但你可以参考这个。您必须使用 Snmp.notify() 来发送 V2 陷阱而不是 Snmp.trap(),因为 trap() 仅支持发送 V1 陷阱。
回答by Daniel Voina
I would go for snmp4j library http://www.snmp4j.org/.
我会去 snmp4j 库http://www.snmp4j.org/。
import org.snmp4j.*;
import org.snmp4j.event.*;
...
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setVersion(SnmpConstants.version2c);
PDU request = new PDU();
request.setType(PDU.V2TRAP);
request.setGenericTrap(PDUv2.COLDSTART);
Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
snmp.listen();
snmp.sendPDU(request, target, null, listener);
回答by hannes.koller
It took me some time but I finally figured out how to use SNMP4J to send a trap: Hope that helps..
我花了一些时间,但我终于想出了如何使用 SNMP4J 发送陷阱:希望有帮助..
public static void main(String[] args) throws Exception {
// Create PDU
PDU trap = new PDU();
trap.setType(PDU.TRAP);
OID oid = new OID("1.2.3.4.5");
trap.add(new VariableBinding(SnmpConstants.snmpTrapOID, oid));
trap.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(5000))); // put your uptime here
trap.add(new VariableBinding(SnmpConstants.sysDescr, new OctetString("System Description")));
//Add Payload
Variable var = new OctetString("some string");
trap.add(new VariableBinding(oid, var));
// Specify receiver
Address targetaddress = new UdpAddress("10.101.21.32/162");
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setVersion(SnmpConstants.version2c);
target.setAddress(targetaddress);
// Send
Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
snmp.send(trap, target, null, null);
}
回答by mickael
A good example that sends trap V1 and notification V2. I just needed to modify the port to 162 and the way to set the sysUpTime for both version V1 and V2.
发送陷阱 V1 和通知 V2 的一个很好的例子。我只需要将端口修改为 162 以及为版本 V1 和 V2 设置 sysUpTime 的方式。
Tested with snmp4j-1.10.1 and snmp4j-2.1.0.
使用 snmp4j-1.10.1 和 snmp4j-2.1.0 进行测试。
http://www.techdive.in/snmp/snmp4j-trap-sender
http://www.techdive.in/snmp/snmp4j-trap-sender
package snippet;
/**
* Copyright 2010 TechDive.in
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* <a href="http://www.apache.org/licenses/LICENSE-2.0" title="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
import java.util.Date;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.PDUv1;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.IpAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.TimeTicks;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
public class TrapSender {
public static final String community = "public";
// Sending Trap for sysLocation of RFC1213
public static final String trapOid = ".1.3.6.1.2.1.1.6";
public static final String ipAddress = "192.168.1.52";
public static final int port = 162;
public TrapSender() {
}
public static void main(String[] args) {
TrapSender snmp4JTrap = new TrapSender();
/* Sending V1 Trap */
snmp4JTrap.sendSnmpV1Trap();
/* Sending V2 Trap */
snmp4JTrap.sendSnmpV2Trap();
}
/**
* This methods sends the V1 trap to the Localhost in port 163
*/
public void sendSnmpV1Trap() {
try {
// Create Transport Mapping
TransportMapping transport = new DefaultUdpTransportMapping();
transport.listen();
// Create Target
CommunityTarget comtarget = new CommunityTarget();
comtarget.setCommunity(new OctetString(community));
comtarget.setVersion(SnmpConstants.version1);
comtarget.setAddress(new UdpAddress(ipAddress + "/" + port));
comtarget.setRetries(2);
comtarget.setTimeout(5000);
// Create PDU for V1
PDUv1 pdu = new PDUv1();
pdu.setType(PDU.V1TRAP);
pdu.setEnterprise(new OID(trapOid));
pdu.setGenericTrap(PDUv1.ENTERPRISE_SPECIFIC);
pdu.setSpecificTrap(1);
pdu.setAgentAddress(new IpAddress(ipAddress));
long sysUpTime = 111111;
pdu.setTimestamp(sysUpTime);
// Send the PDU
Snmp snmp = new Snmp(transport);
System.out.println("Sending V1 Trap to " + ipAddress + " on Port " + port);
snmp.send(pdu, comtarget);
snmp.close();
} catch (Exception e) {
System.err.println("Error in Sending V1 Trap to " + ipAddress + " on Port " + port);
System.err.println("Exception Message = " + e.getMessage());
}
}
/**
* This methods sends the V2 trap to the Localhost in port 163
*/
public void sendSnmpV2Trap() {
try {
// Create Transport Mapping
TransportMapping transport = new DefaultUdpTransportMapping();
transport.listen();
// Create Target
CommunityTarget comtarget = new CommunityTarget();
comtarget.setCommunity(new OctetString(community));
comtarget.setVersion(SnmpConstants.version2c);
comtarget.setAddress(new UdpAddress(ipAddress + "/" + port));
comtarget.setRetries(2);
comtarget.setTimeout(5000);
// Create PDU for V2
PDU pdu = new PDU();
// need to specify the system up time
long sysUpTime = 111111;
pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(sysUpTime)));
pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, new OID(trapOid)));
pdu.add(new VariableBinding(SnmpConstants.snmpTrapAddress, new IpAddress(ipAddress)));
// variable binding for Enterprise Specific objects, Severity (should be defined in MIB file)
pdu.add(new VariableBinding(new OID(trapOid), new OctetString("Major")));
pdu.setType(PDU.NOTIFICATION);
// Send the PDU
Snmp snmp = new Snmp(transport);
System.out.println("Sending V2 Trap to " + ipAddress + " on Port " + port);
snmp.send(pdu, comtarget);
snmp.close();
} catch (Exception e) {
System.err.println("Error in Sending V2 Trap to " + ipAddress + " on Port " + port);
System.err.println("Exception Message = " + e.getMessage());
}
}
}
回答by Haifeng Zhang
A very good example can be found here:
一个很好的例子可以在这里找到:
http://shivasoft.in/blog/java/snmp/create-snmp-client-in-java-using-snmp4j/
http://shivasoft.in/blog/java/snmp/create-snmp-client-in-java-using-snmp4j/