我正在尝试使用SNMP4J模拟几个虚拟SNMP设备。因此,当发送陷阱时,我试图修改原始设备的IP地址,但我不知道如何。我知道有一个setPeerAddress()方法,但它似乎没有工作。事实上,我甚至不确定SNMP4J是否可能或支持它。
或者,是否可以使用Java虚拟欺骗和IP地址?
提前感谢您的帮助。
答案 0 :(得分:0)
我几乎100%确定Java不会允许您欺骗IP数据包的发件人地址。
根据操作系统允许的内容,可以使用对JNI方法的调用来执行此操作。我在Windows上运行时已经看到它在JPcap库中完成了。
(不是在http://jpcap.sourceforge.net/托管的流行的jpcap,而是围绕winpcap的无关的,同名的包装器,以前托管在 http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/index.html。我只是注意到它似乎从网上消失了。)
编辑:关于SNMP4j的API,我只能在CommandResponderEvent和ResponseEvent类中找到setPeerAddress()方法。这两个似乎都代表了传入的数据(对您发送的请求的响应),因此尝试以这种方式更改发件人地址对您没有用。
答案 1 :(得分:0)
在转发/发送前,将IP地址varbind添加到陷阱PDU,而不是进行欺骗。
String ip_addr = cmdRespEvent.getPeerAddress().toString().split("/")[0];
pdu.add(new VariableBinding(SnmpConstants.snmpTrapAddress,
new IpAddress(ip_addr)));