2010-09-02 2 views
0

Приветствия!Программно включить/отключить порт на сетевом коммутаторе

Я пытаюсь найти способ в Java, чтобы программно включить/отключить порт для сетевого коммутатора через SNMP. Я попытался использовать SNMP4J, но не смог получить большую помощь в списке рассылки о том, как его использовать. Я не слишком обеспокоен тем, какая библиотека используется (с открытым исходным кодом и коммерческим), пока она выполняет свою работу.

Коммутатор, с которым я пытаюсь работать, это коммутатор Cisco 3750.

С уважением, Джеймс

+0

Вероятно, будет необходимо знать переключатель произв. и Model –

+0

см. http://serverfault.com/questions/177856/possible-to-configure-cisco-switch-ios-via-snmp –

ответ

2

Вы можете использовать следующий простой код для включения/выключения порта коммутатора с помощью snmp4j.

Это позволяет порт 1 и отключает порт 6.

package com.mobinet.snmp; 

import org.snmp4j.CommunityTarget; 
import org.snmp4j.PDU; 
import org.snmp4j.Snmp; 
import org.snmp4j.TransportMapping; 
import org.snmp4j.event.ResponseEvent; 
import org.snmp4j.mp.SnmpConstants; 
import org.snmp4j.smi.Address; 
import org.snmp4j.smi.GenericAddress; 
import org.snmp4j.smi.Integer32; 
import org.snmp4j.smi.OID; 
import org.snmp4j.smi.OctetString; 
import org.snmp4j.smi.VariableBinding; 
import org.snmp4j.transport.DefaultTcpTransportMapping; 

/** 
* 
* @author batbayar 
*/ 
public class SnmpTest { 
    private String address = "192.168.1.254/161"; // switch address and snmp port 
    private String writeCommunity = "myCommunityWrite"; // write community name 

    private Snmp snmp; 
    private CommunityTarget target; 

    public SnmpTest() { 
     try { 
      TransportMapping transport = new DefaultTcpTransportMapping(); 
      snmp = new Snmp(transport); 

      Address targetAddress = GenericAddress.parse(address); 
      target = new CommunityTarget(); 
      target.setCommunity(new OctetString(writeCommunity)); 
      target.setAddress(targetAddress); 
      target.setRetries(2); 
      target.setTimeout(1500); 
      target.setVersion(SnmpConstants.version2c); 

      PDU command = new PDU(); 
      command.setType(PDU.SET); 
      command.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.7.1"), new Integer32(2))); // port 1 down 
      command.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.7.6"), new Integer32(1))); // port 6 up 
      ResponseEvent response = snmp.send(command, target); 
      System.out.println("response: " + response); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     SnmpTest test = new SnmpTest(); 
    } 
} 
+0

делает порт 1 пониженным и включает порт 6, не так ли? – Sameet

+0

Нет. 1 - вверх, 2 - вниз. Я проверил это. – digz6666

+0

По-прежнему 6 и 1 меняются на противоположные. 2 заставляет порт 1 спускаться, а 1 делает порт 6 поднятым. Если я ошибаюсь, пожалуйста, верните;) – Burkhard

0

Вы можете попробовать чтение docs ...

A (почти) полный пример использования API в SNMP4J является инструментом консоли. Его можно найти в классе org.snmp4j.tools.console.SnmpRequest .

+0

Я сделал. Я не мог заставить его работать с моим прецедентом, и в службе списка не было никакой помощи. – James

1

Мне повезло с Westhawk Java SNMP stack.

Для простого набора SNMP, синтаксис будет выглядеть следующим образом:

public static boolean setOid(String hostAddress, int portNumber, String communityName, String oidToSet, String valueToSet) { 
    SnmpContextPool context = null; 
    try { 

     context = new SnmpContextPool(hostAddress, portNumber, SnmpContextFace.STANDARD_SOCKET); 
     context.setCommunity(communityName); 

     SetPdu oneSetPdu = new SetPdu(context); 
     AsnObject obj = new AsnOctets(valueToSet); // use AsnInteger here if you are setting an integer value 
     oneSetPdu.addOid(oidToSet, obj); 

     return oneSetPdu.send(); 

    } catch (Exception e) { 
     //TODO: Handle exceptions properly 
     e.printStackTrace(); 
    } finally { 
     if (context != null) { 
      context.destroy(); 
     } 
    } 
    return false; 
} 
Смежные вопросы