ASN.1 Tarciana Dias Luciana Oliveira Flávia Falcão Introdução ASN.1 Notação Sintática Abstrata (Abstract Syntax Notation One – ASN.1) Para que o gerenciamento de dispositivos de uma rede que tenham diferentes fabricantes seja possível, é necessário uma forma padronizada para a descrição dos mesmos A linguagem ASN.1 foi proposta com o objetivo de descrever esses objetos numa forma padronizada e independente de fabricante Modelo SNMP “Cliente” “Servidor” Get Gerente Envia mensagens SNMP, modifica valor da variável... Agente Encarregado de coletar dados dos dispositivos e armazená-los numa estrutura padrão (base de dados) Get-Response SMI: Especifica uma metodologia para definição da informação contida na MIB. Usa um subconjunto de tipos de dados ASN.1 Controla (Acesso direto à MIB) MIB Define o conjunto conceitual dos objetos e contém informações detalhadas sobre cada objeto ASN.1 Tipos Primitivos INTEGER – inteiro de tamanho arbitrário BOOLEAN - TRUE ou FALSE BIT STRING – Lista de zero ou mais bits OCTET STRING – Lista de zero ou mais byte ANY – União de todos os tipos NULL – Absolutamente nenhum tipo OBJECT IDENTIFIER – Nome de objeto (ex.: uma biblioteca) Construtores SEQUENCE: Lista ordenada de vários tipos SEQUENCE OF: Lista ordenada de um só tipo SET: Colecção não ordenada de vários tipos SET OF: Coleção não ordenada de um só tipo CHOICE: Qualquer tipo de uma lista Exemplo de código ASN.1 Employee DEFINITIONS ::= BEGIN EXPORTS; PersonnelRecord ::= [APPLICATION 0] IMPLICIT SET { Name, title [0] IA5String, number EmployeeNumber, dateOfHire [1] Date, nameOfSpouse [2]Name, children [3] IMPLICIT SEQUENCE OF ChildInformation } ChildInformation ::= SET { Name, dateOfBirth [0] Date } Name ::= [APPLICATION 1] IMPLICIT SEQUENCE { givenName IA5String, initial IA5String, familyName IA5String } EmployeeNumber ::= [APPLICATION 2] IMPLICIT INTEGER Date ::= IA5String END Classes Geradas PersonnelRecord.java _SeqOfChildInformation.java ChildInformation.java Date.java EmployeeNumber.java Name.java PrintHandler.java Reader.java Writer.java XMLHandler.java Classes Criadas Gerente.java Agente.java Iservico.java (interface remota) Compiladores ASN1C (Java, C ou C++) http://www.obj-sys.com Asn1Compiler (C# e Java) http://www.unigone.com/ ASN-1Step (C, C++ ou Java) http://www.oss.com/ O compilador ASN1C O compilador ASN1C O compilador de ASNC1 é capaz de gerar o código Java. O código gerado de Java consiste em uma série de arquivos de fonte de Java - uma tipo definida dentro de uma especificação ASN.1. Ex: ChildInformation ::= SET {Name, dateOfBirth [0] Date} O compilador ASN1C Cada um destes arquivos em Java contém (no mínimo) os seguintes itens: Uma variável (ou variáveis) pública dos dados Um construtor (ou construtores) para inicializar a variável. Um método encode. Um método decode. O compilador ASN1C Há também uma biblioteca run-time para Java. Ela consiste em uma série de classes para codificar e descodificar os tipos ASN.1 primitivos. Por o exemplo, a classe Asn1Integer codificará ou descodificará uma variável do tipo do INTEIRO ASN.1. Roteiro ASN1C Setar o arquivo .asn1 Identificar o tipo de linguagem a ser gerada (Java, C ou C++) Identifar BER, PER, DER Para compilar e executar: set classpath= local do asn1rt.jar; local do jdk1.4;%path% Por exemplo: Set classpath=C:\acv541\java\asn1rt.jar;C:\jbuilder8\j dk1.4\bin\;%path%