snmp有android代理端吗,Android实现snmp协议(1)
snmp协议是TCP/IP协议,是用c系语言完成的,本人以前移植过的uip1.0也是用c语言写的。而Android必须使用Java来实现,为此,本人首先使用了snmp4j这个jar包,建立了Java工程,仿造官方文档的示例,coding如下(需引入snmp4j的两个jar包):
class SnmpManager {
private TransportMapping transportMapping = null;
private Snmp snmp = null;
private int version;
public final static int version1 = SnmpConstants. version1;
public final static int version2c = SnmpConstants.version2c;
public final static int version3 = SnmpConstants. version3;
/**
* 构造方法
* @param version
*/
public SnmpManager( int version) {
this. version = version;
try {
// 设置成Udp协议
transportMapping = new DefaultUdpTransportMapping();
snmp = new Snmp( transportMapping);
if (version == version3) {
// 设置安全信息
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
SecurityModels. getInstance().addSecurityModel(usm);
}
transportMapping.listen();
} catch (Exception e) {
e.printStackTrace();
System. out.println(e);
}
}
/**
* @param sync
* @param bro
* @param pdu
* @param addr
* 发送消息方法
*/
public void sendMsg(boolean sync, final boolean bro, PDU pdu, String addr) {
Address targetAddres = GenericAddress. parse(addr);
Target target = null;
if ( this. version == version3) {
snmp.getUSM().addUser( new OctetString( "MD5DES"), new UsmUser( new OctetString( "MD5DES"), AuthMD5. ID, new OctetString("MD5DESUserAuthPassword" ), PrivDES.ID, new OctetString("MD5DESUserPrivPassword" )));
target = new UserTarget();
// 设置安全级别
target.setSecurityLevel(SecurityLevel. AUTH_PRIV);
target.setSecurityName( new OctetString("MD5DES"));
target.setVersion(SnmpConstants. version3);
} else {
target = new CommunityTarget();
if ( this. version == version1) {
target.setVersion( version1);
((CommunityTarget) target).setCommunity(new OctetString("public" ));
} else {
target.setVersion( version2c);
((CommunityTarget) target).setCommunity(new OctetString("public" ));
}
}
target.setAddress(targetAddres);
target.setRetries(2);
target.setTimeout(1000);
if (sync) {
// 发送报文 并且接受响应
ResponseEvent response = null;
try {
response = snmp.send(pdu, target);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System. out.println(e);
}
// 处理响应
System. out.println( "Synchronize message from " + response.getPeerAddress() + "/nrequest:" + response.getRequest() + "/nresponse:" + response.getResponse());
} else {
ResponseListener listener = new ResponseListener() {
@Override
public void onResponse(ResponseEvent event) {
if (!bro) {
((Snmp) event.getSource()).cancel(event.getRequest(), this );
}
// 处理响应
PDU request = event.getRequest();
PDU response = event.getResponse();
System. out.println( "Asynchronise message from " + event.getPeerAddress() + "/nrequest:" + request + "/nresponse:" + response);
}
};
try {
snmp.send(pdu, target, null, listener);
} catch (IOException e) {
e.printStackTrace();
System. out.println(e);
}
}
}
}
public class SnmpTest {
public static String myVersion = "";
static boolean sync = false;
static boolean bro = false;
/**
* 主函数
* @param args
*/
public static void main(String[] args) {
SnmpManager manager = new SnmpManager(SnmpConstants.version2c );
// 构造报文
PDU pdu = new PDU();
// PDU pdu = new ScopedPDU(); version3使用
// 设置要获取的对象ID
OID oids = new OID( "1.3.6.1.2.1.1.1.0");
// OID oids = new OID(new int [] { 1, 3, 6, 1, 2, 1, 1, 1, 0 });
pdu.add( new VariableBinding(oids));
// 设置报文类型
pdu.setType(PDU. GET);
// ((ScopedPDU) pdu).setContextName(new OctetString("priv"));
// 发送消息 其中最后一个是想要发送的目标地址
manager.sendMsg( true, true, pdu, "udp:127.0.0.1/161");
}
}
运行结果如下:
等我把这段Java代码移植到Android工程中时,却不起作用了。我百度、google、stackoverflow等一些网站都看过了,在stackoverflow上有位朋友也是遇到和我一样的问题,有人回复snmp4j无法在Android上无法使用,究竟为什么,本人也不能解释给大家听,需要更厉害的人了!
因为是华为老师的项目,我不能这样尥蹶子,就继续查找相关资料,我想应该有人做出了类似snmp4j的Android版本吧,功夫不负有心人。
https://www.webnms.com/snmpapi-android/index.html
这个网站的闭源包提供了这个功能,做snmp的开发者,不妨研读一下,我就是在使用了此网站的开发包,完成了snmp的协议。
private void buttonFun() {
noNull();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
api = new SnmpAPI();
session = new SnmpSession(api);
SnmpPDU pdu = new SnmpPDU();
UDPProtocolOptions protocol = new UDPProtocolOptions();
protocol.setRemoteHost(getText(target));
protocol.setRemotePort(Integer.parseInt(getText(port)));
pdu.setProtocolOptions(protocol);
// Build Get request PDU
pdu.setCommand(SnmpAPI.GET_REQ_MSG);
pdu.setCommunity(getText(community));
if(version.getSelectedItemPosition()==0){
pdu.setVersion(SnmpAPI.SNMP_VERSION_1);
}else if(version.getSelectedItemPosition()==1){
pdu.setVersion(SnmpAPI.SNMP_VERSION_2C);
}else if(version.getSelectedItemPosition()==2){
//还需设置MD5 SHA认证密码等
pdu.setVersion(SnmpAPI.SNMP_VERSION_3);
}
pdu.setTimeout(Integer.parseInt(getText(timeout)));
pdu.setRetries(Integer.parseInt(getText(retries)));
// SnmpOID oid = new SnmpOID("1.3.6.1.2.1.1.1.0");
// SnmpOID oid = new SnmpOID((SnmpOID)(getText(oid)));
// pdu.addNull(oid);
String oidstr = getText(oid);
String str[] = oidstr.split("\\.");
int a[] = new int[9];
for(int i=0; i
a[i] = Integer.parseInt(str[i]);
}
//int a[] = { 1, 3, 6, 1, 2, 1, 1, 1, 0 };
SnmpOID oid = new SnmpOID(a);
pdu.addNull(oid);
SnmpPDU resp = null;
try {
session.open();
resp = session.syncSend(pdu);
} catch (SnmpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e);
}
if (resp != null) {
// return varBinds string
UDPProtocolOptions options = (UDPProtocolOptions) resp.getProtocolOptions();
String resultString = "Response PDU received from " + options.getRemoteAddress() + ".\n"; // No I18N
resultString = resultString + "Community = " + resp.getCommunity() + ".\n\n"; // No I18N
if (resp.getErrstat() == 0) {
resultString = resultString + "VARBINDS :\n\n"; // No I18N
resultString = resultString + resp.printVarBinds();
} else {
// Check for error in response
resultString = resultString + resp.getError();
}
Message msg = new Message();
msg.what = 1000;
msg.obj = resultString;
myHandler.sendMessage(msg);
if(session != null) {
session.close();
}
if(api != null) {
api.close();
}
} else {
String errorString = "Request timed out to: " + getText(target); // No I18N
Message msg = new Message();
msg.what = 1000;
msg.obj = errorString;
myHandler.sendMessage(msg);
if(session != null) {
session.close();
}
if(api != null) {
api.close();
}
}
}
}).start();
}
做到这份上,跟华为的老师联系上了,他们跟我说年前比较忙,拖到年后才能详谈需求业务,我也暂时搁置此项目,去做别的事了。也许有新的情况,我会写个第二篇,希望对大家有帮助。
snmp有android代理端吗,Android实现snmp协议(1)相关推荐
- android 代理 wifi热点,android wifi热点默认网关
原贴:https://blog.csdn.net/jingzitakk66/article/details/89146696 项目需求,android端创建热点,电脑端连接此热点后用socket实现数 ...
- Android 代理 wss,打android包使用wss协议进行websocket连接出错
Creator version?(版本号) cocos creator v2.01 Affected platform?(受影响的平台) Android How to reproduce?(如何重现) ...
- android 绑定端口号,android 获取IP端口号等地址
``` public static String getInNetIp(Context context) { //获取wifi服务WifiManager wifiManager = (WifiMana ...
- linux 设置代理_用Android手机做电脑的HTTP代理服务器
在手机端创建一个 HTTP 代理可以让电脑共享手机网络. 手机端 在 Play Store 里选择 Termux 安装. 其它备选 app : GNURoot Debian 等. 打开 Termux ...
- erlang-百度云推送Android服务端功能实现-erlang
百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Androi ...
- Android 代理自动配置PAC研究
Android 代理自动配置PAC研究 环境 小米6 MIUI9.2 Android7.1.1 MacOS 10.13.3 Charles 4.0.2 什么是PAC PAC,全称Proxy Auto ...
- 腾讯互动白板+即时通讯+实时音视频,Android学生端接入
腾讯互动白板+即时通讯+实时音视频,Android学生端接入 一.简介 线上教学方案:腾讯云互动白板(Tencent Interactive Whiteboard,TIW)+即时通信(Instant ...
- android从服务端获取json解析显示在客户端上面,Android服务端获取json解析显示在客户端上面.doc...
Android服务端获取json解析显示在客户端上面 Android从服务端获取json解析显示在客户端上面 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比 ...
- 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )
文章目录 前言 一.Android 端可执行程序的 main 函数操作 二.Android 端 TCP 协议服务器建立 三.Android 端接收 PC 端传来的数据 四.博客资源 前言 本篇博客重点 ...
最新文章
- Linux的Unicon资料
- 大致了解写java聊天器所需要的技术
- Posix多线程编程—线程属性
- 确定一组矩形是否有两个重叠的算法
- c++11-Varadic Templates右值引用lamada
- 『设计模式』设计模式--模板方法模式
- 怎么看另一个电脑端口是否通_谁一个人睡觉另一个看看夫妻的睡眠习惯
- python queue windows_python Queue模块
- java 匿名初始化_Java:双括号初始化 /匿名内部类初始化法
- SAP License:FI权限需要控制利润中心
- C语言寻找第k小元素,小技巧——查找第k小的元素
- 线段树(区间更新以及统计片段颜色)
- 如何显示或隐藏mac文件后缀名
- mset redis_Redis MSET 命令-Redis MSET命令详解教程-Redis MSET使用案例-嗨客网
- 更新win7原版镜像中添加usb3.0驱动
- Python9--面向对象编程
- DOOM3源码分析相关文章集合
- Windows安全更新出现0x800f081f错误解决方案
- 【PHP】PHP与Web界面交互
- Linux下的聊天软件