一、SNMP简介

SNMP指的是简单网络管理协议。它属于TCP/IP五层协议中的应用层协议。它提供了一种简单和方便的模式来管理网络中的各个元素。这里的元素就是各个被管理的对象,可以是因特网中的某个硬件,比如网卡,也可以是某些硬件和软件的配置参数的集合。由于SNMP协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为广泛的网管协议。

SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。

SNMP管理站和SNMP代理之间是松散耦合。他们之间的通信是通过UDP协议完成的。一般情况下,SNMP管理站通过UDP协议向SNMP代理发送各种命令,当SNMP代理收到命令后,返回SNMP管理站需要的参数。但是当SNMP代理检测到网络元素异常的时候,也可以主动向SNMP管理站发送消息,通告当前异常状况。

SNMP协议于1988年发布。到目前一共经历了V1,V2,V3三个版本。其中V1已经被废弃,而V2c虽然没有能够成为正式标准,但是已经被很多厂家所接受,V3目前是因特网的正式标准。与V1相比,V2,V3更能适应大规模的网络管理,而且在安全方面有了较大的改进。

二一、Win7开启SNMP服务

通过SNMP监控Windows主机需要在被监控的服务器上安装简单网络管理协议(SNMP)的Windows组件,以Windows 7系统为例:
首先,在控制面板中找到“卸载程序”;

在弹出的窗口中单击“打开或关闭Windows功能”;

勾选弹出窗口中的“简单网络管理协议(SNMP)”项后单击“确定”并根据提示完成安装即可。

完成SNMP服务的安装后,右键单击“计算机”选择“管理”

在弹出的“计算机管理”窗口中左侧导航栏中找到“服务”,并在右侧找到“SNMP Service”项;

鼠标双击“SNMP Service”选项,在弹出的窗口中切换到“安全”选项卡中,如上图添加“接受的社区名称”和接收那些主机发出的SNMP数据包。

“接受的社区名称”是自己定义的任意字符都可以,接收那些主机发出的SNMP数据包定义成你的Nagios服务器即可。到这里被监控端的Windows主机的SNMP服务就配置完成了。

二二、Linux

1、检查是否有SNMP服务,若没有,请先安装

service snmpd status  #查看是否安装snmp

yum install -y net-snmp* #若没安装,则安装

2、先编辑Snmp的配置文件,设置安全的验证方式

vi /etc/snmp/snmpd.conf

3、设置完毕,开关SNMP

service snmpd start

service snmpd stop

4、设置SNMP开机自动启动

chkconfig snmpd on

chkconfig snmpd off

5、增强的SNMP安全性

/etc/sysconfig/iptables 中

iptables -A INPUT  -p udp -s 192.168.2.18 --dport 161 -j ACCEPT

service iptables save

以上做的目的,就是只让指定的监控服务器(IP)才能与您的SNMP服务建立连接。

三、snmp4j例子

准备工作:snmp4j的jar包可以在它的官方网站http://www.snmp4j.org/上下载

1、获取CPU利用率方法

[java] view plaincopy
  1. //获取cpu使用率
  2. public static void collectCPU() {
  3. TransportMapping transport = null ;
  4. Snmp snmp = null ;
  5. CommunityTarget target;
  6. String[] oids = {"1.3.6.1.2.1.25.3.3.1.2"};
  7. try {
  8. transport = new DefaultUdpTransportMapping();
  9. snmp = new Snmp(transport);//创建snmp
  10. snmp.listen();//监听消息
  11. target = new CommunityTarget();
  12. target.setCommunity(new OctetString("public"));
  13. target.setRetries(2);
  14. target.setAddress(GenericAddress.parse("udp:127.0.0.1/161"));
  15. target.setTimeout(8000);
  16. target.setVersion(SnmpConstants.version2c);
  17. TableUtils tableUtils = new TableUtils(snmp, new PDUFactory() {
  18. @Override
  19. public PDU createPDU(Target arg0) {
  20. PDU request = new PDU();
  21. request.setType(PDU.GET);
  22. return request;
  23. }
  24. });
  25. OID[] columns = new OID[oids.length];
  26. for (int i = 0; i < oids.length; i++)
  27. columns[i] = new OID(oids[i]);
  28. List<TableEvent> list = tableUtils.getTable(target, columns, null, null);
  29. if(list.size()==1 && list.get(0).getColumns()==null){
  30. System.out.println(" null");
  31. }else{
  32. int percentage = 0;
  33. for(TableEvent event : list){
  34. VariableBinding[] values = event.getColumns();
  35. if(values != null)
  36. percentage += Integer.parseInt(values[0].getVariable().toString());
  37. }
  38. System.out.println("CPU利用率为:"+percentage/list.size()+"%");
  39. }
  40. } catch(Exception e){
  41. e.printStackTrace();
  42. }finally{
  43. try {
  44. if(transport!=null)
  45. transport.close();
  46. if(snmp!=null)
  47. snmp.close();
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. }

2、获取内存信息方法

[java] view plaincopy
  1. //获取内存相关信息
  2. public static void collectMemory() {
  3. TransportMapping transport = null ;
  4. Snmp snmp = null ;
  5. CommunityTarget target;
  6. String[] oids = {"1.3.6.1.2.1.25.2.3.1.2",  //type 存储单元类型
  7. "1.3.6.1.2.1.25.2.3.1.3",  //descr
  8. "1.3.6.1.2.1.25.2.3.1.4",  //unit 存储单元大小
  9. "1.3.6.1.2.1.25.2.3.1.5",  //size 总存储单元数
  10. "1.3.6.1.2.1.25.2.3.1.6"}; //used 使用存储单元数;
  11. String PHYSICAL_MEMORY_OID = "1.3.6.1.2.1.25.2.1.2";//物理存储
  12. String VIRTUAL_MEMORY_OID = "1.3.6.1.2.1.25.2.1.3"; //虚拟存储
  13. try {
  14. transport = new DefaultUdpTransportMapping();
  15. snmp = new Snmp(transport);//创建snmp
  16. snmp.listen();//监听消息
  17. target = new CommunityTarget();
  18. target.setCommunity(new OctetString("public"));
  19. target.setRetries(2);
  20. target.setAddress(GenericAddress.parse("udp:127.0.0.1/161"));
  21. target.setTimeout(8000);
  22. target.setVersion(SnmpConstants.version2c);
  23. TableUtils tableUtils = new TableUtils(snmp, new PDUFactory() {
  24. @Override
  25. public PDU createPDU(Target arg0) {
  26. PDU request = new PDU();
  27. request.setType(PDU.GET);
  28. return request;
  29. }
  30. });
  31. OID[] columns = new OID[oids.length];
  32. for (int i = 0; i < oids.length; i++)
  33. columns[i] = new OID(oids[i]);
  34. @SuppressWarnings("unchecked")
  35. List<TableEvent> list = tableUtils.getTable(target, columns, null, null);
  36. if(list.size()==1 && list.get(0).getColumns()==null){
  37. System.out.println(" null");
  38. }else{
  39. for(TableEvent event : list){
  40. VariableBinding[] values = event.getColumns();
  41. if(values == null) continue;
  42. int unit = Integer.parseInt(values[2].getVariable().toString());//unit 存储单元大小
  43. int totalSize = Integer.parseInt(values[3].getVariable().toString());//size 总存储单元数
  44. int usedSize = Integer.parseInt(values[4].getVariable().toString());//used  使用存储单元数
  45. String oid = values[0].getVariable().toString();
  46. if (PHYSICAL_MEMORY_OID.equals(oid)){
  47. System.out.println("PHYSICAL_MEMORY----->物理内存大小:"+(long)totalSize * unit/(1024*1024*1024)+"G   内存使用率为:"+(long)usedSize*100/totalSize+"%");
  48. }else if (VIRTUAL_MEMORY_OID.equals(oid)) {
  49. System.out.println("VIRTUAL_MEMORY----->虚拟内存大小:"+(long)totalSize * unit/(1024*1024*1024)+"G   内存使用率为:"+(long)usedSize*100/totalSize+"%");
  50. }
  51. }
  52. }
  53. } catch(Exception e){
  54. e.printStackTrace();
  55. }finally{
  56. try {
  57. if(transport!=null)
  58. transport.close();
  59. if(snmp!=null)
  60. snmp.close();
  61. } catch (IOException e) {
  62. e.printStackTrace();
  63. }
  64. }
  65. }

3、获取磁盘信息方法

[java] view plaincopy
  1. //获取磁盘相关信息
  2. public static void collectDisk() {
  3. TransportMapping transport = null ;
  4. Snmp snmp = null ;
  5. CommunityTarget target;
  6. String DISK_OID = "1.3.6.1.2.1.25.2.1.4";
  7. String[] oids = {"1.3.6.1.2.1.25.2.3.1.2",  //type 存储单元类型
  8. "1.3.6.1.2.1.25.2.3.1.3",  //descr
  9. "1.3.6.1.2.1.25.2.3.1.4",  //unit 存储单元大小
  10. "1.3.6.1.2.1.25.2.3.1.5",  //size 总存储单元数
  11. "1.3.6.1.2.1.25.2.3.1.6"}; //used 使用存储单元数;
  12. try {
  13. transport = new DefaultUdpTransportMapping();
  14. snmp = new Snmp(transport);//创建snmp
  15. snmp.listen();//监听消息
  16. target = new CommunityTarget();
  17. target.setCommunity(new OctetString("public"));
  18. target.setRetries(2);
  19. target.setAddress(GenericAddress.parse("udp:127.0.0.1/161"));
  20. target.setTimeout(8000);
  21. target.setVersion(SnmpConstants.version2c);
  22. TableUtils tableUtils = new TableUtils(snmp, new PDUFactory() {
  23. @Override
  24. public PDU createPDU(Target arg0) {
  25. PDU request = new PDU();
  26. request.setType(PDU.GET);
  27. return request;
  28. }
  29. });
  30. OID[] columns = new OID[oids.length];
  31. for (int i = 0; i < oids.length; i++)
  32. columns[i] = new OID(oids[i]);
  33. @SuppressWarnings("unchecked")
  34. List<TableEvent> list = tableUtils.getTable(target, columns, null, null);
  35. if(list.size()==1 && list.get(0).getColumns()==null){
  36. System.out.println(" null");
  37. }else{
  38. for(TableEvent event : list){
  39. VariableBinding[] values = event.getColumns();
  40. if(values == null ||!DISK_OID.equals(values[0].getVariable().toString()))
  41. continue;
  42. int unit = Integer.parseInt(values[2].getVariable().toString());//unit 存储单元大小
  43. int totalSize = Integer.parseInt(values[3].getVariable().toString());//size 总存储单元数
  44. int usedSize = Integer.parseInt(values[4].getVariable().toString());//used  使用存储单元数
  45. System.out.println(getChinese(values[1].getVariable().toString())+"   磁盘大小:"+(long)totalSize*unit/(1024*1024*1024)+"G   磁盘使用率为:"+(long)usedSize*100/totalSize+"%");
  46. }
  47. }
  48. } catch(Exception e){
  49. e.printStackTrace();
  50. }finally{
  51. try {
  52. if(transport!=null)
  53. transport.close();
  54. if(snmp!=null)
  55. snmp.close();
  56. } catch (IOException e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. }

4、获取服务器进程信息方法

[java] view plaincopy
  1. //服务器进程集合信息
  2. public static void collectProcess() {
  3. TransportMapping transport = null ;
  4. Snmp snmp = null ;
  5. CommunityTarget target;
  6. String[] oids =
  7. {"1.3.6.1.2.1.25.4.2.1.1",  //index
  8. "1.3.6.1.2.1.25.4.2.1.2",  //name
  9. "1.3.6.1.2.1.25.4.2.1.4",  //run path
  10. "1.3.6.1.2.1.25.4.2.1.6",  //type
  11. "1.3.6.1.2.1.25.5.1.1.1",  //cpu
  12. "1.3.6.1.2.1.25.5.1.1.2"}; //memory
  13. try {
  14. transport = new DefaultUdpTransportMapping();
  15. snmp = new Snmp(transport);
  16. snmp.listen();
  17. target = new CommunityTarget();
  18. target.setCommunity(new OctetString("public"));
  19. target.setRetries(2);
  20. target.setAddress(GenericAddress.parse("udp:127.0.0.1/161"));
  21. target.setTimeout(8000);
  22. target.setVersion(SnmpConstants.version2c);
  23. TableUtils tableUtils = new TableUtils(snmp, new PDUFactory() {
  24. @Override
  25. public PDU createPDU(Target arg0) {
  26. PDU request = new PDU();
  27. request.setType(PDU.GET);
  28. return request;
  29. }
  30. });
  31. OID[] columns = new OID[oids.length];
  32. for (int i = 0; i < oids.length; i++)
  33. columns[i] = new OID(oids[i]);
  34. @SuppressWarnings("unchecked")
  35. List<TableEvent> list = tableUtils.getTable(target, columns, null, null);
  36. if(list.size()==1 && list.get(0).getColumns()==null){
  37. System.out.println(" null");
  38. }else{
  39. for(TableEvent event : list){
  40. VariableBinding[] values = event.getColumns();
  41. if(values == null) continue;
  42. String name = values[1].getVariable().toString();//name
  43. String cpu = values[4].getVariable().toString();//cpu
  44. String memory = values[5].getVariable().toString();//memory
  45. String path = values[2].getVariable().toString();//path
  46. System.out.println("name--->"+name+"  cpu--->"+cpu+"  memory--->"+memory+"  path--->"+path);
  47. }
  48. }
  49. } catch(Exception e){
  50. e.printStackTrace();
  51. }finally{
  52. try {
  53. if(transport!=null)
  54. transport.close();
  55. if(snmp!=null)
  56. snmp.close();
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. }

5、获取服务器系统服务方法

[java] view plaincopy
  1. //服务器系统服务集合
  2. public static void collectService() {
  3. TransportMapping transport = null ;
  4. Snmp snmp = null ;
  5. CommunityTarget target;
  6. String[] oids =
  7. {"1.3.6.1.4.1.77.1.2.3.1.1"};
  8. try {
  9. transport = new DefaultUdpTransportMapping();
  10. snmp = new Snmp(transport);
  11. snmp.listen();
  12. target = new CommunityTarget();
  13. target.setCommunity(new OctetString("public"));
  14. target.setRetries(2);
  15. target.setAddress(GenericAddress.parse("udp:127.0.0.1/161"));
  16. target.setTimeout(8000);
  17. target.setVersion(SnmpConstants.version2c);
  18. TableUtils tableUtils = new TableUtils(snmp, new PDUFactory() {
  19. @Override
  20. public PDU createPDU(Target arg0) {
  21. PDU request = new PDU();
  22. request.setType(PDU.GET);
  23. return request;
  24. }
  25. });
  26. OID[] columns = new OID[oids.length];
  27. for (int i = 0; i < oids.length; i++)
  28. columns[i] = new OID(oids[i]);
  29. @SuppressWarnings("unchecked")
  30. List<TableEvent> list = tableUtils.getTable(target, columns, null, null);
  31. if(list.size()==1 && list.get(0).getColumns()==null){
  32. System.out.println(" null");
  33. }else{
  34. for(TableEvent event : list){
  35. VariableBinding[] values = event.getColumns();
  36. if(values == null) continue;
  37. String name = values[0].getVariable().toString();//name
  38. System.out.println("名称--->"+getChinese(name));//中文乱码,需要转为utf-8编码
  39. }
  40. }
  41. } catch(Exception e){
  42. e.printStackTrace();
  43. }finally{
  44. try {
  45. if(transport!=null)
  46. transport.close();
  47. if(snmp!=null)
  48. snmp.close();
  49. } catch (IOException e) {
  50. e.printStackTrace();
  51. }
  52. }
  53. }

6、获取接口信息方法

[java] view plaincopy
  1. //服务器接口集合
  2. public static void collectInterface() {
  3. TransportMapping transport = null ;
  4. Snmp snmp = null ;
  5. CommunityTarget target;
  6. String[] IF_OIDS =
  7. {"1.3.6.1.2.1.2.2.1.1",  //Index
  8. "1.3.6.1.2.1.2.2.1.2",  //descr
  9. "1.3.6.1.2.1.2.2.1.3",  //type
  10. "1.3.6.1.2.1.2.2.1.5",  //speed
  11. "1.3.6.1.2.1.2.2.1.6",  //mac
  12. "1.3.6.1.2.1.2.2.1.7",  //adminStatus
  13. "1.3.6.1.2.1.2.2.1.8",  //operStatus
  14. "1.3.6.1.2.1.2.2.1.10", //inOctets
  15. "1.3.6.1.2.1.2.2.1.16", //outOctets
  16. "1.3.6.1.2.1.2.2.1.14", //inError
  17. "1.3.6.1.2.1.2.2.1.20", //outError
  18. "1.3.6.1.2.1.2.2.1.13", //inDiscard
  19. "1.3.6.1.2.1.2.2.1.19", //outDiscard
  20. "1.3.6.1.2.1.2.2.1.11", //inUcastPkts
  21. "1.3.6.1.2.1.2.2.1.17", //outUcastPkts
  22. "1.3.6.1.2.1.2.2.1.12", //inNUcastPkts
  23. "1.3.6.1.2.1.2.2.1.18"};//outNUcastPkts
  24. String[] IP_OIDS =
  25. {"1.3.6.1.2.1.4.20.1.1", //ipAdEntAddr
  26. "1.3.6.1.2.1.4.20.1.2", //ipAdEntIfIndex
  27. "1.3.6.1.2.1.4.20.1.3"};//ipAdEntNetMask
  28. try {
  29. transport = new DefaultUdpTransportMapping();
  30. snmp = new Snmp(transport);
  31. snmp.listen();
  32. target = new CommunityTarget();
  33. target.setCommunity(new OctetString("public"));
  34. target.setRetries(2);
  35. target.setAddress(GenericAddress.parse("udp:127.0.0.1/161"));
  36. target.setTimeout(8000);
  37. target.setVersion(SnmpConstants.version2c);
  38. TableUtils tableUtils = new TableUtils(snmp, new PDUFactory() {
  39. @Override
  40. public PDU createPDU(Target arg0) {
  41. PDU request = new PDU();
  42. request.setType(PDU.GET);
  43. return request;
  44. }
  45. });
  46. OID[] columns = new OID[IF_OIDS.length];
  47. for (int i = 0; i < IF_OIDS.length; i++)
  48. columns[i] = new OID(IF_OIDS[i]);
  49. @SuppressWarnings("unchecked")
  50. List<TableEvent> list = tableUtils.getTable(target, columns, null, null);
  51. if(list.size()==1 && list.get(0).getColumns()==null){
  52. System.out.println(" null");
  53. }else{
  54. for(TableEvent event : list){
  55. VariableBinding[] values = event.getColumns();
  56. if(values == null) continue;
  57. System.out.println("interface ---Index:"+values[0].getVariable().toString()+"  descr:"+getChinese(values[1].getVariable().toString())+"  type:"+values[2].getVariable().toString()+" speed:"+values[3].getVariable().toString()+" mac:"+getChinese(values[4].getVariable().toString())+" adminStatus:"+values[5].getVariable().toString()+"  operStatus:"+values[6].getVariable().toString());
  58. }
  59. }
  60. //获取ip
  61. OID[] ipcolumns = new OID[IP_OIDS.length];
  62. for (int i = 0; i < IP_OIDS.length; i++)
  63. ipcolumns[i] = new OID(IP_OIDS[i]);
  64. @SuppressWarnings("unchecked")
  65. List<TableEvent> iplist = tableUtils.getTable(target, ipcolumns, null, null);
  66. if(iplist.size()==1 && iplist.get(0).getColumns()==null){
  67. System.out.println(" null");
  68. }else{
  69. for(TableEvent event : iplist){
  70. VariableBinding[] values = event.getColumns();
  71. if(values == null) continue;
  72. System.out.println(" IP--->ipAdEntAddr:"+values[0].getVariable().toString()+"   ipAdEntIfIndex:"+values[1].getVariable().toString()+"   ipAdEntNetMask:"+values[2].getVariable().toString());
  73. }
  74. }
  75. } catch(Exception e){
  76. e.printStackTrace();
  77. }finally{
  78. try {
  79. if(transport!=null)
  80. transport.close();
  81. if(snmp!=null)
  82. snmp.close();
  83. } catch (IOException e) {
  84. e.printStackTrace();
  85. }
  86. }
  87. }

7、获取端口信息方法

[java] view plaincopy
  1. //服务器端口集合
  2. public static void collectPort() {
  3. TransportMapping transport = null ;
  4. Snmp snmp = null ;
  5. CommunityTarget target;
  6. String[] TCP_CONN = {"1.3.6.1.2.1.6.13.1.1", //status
  7. "1.3.6.1.2.1.6.13.1.3"}; //port
  8. String[] UDP_CONN = {"1.3.6.1.2.1.7.5.1.2"};
  9. try {
  10. transport = new DefaultUdpTransportMapping();
  11. snmp = new Snmp(transport);
  12. snmp.listen();
  13. target = new CommunityTarget();
  14. target.setCommunity(new OctetString("public"));
  15. target.setRetries(2);
  16. target.setAddress(GenericAddress.parse("udp:127.0.0.1/161"));
  17. target.setTimeout(8000);
  18. target.setVersion(SnmpConstants.version2c);
  19. TableUtils tableUtils = new TableUtils(snmp, new PDUFactory() {
  20. @Override
  21. public PDU createPDU(Target arg0) {
  22. PDU request = new PDU();
  23. request.setType(PDU.GET);
  24. return request;
  25. }
  26. });
  27. //获取TCP 端口
  28. OID[] columns = new OID[TCP_CONN.length];
  29. for (int i = 0; i < TCP_CONN.length; i++)
  30. columns[i] = new OID(TCP_CONN[i]);
  31. @SuppressWarnings("unchecked")
  32. List<TableEvent> list = tableUtils.getTable(target, columns, null, null);
  33. if(list.size()==1 && list.get(0).getColumns()==null){
  34. System.out.println(" null");
  35. }else{
  36. for(TableEvent event : list){
  37. VariableBinding[] values = event.getColumns();
  38. if(values == null) continue;
  39. int status = Integer.parseInt(values[0].getVariable().toString());
  40. System.out.println("status--->"+status+"   TCP_port--->"+values[1].getVariable().toString());
  41. }
  42. }
  43. //获取udp 端口
  44. OID[] udpcolumns = new OID[UDP_CONN.length];
  45. for (int i = 0; i < UDP_CONN.length; i++)
  46. udpcolumns[i] = new OID(UDP_CONN[i]);
  47. @SuppressWarnings("unchecked")
  48. List<TableEvent> udplist = tableUtils.getTable(target, udpcolumns, null, null);
  49. if(udplist.size()==1 && udplist.get(0).getColumns()==null){
  50. System.out.println(" null");
  51. }else{
  52. for(TableEvent event : udplist){
  53. VariableBinding[] values = event.getColumns();
  54. if(values == null) continue;
  55. String name = values[0].getVariable().toString();//name
  56. System.out.println("UDP_port--->"+name);
  57. }
  58. }
  59. } catch(Exception e){
  60. e.printStackTrace();
  61. }finally{
  62. try {
  63. if(transport!=null)
  64. transport.close();
  65. if(snmp!=null)
  66. snmp.close();
  67. } catch (IOException e) {
  68. e.printStackTrace();
  69. }
  70. }
  71. }

8、获取安装的软件信息方法

[java] view plaincopy
  1. //服务器安装软件集合
  2. public static void collectSoft() {
  3. TransportMapping transport = null ;
  4. Snmp snmp = null ;
  5. CommunityTarget target;
  6. String[] oids =
  7. {   "1.3.6.1.2.1.25.6.3.1.2",  //software
  8. "1.3.6.1.2.1.25.6.3.1.4",  //type
  9. "1.3.6.1.2.1.25.6.3.1.5"}; //install date
  10. try {
  11. transport = new DefaultUdpTransportMapping();
  12. snmp = new Snmp(transport);
  13. snmp.listen();
  14. target = new CommunityTarget();
  15. target.setCommunity(new OctetString("public"));
  16. target.setRetries(2);
  17. target.setAddress(GenericAddress.parse("udp:127.0.0.1/161"));
  18. target.setTimeout(8000);
  19. target.setVersion(SnmpConstants.version2c);
  20. TableUtils tableUtils = new TableUtils(snmp, new PDUFactory() {
  21. @Override
  22. public PDU createPDU(Target arg0) {
  23. PDU request = new PDU();
  24. request.setType(PDU.GET);
  25. return request;
  26. }
  27. });
  28. OID[] columns = new OID[oids.length];
  29. for (int i = 0; i < oids.length; i++)
  30. columns[i] = new OID(oids[i]);
  31. @SuppressWarnings("unchecked")
  32. List<TableEvent> list = tableUtils.getTable(target, columns, null, null);
  33. if(list.size()==1 && list.get(0).getColumns()==null){
  34. System.out.println(" null");
  35. }else{
  36. for(TableEvent event : list){
  37. VariableBinding[] values = event.getColumns();
  38. if(values == null) continue;
  39. String software = values[0].getVariable().toString();//software
  40. String type = values[1].getVariable().toString();//type
  41. String date = values[2].getVariable().toString();//date
  42. System.out.println("软件名称--->"+getChinese(software)+"  type--->"+type+"  安装时间--->"+hexToDateTime(date.replace("'", "")));
  43. }
  44. }
  45. } catch(Exception e){
  46. e.printStackTrace();
  47. }finally{
  48. try {
  49. if(transport!=null)
  50. transport.close();
  51. if(snmp!=null)
  52. snmp.close();
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. }

9、其他方法

[java] view plaincopy
  1. /**
  2. * 获取磁盘的中文名字
  3. * 解决snmp4j中文乱码问题
  4. */
  5. public static String getChinese(String octetString){
  6. if(octetString == null || "".equals(octetString)
  7. || "null".equalsIgnoreCase(octetString)) return "";
  8. try{
  9. String[] temps = octetString.split(":");
  10. if(temps.length < COLON_SIZE)
  11. return octetString;
  12. byte[] bs = new byte[temps.length];
  13. for(int i=0;i<temps.length;i++)
  14. bs[i] = (byte)Integer.parseInt(temps[i],16);
  15. return new String(bs,"GB2312");
  16. }catch(Exception e){
  17. return null;
  18. }
  19. }
  20. /**
  21. * 将16进制的时间转换成标准的时间格式
  22. */
  23. private static String hexToDateTime(String hexString) {
  24. if(hexString == null || "".equals(hexString))
  25. return "";
  26. String dateTime = "";
  27. try {
  28. byte[] values = OctetString.fromHexString(hexString).getValue();
  29. int year, month, day, hour, minute;
  30. year = values[0] * 256 + 256 + values[1];
  31. month = values[2];
  32. day = values[3];
  33. hour = values[4];
  34. minute = values[5];
  35. char format_str[] = new char[22];
  36. int index = 3;
  37. int temp = year;
  38. for (; index >= 0; index--) {
  39. format_str[index] = (char) (48 + (temp - temp / 10 * 10));
  40. temp /= 10;
  41. }
  42. format_str[4] = '-';
  43. index = 6;
  44. temp = month;
  45. for (; index >= 5; index--) {
  46. format_str[index] = (char) (48 + (temp - temp / 10 * 10));
  47. temp /= 10;
  48. }
  49. format_str[7] = '-';
  50. index = 9;
  51. temp = day;
  52. for (; index >= 8; index--) {
  53. format_str[index] = (char) (48 + (temp - temp / 10 * 10));
  54. temp /= 10;
  55. }
  56. format_str[10] = ' ';
  57. index = 12;
  58. temp = hour;
  59. for (; index >= 11; index--) {
  60. format_str[index] = (char) (48 + (temp - temp / 10 * 10));
  61. temp /= 10;
  62. }
  63. format_str[13] = ':';
  64. index = 15;
  65. temp = minute;
  66. for (; index >= 14; index--) {
  67. format_str[index] = (char) (48 + (temp - temp / 10 * 10));
  68. temp /= 10;
  69. }
  70. dateTime = new String(format_str,0,format_str.length).substring(0, 16);
  71. } catch (Exception e) {
  72. //LogFactory.getLog(getClass()).error(e);
  73. }
  74. return dateTime;
  75. }

转载自https://blog.csdn.net/xumajie88/article/details/18406763

snmp4j介绍及api使用相关推荐

  1. Snmp学习总结——SNMP4J介绍

    一.SNMP4J介绍 SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应.SNMP4J是纯面向对象设计与SNMP++(用C++实现SNMP ...

  2. ​​​​​​​Snmp学习总结(五)——SNMP4J介绍

    Snmp学习总结(五)--SNMP4J介绍 一.SNMP4J介绍 SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应.SNMP4J是纯面向 ...

  3. ElementUI官方介绍 开发API文档链接

    ElementUI官方介绍 开发API文档 http://element-cn.eleme.io/#/zh-CN/component/quickstart

  4. Linux--自旋锁(介绍及API简介)

    Linux--自旋锁(介绍及API简介) 1.概念 2.自旋锁的使用 2.1.自旋锁 API 函数 2.2.自旋锁的死锁情况 1. 2. 2.1.解决方式 自旋锁使用注意事项 1.概念 何谓自旋锁?它 ...

  5. 使用MLX90640自制红外热像仪(一):MLX90640介绍与API库移植

      平时工作的时候会遇到如下场景: 新焊接好的板子,通电后发现电流异常,需要看下板子上哪里发热异常. 需要监控某个器件(比如三极管.MOS)的温度,以防过热烧掉. 测量温升.   因此需要一个红外热像 ...

  6. Android Animation学习(一) Property Animation原理介绍和API简介

    Android Animation学习(一) Property Animation介绍 Android Animation Android framework提供了两种动画系统: property a ...

  7. IBM Websphere Premises Server V6.1入门介绍和API实践

    RFID技术介绍 RFID(Radio Frequency Identification)是一种非接触的自动识别技术,其基本原理是利用射频信号和空间耦合(电感或电磁耦合)传输特性,实现对被识别物品的自 ...

  8. Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】

    2019独角兽企业重金招聘Python工程师标准>>> 什么是Session Session 是另一种记录浏览器状态的机制.不同的是Cookie保存在浏览器中,Session保存在服 ...

  9. Revit SDK 介绍:API Sketched Winder Stairs 创建扇形踏步楼梯

    前言 SDK 里面一个复杂的创建楼梯的例子. 程序逻辑 选择模型线,如果是两条,这是L行的楼梯,如果选中三条,则是U行的楼梯: 将 UI 界面的参数转化为内部的参数 创建扇形踏步楼梯 选择模型线 入口 ...

最新文章

  1. c多线程并发处理方式_ElasticSearch 并发的处理方式:锁和版本控制
  2. VBS递归遍历文件夹
  3. 数学建模学习笔记——多元回归
  4. flutter 应用场景_【Flutter 1-12】Flutter手把手教程Dart语言——什么是泛型和泛型的使用场景...
  5. mysql 查看索引命中_请问下如何在Mysql中where与orderBy后在命中索引?
  6. 印度软件开发人员_我如何辍学并在19岁时在印度找到了一份开发人员的工作
  7. ABI (应用程序二进制接口)
  8. Glide4.0源码全解析(一),GlideAPP和.with()方法背后的故事
  9. abb变频器580系列改中文_ABB变频器ACS580系列
  10. smartdns 部署最佳实践
  11. 经纬度与大地坐标相互转换
  12. ATTiny85 Arduino开发环境搭建及使用
  13. 浙大开源lidar_imu_calib源码安装过程
  14. 鸿蒙三千法则排名,三千法则名称大全_十大最强法则
  15. 大学计算机excel高级筛选,excel高级筛选的使用方法(入门 进阶 高级)
  16. juqery addClass方法失效问题
  17. CSS SVG开关按钮切换网页白天和夜晚
  18. CITA 技术白皮书
  19. 韩顺平坦克大战项目0.2(画坦克并且移动)
  20. 单反相机镜头焦距与被摄物体的实际距

热门文章

  1. SQL 数据库的自动备份(Procedures实现)
  2. Jmeter响应断言介绍
  3. JS常见的几种数组去重方法
  4. 2.15.9.menuconfig的实验学习思路
  5. log4j2配置文件log4j2.xml
  6. 一些html5和css3的一些常见面试题
  7. openssl生成私钥公钥的步骤
  8. 递归--递推之组合数
  9. BGP双线的真真假假
  10. NSTimer--转