Программно включить / отключить порт на сетевом коммутаторе - PullRequest
0 голосов
/ 02 сентября 2010

Привет!

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

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

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

Ответы [ 3 ]

2 голосов
/ 05 октября 2010

Вы можете использовать следующий простой код для включения / выключения порта коммутатора с помощью 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();
    }
}
1 голос
/ 02 сентября 2010

Мне повезло со стеком Westhawk Java SNMP .

Для простого набора 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;
}
0 голосов
/ 02 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...