Aulas de kit de ferramentas NETCONF Java
RESUMO As aulas do NETCONF Java Toolkit são suportadas nas versões 1.0.1 e anteriores.
Classe de kit de ferramentas NETCONF Java: dispositivo
Um net.juniper.netconf.Device
objeto representa uma conexão SSHv2 e uma sessão NETCONF padrão entre o servidor de gerenciamento de configuração e o dispositivo no qual reside o servidor NETCONF.
Ao criar um Device
objeto, você deve fornecer o endereço IP ou nome de host e os detalhes de autenticação para criar a conexão SSHv2. A autenticação pode ser baseada em senha de usuário ou baseada em chave RSA/DSA. Você também tem a opção de especificar o número de porta para a conexão SSHv2 e os recursos do cliente para enviar ao servidor NETCONF.
A sintaxe do construtor é:
Device (String hostname, String login, String password, String pemKeyFile) Device (String hostname, String login, String password, String pemKeyFile, int port) Device (String hostname, String login, String password, String pemKeyFile, ArrayList capabilities) Device (String hostname, String login, String password, String pemKeyFile, int port, ArrayList capabilities)
Os parâmetros do construtor são:
hostname
— (Necessário) endereço IP ou nome de host do dispositivo no qual o servidor NETCONF está em execução e ao qual se conecta via SSHv2.login
— (Necessário) Nome de usuário para a conta de login no dispositivo no qual o servidor NETCONF está em execução.password
— (Necessária) Senha para autenticação baseada em senha do usuário ou autenticação baseada em chave. Se nenhuma senha for necessária para autenticação baseada em chave, passe esse argumento como nulo.pemKeyFile
— (Necessário) Caminho do arquivo contendo a chave privada DSA/RSA no formato PEM para autenticação baseada em chave. Para autenticação baseada em senha do usuário, passe esse argumento como nulo.port
— número de porta (opcional) no qual estabelecer a conexão SSHv2. A porta padrão é 830. Se você estiver se conectando a um dispositivo configurado para NETCONF sobre SSH em uma porta diferente da porta padrão, você deve especificar esse número de porta nos argumentos.capabilities
— recursos do cliente (opcionais) a serem comunicados ao servidor NETCONF, se os recursos forem diferentes dos recursos padrão.Os recursos padrão enviados para o servidor NETCONF são:
urn:ietf:params:xml:ns:netconf:base:1.0 urn:ietf:params:xml:ns:netconf:base:1.0#candidate urn:ietf:params:xml:ns:netconf:base:1.0#confirmed-commit urn:ietf:params:xml:ns:netconf:base:1.0#validate urn:ietf:params:xml:ns:netconf:base:1.0#url?protocol=http,ftp,file
A sintaxe geral para criar um Device
objeto é:
Device device_name = new Device (String hostname, String login, String password, String pemKeyFile, <int port>, <ArrayList capabilities>)
Por padrão, um NetconfSession
objeto é criado quando você cria uma nova instância Device
e se conecta a um servidor NETCONF. Depois de criar um Device
objeto, você pode realizar operações netconf.
Exemplos
O exemplo a seguir cria um Device
objeto com uma conexão SSHv2 autenticada com endereço IP 10.10.1.1. A conexão usa a autenticação baseada em senha do usuário com o nome de login "administrador" e a senha "PaSsWoRd". Quando o connect()
método é chamado, ele se conecta ao dispositivo e estabelece automaticamente uma sessão NETCONF padrão.
Device my_device = new Device("10.10.1.1", "admin", "PaSsWoRd", null); my_device.connect();
Para criar um Device
objeto com uma conexão NETCONF-over-SSH na porta 49000 em vez da porta padrão 830, adicione o número de porta aos argumentos do construtor.
Device my_device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 49000);
O valor de tempo limite padrão para se conectar ao dispositivo é de 5000 milissegundos. Para definir o valor do tempo limite em um intervalo diferente, ligue para o setTimeOut()
método no objeto do dispositivo.
Classe de kit de ferramentas NETCONF Java: configuração de rede
Um net.juniper.netconf.NetconfSession
objeto representa a sessão NETCONF entre o servidor de gerenciamento de configuração e o dispositivo no qual reside o servidor NETCONF.
Por padrão, uma sessão NETCONF é criada quando você cria uma nova instância Device
e se conecta a um servidor NETCONF, para que você não precise criar explicitamente um NetconfSession
objeto. Você pode realizar as operações netconf diretamente do Device
objeto ligando para os métodos associados.
No entanto, pode haver momentos em que você precisa de várias sessões NETCONF na mesma conexão SSHv2. Para criar várias sessões, ligue para o createNetconfSession()
método no Device
objeto conforme mostrado no exemplo a seguir:
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null); device.connect(); NetconfSession second_session = device.createNetconfSession();
Depois de criar uma sessão NETCONF adicional, você liga para os métodos de operação netconf para o novo NetconfSession
objeto da mesma forma que você os chama para o Device
objeto.
As Device
aulas contêm NetconfSession
muitos métodos idênticos, que executam operações de NETCONF, como a execução de chamadas de procedimentos remotos (RPCs) e a execução de alterações de configuração. Quando você liga para um método no Device
objeto, ele age na sessão NETCONF padrão. Quando você liga para um método em qualquer objeto adicional NetconfSession
, ele age naquela sessão NETCONF.
Exemplo: criação de várias sessões NETCONF
No exemplo a seguir, o trecho de código cria um novo Device
objeto. Quando o connect()
método é chamado, o programa se conecta ao dispositivo remoto e estabelece uma sessão NETCONF padrão. O programa cria um segundo NetconfSession
objeto, second_session
. A chamada device.getSessionID()
retorna o ID de sessão da sessão NETCONF padrão e a chamada second_session.getSessionID()
retorna o ID de sessão da segunda sessão NETCONF.
// Create a device object and a default NETCONF session Device device = new Device("10.10.1.34", "admin", "PaSsWoRd", null); device.connect(); // Create an additional NETCONF session NetconfSession second_session = device.createNetconfSession(); // There are two independent NETCONF sessions String default_session_id = device.getSessionID(); String second_session_id = second_session.getSessionID();
Classe de kit de ferramentas NETCONF Java: XML
Um net.juniper.netconf.XML
objeto representa dados codificados por XML e fornece métodos para modificar e analisar o XML. O objeto XML mantém internamente um org.w3c.dom.Document
objeto, correspondente aos dados XML que representa.
Recomenda-se que você trabalhe com o objeto XML para criar novas configurações, chamadas de procedimentos remotos (RPCs) ou quaisquer dados baseados em XML. Usando um objeto XML, você pode adicionar, excluir ou modificar facilmente elementos e atributos. Para facilitar a modificação do conteúdo XML, o objeto XML mantém um elemento "ativo", que representa o nível de hierarquia exposto para modificação.
Para criar um objeto XML, você primeiro cria um XMLBuilder
objeto e constrói a hierarquia XML inicial. Os XMLBuilder
métodos devolvem um objeto XML no qual você pode então construir. Isso torna conveniente criar configurações e RPCs baseados em XML e também analisar as respostas baseadas em XML recebidas do servidor NETCONF.
Exemplo: criar uma hierarquia de configuração
Este exemplo cria a hierarquia de configuração XML a seguir. As etapas usadas para criar a hierarquia de configuração estão descritas na Tabela 1.
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <source-address>any</source-address> <destination-address>any</destinationaddress> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> </match> <then> <permit> </permit> </then> </policy> </policy> </policies> </security> </configuration>
Código Java |
Hierarquia resultante |
---|---|
Crie um objeto XMLBuilder e uma hierarquia de 3 níveisXMLBuilder builder = new XMLBuilder();XML policy = builder.createNewConfig("security","policies","policy"); |
<configuration> <security> <policies> <policy> </policy> </policies> </security> </configuration> |
Nós de apêndice no nível policy.append("from-zone-name","trust");de 'política' policy.append("to-zone-name","untrust"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> </policy> </policies> </security> </configuration> |
Crie um novo nível de hierarquia para a primeira política XML policyOne = policy.append("policy");policyOne.append("name","my-sec-policy"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> </policy> </policy> </policies> </security> </configuration> |
Crie a hierarquia XML match = policyOne.append("match"); 'match' // Crie e aplicação de um array de aplicativos // para fazer três nós com o mesmo nome String[] applications = {"junos-ftp","junos-ntp","junos-ssh"};do nó match.append("application", applications); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> </match> </policy> </policy> </policies> </security> </configuration> |
Adicione elementos em 'match' match.append("source-address","any");match.append("destination-address","any"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> <source-address>any</source-address> <destination-address> any </destination-address> </match> </policy> </policy> </policies> </security> </configuration> |
Adicione a hierarquia "então" com um elemento de "permissão" para criançaspolicyOne.append("then").append("permit"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> <source-address>any</source-address> <destination-address> any </destination-address> </match> <then> <permit/> </then> </policy> </policy> </policies> </security> </configuration> |
Código completo e configuração final XMLBuilder builder = new XMLBuilder(); XML policy = builder.createNewConfig("security","policies","policy"); policy.append("from-zone-name","trust"); policy.append("to-zone-name","untrust"); XML policyOne = policy.append("policy"); policyOne.append("name","my-sec-policy"); XML match = policyOne.append("match"); String[] applications = {"junos-ftp","junos-ntp","junos-ssh"}; match.append("application", applications); match.append("source-address","any"); match.append("destination-address","any"); policyOne.append("then").append("permit"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> <source-address>any</source-address> <destination-address>any </destination-address> </match> <then> <permit/> </then> </policy> </policy> </policies> </security> </configuration> |
Classe de kit de ferramentas NETCONF Java: XMLBuilder
Em uma sessão netconf, a comunicação entre o servidor de gerenciamento de configuração e o servidor NETCONF é por meio de dados codificados por XML. O servidor de gerenciamento de configuração envia chamadas de procedimento remoto (RPCs) para o servidor NETCONF, e o servidor NETCONF processa o RPC e retorna uma resposta de RPC. Os net.juniper.netconf.XMLBuilder
objetos e net.juniper.netconf.XML
os objetos ajudam a criar e analisar dados codificados por XML.
Você usa o objeto XMLBuilder para criar um novo objeto XML. A sintaxe do construtor é:
XMLBuilder ()
A classe XMLBuilder inclui métodos para criar uma hierarquia de configuração, um RPC ou um objeto XML como dados codificados por XML. Cada método é sobrecarregado para aceitar vários níveis de hierarquia. Os métodos devolvem um objeto XML. Por exemplo, os métodos para construir um objeto de configuração, RPC ou XML com uma hierarquia de nível único são:
criarNewConfig(String elementLevelOne)
criarNewRPC(String elementLevelOne)
criarNewXML(String elementLevelOne)
O código de amostra a seguir cria um novo XMLBuilder
objeto, builder
. O XMLBuilder
objeto chama o createNewConfig()
método de construir uma hierarquia de configuração de três níveis que consiste em um elemento "segurança", uma tag infantil elemento "políticas" e um elemento "política" que é uma criança de "políticas".
XMLBuilder builder = new XMLBuilder(); XML policy = builder.createNewConfig("security","policies","policy");
A hierarquia XML resultante é a seguinte.
<configuration> <security> <policies> <policy> </policy> </policies> </security> </configuration>
Observe que o createNewConfig()
método sempre envolve a hierarquia dentro de um elemento <configuration>
raiz de alto nível. Da mesma forma, o createNewRPC()
método inclui a hierarquia dentro de um <rpc>
elemento de tag.
Uma vez que você gera um objeto XML, você pode chamar métodos da XML
classe para manipular esse objeto.