您的位置:首页 > 其它

使用snmp协议获取MIB的数据

2017-07-12 14:52 316 查看
公司最近的需求是获取打印机的配件信息,常规的TCP/IP协议获取不到数据,机器信息存放在MIB数据库中,需要用snmp协议读取机器中的信息,网络上查询了几天终于有点头绪了

废话不多说,直接贴代码

public class MainActivity extends AppCompatActivity {

private TextView textView;
private final static String REMOTE_ADDRESS = "udp:172.25.73.122/161";
public static final int UPDATE_TEXT = 1;

private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_TEXT:
PDU response= (PDU) msg.obj;
textView.setText(response+"");
break;
default:
break;
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.token);
try {
getData();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

}

private void getData() throws Exception {
new Thread(){
@Override
public void run() {
Address remoteAddress = GenericAddress.parse(REMOTE_ADDRESS);
System.out.println("SNMP地址:" + REMOTE_ADDRESS + ";有效:" + remoteAddress.isValid());
TransportMapping transportMapping = null;
try {
transportMapping = new DefaultUdpTransportMapping();
} catch (IOException e) {
e.printStackTrace();
}
Snmp snmp = new Snmp(transportMapping);
try {
snmp.listen();
} catch (IOException e) {
e.printStackTrace();
}

//构造发送目标
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(remoteAddress);
target.setVersion(SnmpConstants.version2c);
target.setRetries(10);
target.setTimeout(1500);

//构造发送内容
PDU pdu = new PDU();
OID oid = new OID("1.3.6.1.4.1.367.3.2.1.2.2.18");
pdu.add(new VariableBinding(oid));
pdu.setType(PDU.GETNEXT);

//异步监听响应
ResponseListener responseListener = new ResponseListener() {
@Override
public void onResponse(ResponseEvent event) {
((Snmp)event.getSource()).cancel(event.getRequest(),this);
PDU response = event.getResponse();
PDU request = event.getRequest();
if(response == null){
System.out.println("请求超时:" + response + ",请求的内容:" + request);
}else {
System.out.println("获取到信息:" + response);
Message msg=handler.obtainMessage();
msg.obj=response;
msg.what=UPDATE_TEXT;
handler.sendMessage(msg);
}
}
};

//发送
try {
snmp.send(pdu,target,null,responseListener);
} catch (IOException e) {
e.printStackTrace();
}
//由于是异步获取信息,在这里需要程序不能结束运行,否则接收不到异步获取的消息。
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
记得加上网络权限!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: