SNMP.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package de.tudarmstadt.informatik.hostage.protocol;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.List;
  5. import de.tudarmstadt.informatik.hostage.wrapper.Packet;
  6. import org.alfresco.jlan.server.auth.spnego.OID;
  7. import org.snmp4j.TransportMapping;
  8. import org.snmp4j.agent.BaseAgent;
  9. import org.snmp4j.agent.CommandProcessor;
  10. import org.snmp4j.agent.DuplicateRegistrationException;
  11. import org.snmp4j.agent.MOGroup;
  12. import org.snmp4j.agent.ManagedObject;
  13. import org.snmp4j.agent.mo.MOTableRow;
  14. import org.snmp4j.agent.mo.snmp.RowStatus;
  15. import org.snmp4j.agent.mo.snmp.SnmpCommunityMIB;
  16. import org.snmp4j.agent.mo.snmp.SnmpNotificationMIB;
  17. import org.snmp4j.agent.mo.snmp.SnmpTargetMIB;
  18. import org.snmp4j.agent.mo.snmp.StorageType;
  19. import org.snmp4j.agent.mo.snmp.VacmMIB;
  20. import org.snmp4j.agent.security.MutableVACM;
  21. import org.snmp4j.mp.MPv3;
  22. import org.snmp4j.security.SecurityLevel;
  23. import org.snmp4j.security.SecurityModel;
  24. import org.snmp4j.security.USM;
  25. import org.snmp4j.smi.Address;
  26. import org.snmp4j.smi.GenericAddress;
  27. import org.snmp4j.smi.Integer32;
  28. import org.snmp4j.smi.OctetString;
  29. import org.snmp4j.smi.Variable;
  30. import org.snmp4j.transport.TransportMappings;
  31. /**
  32. * Created by root on 06.07.15.
  33. */
  34. public class SNMP extends BaseAgent implements Protocol {
  35. @Override
  36. public int getPort() {
  37. return 161;
  38. }
  39. @Override
  40. public boolean isClosed() {
  41. return false;
  42. }
  43. @Override
  44. public boolean isSecure() {
  45. return false;
  46. }
  47. @Override
  48. public List<Packet> processMessage(Packet requestPacket) {
  49. return null;
  50. }
  51. @Override
  52. public TALK_FIRST whoTalksFirst() {
  53. return null;
  54. }
  55. @Override
  56. public String toString(){
  57. return "SNMP";
  58. }
  59. private String address;
  60. public SNMP(String address) throws IOException {
  61. super(new File("conf.agent"), new File("bootCounter.agent"),
  62. new CommandProcessor(
  63. new OctetString(MPv3.createLocalEngineID())));
  64. this.address = address;
  65. }
  66. @Override
  67. protected void registerManagedObjects() {
  68. }
  69. @Override
  70. protected void unregisterManagedObjects() {
  71. }
  72. @Override
  73. protected void addUsmUser(USM usm) {
  74. }
  75. @Override
  76. protected void addNotificationTargets(SnmpTargetMIB snmpTargetMIB, SnmpNotificationMIB snmpNotificationMIB) {
  77. }
  78. @Override
  79. protected void addViews(VacmMIB vacmMIB) {
  80. vacmMIB.addGroup(SecurityModel.SECURITY_MODEL_SNMPv2c, new OctetString("cpublic"), new OctetString("v1v2group"), StorageType.nonVolatile);
  81. vacmMIB.addAccess(new OctetString("v1v2group"), new OctetString("public"),
  82. SecurityModel.SECURITY_MODEL_ANY, SecurityLevel.NOAUTH_NOPRIV,
  83. MutableVACM.VACM_MATCH_EXACT, new OctetString("fullReadView"),
  84. new OctetString("fullWriteView"), new OctetString("fullNotifyView"), StorageType.nonVolatile);
  85. vacmMIB.addViewTreeFamily(new OctetString("fullReadView"), new org.snmp4j.smi.OID("1.3"),
  86. new OctetString(), VacmMIB.vacmViewIncluded, StorageType.nonVolatile);
  87. }
  88. @Override
  89. protected void addCommunities(SnmpCommunityMIB snmpCommunityMIB) {
  90. Variable[] com2sec = new Variable[] { new OctetString("public"),
  91. new OctetString("cpublic"), // security name
  92. getAgent().getContextEngineID(), // local engine ID
  93. new OctetString("public"), // default context name
  94. new OctetString(), // transport tag
  95. new Integer32(StorageType.nonVolatile), // storage type
  96. new Integer32(RowStatus.active) // row status
  97. };
  98. MOTableRow row = snmpCommunityMIB.getSnmpCommunityEntry().createRow(
  99. new OctetString("public2public").toSubIndex(true), com2sec);
  100. snmpCommunityMIB.getSnmpCommunityEntry().addRow((SnmpCommunityMIB.SnmpCommunityEntryRow) row);
  101. }
  102. public void start() throws IOException {
  103. init();
  104. // This method reads some old config from a file and causes
  105. // unexpected behavior.
  106. // loadConfig(ImportModes.REPLACE_CREATE);
  107. addShutdownHook();
  108. getServer().addContext(new OctetString("public"));
  109. finishInit();
  110. run();
  111. sendColdStartNotification();
  112. }
  113. protected void initTransportMappings() throws IOException {
  114. transportMappings = new TransportMapping[1];
  115. Address addr = GenericAddress.parse(address);
  116. TransportMapping tm = TransportMappings.getInstance()
  117. .createTransportMapping(addr);
  118. transportMappings[0] = tm;
  119. }
  120. public void registerManagedObject(ManagedObject mo) {
  121. try {
  122. server.register(mo, null);
  123. } catch (DuplicateRegistrationException ex) {
  124. throw new RuntimeException(ex);
  125. }
  126. }
  127. public void unregisterManagedObject(MOGroup moGroup){
  128. moGroup.unregisterMOs(server,getContext(moGroup));
  129. }
  130. }