5. Escrevendo arquivos de regras

  1. Introdução

Uma regra é armazenada em um arquivo texto padrão ASCII, contendo as informações necessárias para uma medição de contabilização e para uma coletagem. Estas regras incluem um número (rule set number), uma tabela de regras, uma especificação do formato e uma requisição de estatística. Uma regra preparada (rule set) é simplesmente uma tabela de regras, identificada pelo seu número de regra. Um medidor de contabilização pode ter mais de dez regras na memória, permitindo ao seu gerente comuta-las, definido o valor da variável CurrentRuleSet da MIB.

Netramet tem uma regra construída internamente, chamada regra default, representada pelo número 1. Isto permite ao Netramet ser ativado logo que seja executado, provendo uma regra default o qual pode ser usado quando outra regra seja carregada pelo gerente. A regra preparada default não pode ser alterada pelo gerente.

  1. Sintaxe do arquivo de regra

A sintaxe para o arquivo de regras é dada mais adiante na forma de diagramas , junto com exemplos detalhados vistos nas seções seguintes.

Cada instrução em um arquivo de regra começa no inicio da linha e termina com um ponto e vírgula. Um caractere carquilha representa uma linha de comentário; todos os caracteres após uma carquilha são ignorados pelo rastreamento do gerente.

O rastreamento do NeMaC procura por Palavras-chave, números e endereços. Palavras-chave são exibidas no diagrama com letras maiúsculas. Palavras-chave, incluindo nomes dos atributos, devem ser dados completos, abreviações não são permitidas.

Arquivos de Regras




Sentença RuleSet

Cabeçalho da Regra

Sentença Format

Sentença Statistics



Sentença Include

O arquivo de regras contém um ou mais dos cinco elementos possíveis, que podem aparecer em qualquer ordem no arquivo. Caracteres maiúsculos não são significativos nos arquivos de regras.

  1. Sentença Ruleset

Sentença Ruleset





SET setnbr ;


A sentença Ruleset avisa ao medidor qual regra (rule set) será usada. Se o arquivo de regras não tem uma instrução Ruleset, o medidor vai continuar a usar a regra preparada atual.

  1. Cabeçalho da Regra






RULES Rótulo Instruções de Regras


Instruções de Regras





atributo & máscara = valor : procedimento , índice ;

O cabeçalho da regra especifica a tabela de regras para uma regra preparada, e faz uma requisição ao Nemac para baixa-la para o medidor.

Ele inicia com a palavra-chave RULES, seguido por uma série de instruções de regras, uma para cada regra. Cada regra tem cinco componentes, qual devem aparecer na ordem correta. Estes são:

ATRIBUTO

O nome do atributo para ser testado por esta regra. Qualquer dos atributos de endereços podem ser usados, menos a máscara ou atributos gerais. O atributo Null (nulo) pode também ser usado, neste caso a regra sempre será sucedida.

Adicionalmente poderá ser testada uma variável de medição. Há cinco destas, designada por v1, v2, v3, v4 e v5, cada qual pode pegar o nome de um atributo de endereço. Um valor para variável é repassado por um mecanismo de atribuição (ver mais adiante).

Quando uma variável aparece como um atributo de uma regra, seu valor especifica o atributo PDU para ser testado. Ex.: Se v1 foi atribuído a SourcePeerAddress como seu valor, uma regra com v1 como seu atributo iria testar o atual SourcePeerAddress.

MÁSCARA

Especifica a máscara a qual esta junta (ANDed ou &) com o valor do atributo de um pacote de chegada. Deve ser do mesmo tamanho (número de bytes) de valor do atributo. Notar que se uma regra de mascara for zero ela sempre será sucedida. Isto pode ser útil para as regras com ações de atribuições, desde que ela permita-os ter variáveis de medidor para seus atributos.

VALOR

Especifica um valor para ser comparado com o valor de um pacote de chegada. Se a comparação falhar, a próxima regra é testada, do contrário a atividade da regra é executada.

PROCEDIMENTO

Mecanismos a ser efetuado se o valor de regra for igual. Possíveis procedimentos são:

Ignore

Para a execução da regra e retorna um resultado "sucedido". Isto significa que o pacote que chegou não foi contado, ele será ignorado.

Retry

Para a execução da regra e retorna um resultado "falhou". Isto permite o medidor trocar os atributos de origem e destino para retentar a combinação.

Count

Conta este pacote na tabela de contadores especificada pelo índice de regras. Atributo e valores de mascara para um fluxo são pegos da pilha modelo na mesma ordem como eles são "empurrados" durante o processamento da regra.

CountPkt

Executa um procedimento de PushPktto (veja a seguir), e então um procedimento de Count (contagem).

Return

Retorna de uma subrotina de regra, usando o índice de regras com um deslocamento. O índice de regra retornado é retirados de uma pilha return.

GoSub

Chama uma subrotina de regra. O índice da próxima regra para ser testada é definido para este índice da regra, e o medidor coloca este índice da regra em uma pilha return.

GoSubAct

Idem ao GoSub, exceto seu conteúdo é executado imediatamente.

Assign

O atributo VALOR especificado por este valor da regra é designado para a variável especificada pelo atributo da regra. Veja que Assign e AssignAct usam a regra valor em uma situação incomum, ele nunca deve fazer um teste, em vez, ele deve sempre ser executado com um resultado de um procedimento Return, GoSubAct, AssignAct, GotoAct, PushRuletoAct ou PushPkttoAct.

AssignAct

Idem ao Assign, exceto que seu conteúdo é executado imediatamente.

GoTo

Define o índice da próxima regra para ser testada neste índice de regra.

GoToAct

Idem ao GoTo, exceto que seu conteúdo é executado imediatamente com o procedimento, sem teste.

PushRuleto

Grava o nome do atributo de regra, máscara e valor sobre a pattern stack (pilha modelo) e define o índice da próxima regra a ser testada para este índice de regra. O pattern stack grava as regras a qual usou corretamente; esta informação é usada por um procedimento de contar para construir fluxos.

PushRuletoAct

Idem ao PushRuleto, exceto que seu conteúdo é executado imediatamente com o processo, sem teste. Para compatibilização com antigas versões do NeMaC, Pushto e PushtoAct são tratados como sinônimo de PushRuleto e PushRuletoAct.

PushPktto

Grava o atributo nome e máscara da regra, e o valor definido do pacote sobre o pattern stack. Define o índice da próxima regra a ser testada para este índice de regra. Valor sempre será zero, consequentemente as regras PushPktto e PushPkttoAct nunca serão testadas; ao invés, elas devem ser executadas como o resultado de um procedimento Return, GoSubAct, AssignAct, GotoAct, PushRuletoAct ou PushPkttoAct.

PushPkttoAct

Idem ao PushPktto, exceto que o conteúdo da regra é executado junto com o procedimento, sem teste.

INDEX

Este é um parâmetro para procedimentos, veja a seguir várias utilidades.

Números das regras são indexadas 1-origem para suas tabelas correspondentes. Estes números podem ser usados diretamente, mas pode ser difícil de fazer isso exatamente. A forma mais simples de fazer é incluindo o número da regra em um comentário inserido em cada instrução.

Regras podem ser também rotuladas e referidas por seus rótulos, qual é muito mais fácil ! Um rótulo deve aparecer no início de uma linha do arquivo de regra e pode conter caracteres, dígitos e sublinhados. Nemac verifica a consistência dos rótulos.

Onde é necessário um rótulo para ‘the next rule’ a palavra reservada next deve ser usada, removendo a necessidade para criar um rótulo.

  1. Sentença Format





Format Atributos ;



Separador

A sentença Format especifica o formato dos dados gerados pelas regras em um arquivo de fluxos do Nemac.

Ela começa com uma palavra-chave Format, que é seguida por uma lista de atributos de fluxo, na ordem que irão aparecer no arquivo de fluxo de dados.

  1. Sentença Statistics




STATISTICS ;

A sentença de estatísticas chama Nemac para coletar as estatísticas de performace do medidor cada vez que foram coletados dados de fluxos e escreve estes dados no arquivo de dados de fluxos. Nemac zera as variáveis de estatística do Netramet depois de ler os seus valores.

  1. Sentença Include





INCLUDE filename ;

Uma sentença include permite que um arquivo de regras use outro arquivo de regra. Quando o NeMaC encontra uma regra, grava sua posição no arquivo de regra corrente e troca para a especificada. Quando chega no fim do arquivo incluído, volta e continua o arquivo anterior. Podem ser incluídos 5 arquivos de regras.

5.3 Arquivos de Regras

Esta seção da alguns exemplos de arquivos de regras, com comentários sobre o que eles fazem e por que foram escritos.

Isto é muito simples, para desenvolver um novo arquivo de regras, deve seguir os seguintes procedimentos.

  1. rules.default

# 1445, Mon 9 Jan 95

#

# Default rule file for NeTraMet (built in to the meter)

#

# Nevil Brownlee, Computer Centre, The University of Auckland

#

SET 1

#

RULES

SourcePeerType & 255 = dummy: Ignore, 0; # Ignore meter's dummy pkts

Null & 0 = 0: GotoAct, Next;

SourcePeerType & 255 = 0: CountPkt, 0;

#

# end of file

Esta é a regra padrão, a qual é construída para o medidor e não pode ser alterada. Ela fornece a regra preparada 1 (rule set 1) que produz um conjunto de fluxos, um para cada dos tipos pares o qual Netramet compreende.

A primeira linha descarta pacotes simulados dummy (falsos). Pacotes simulados são gerados e processados pelo medidor quando ele não tem conhecimento real do que fazer; a proporção de tempo que o medidor gasta processando pacotes postiços é medido em porcentagem de tempo inativo (idle time).

A segunda regra é necessária para que a terceira regra testada nunca seja executada. Ela testa o atributo nulo (Null), o qual sempre sucede, assim o procedimento GotoAct será sempre executada. Se a segunda regra não tivesse lá, SourcePeerType seria comparado com zero. O teste então falharia e desde que não há regras, nenhum pacote combinaria.

  1. rules.sample

# 1412, Thu 9 Feb 95

# Rule specification file to tally IP net <-> IP net,

# tally DECnet and Novell and aggregate EtherTalk

#

SET 2

#

RULES

SourcePeerType & 255 = IP: Pushto, IP_pkt;

SourcePeerType & 255 = Novell: Pushto, Novell_pkt;

SourcePeerType & 255 = EtherTalk: Pushto, Apple_pkt;

SourcePeerType & 255 = DECnet: Pushto, DEC_pkt;

Null & 0 = 0: Ignore, 0;

A primeira parte desta tabela de regra determina o tipo de protocolo par. Pacotes IP, Novell, EtherTalk e DECnet fazem o medidor examinar seu SourcePeerType, então pula para o grupo rotulado de regras do protocolo. A última regra sobre outros protocolos (Other) é descartada pela regra Ignore.

IP_pkt:

SourcePeerAddress & 192.0.0.0 = 192.0.0.0: Goto, low_C;

SourcePeerAddress & 192.0.0.0 = 128.0.0.0: Goto, low_B;

SourcePeerAddress & 192.0.0.0 = 64.0.0.0: Goto, low_A;

SourcePeerAddress & 192.0.0.0 = 0.0.0.0: Goto, low_A;

Null & 0 = 0: GotoAct, other;

low_A:

DestPeerAddress & 192.0.0.0 = 192.0.0.0: GotoAct, A_C;

DestPeerAddress & 192.0.0.0 = 128.0.0.0: GotoAct, A_B;

DestPeerAddress & 192.0.0.0 = 64.0.0.0: GotoAct, A_A;

DestPeerAddress & 192.0.0.0 = 0.0.0.0: GotoAct, A_A;

Null & 0 = 0: GotoAct, other;

low_B:

DestPeerAddress & 192.0.0.0 = 192.0.0.0: GotoAct, B_C;

DestPeerAddress & 192.0.0.0 = 128.0.0.0: GotoAct, B_B;

DestPeerAddress & 192.0.0.0 = 64.0.0.0: GotoAct, B_A;

DestPeerAddress & 192.0.0.0 = 0.0.0.0: GotoAct, B_A;

Null & 0 = 0: GotoAct, other;

low_C:

DestPeerAddress & 192.0.0.0 = 192.0.0.0: GotoAct, C_C;

DestPeerAddress & 192.0.0.0 = 128.0.0.0: GotoAct, C_B;

DestPeerAddress & 192.0.0.0 = 64.0.0.0: GotoAct, C_A;

DestPeerAddress & 192.0.0.0 = 0.0.0.0: GotoAct, C_A;

Null & 0 = 0: GotoAct, other;

Esta parte da tabela de regra manipula pacotes IP. Os primeiros dois bits de endereço origem par do pacote é examinado para decidir se ele é uma classe A, B ou C. Para cada um destes casos os dois primeiros bits do endereço destino par são testados para determinar sua classe de endereço. Cada dos nove pares de classes de endereços possíveis causam um salto para um par de regras (a seguir) que levam o endereço origem e destino do pacote. Qualquer outro endereço como endereço multicast, causa um pulo para a regra rotulada ‘other’, onde seus endereços completos (32 bit) origem e destino são levados. Uma vez que o endereço origem e destino tenham sido levados, a regra rotulada ‘count_pkt’ conta o pacote.

other:

SourcePeerAddress & 255.255.255.255 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.255.255 = 0: PushPkttoAct, count_pkt;

A_C:

SourcePeerAddress & 255.0.0.0 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.255.0 = 0: PushPkttoAct, count_pkt;

A_B:

SourcePeerAddress & 255.0.0.0 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.0.0 = 0: PushPkttoAct, count_pkt;

A_A:

SourcePeerAddress & 255.0.0.0 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.0.0.0 = 0: PushPkttoAct, count_pkt;

B_C:

SourcePeerAddress & 255.255.0.0 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.255.0 = 0: PushPkttoAct, count_pkt;

B_B:

SourcePeerAddress & 255.255.0.0 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.0.0 = 0: PushPkttoAct, count_pkt;

B_A:

SourcePeerAddress & 255.255.0.0 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.0.0.0 = 0: PushPkttoAct, count_pkt;

C_C:

SourcePeerAddress & 255.255.255.0 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.255.0 = 0: PushPkttoAct, count_pkt;

C_B:

SourcePeerAddress & 255.255.255.0 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.0.0 = 0: PushPkttoAct, count_pkt;

C_A:

SourcePeerAddress & 255.255.255.0 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.0.0.0 = 0: PushPkttoAct, count_pkt;

#

count_pkt:

Null & 0 = 0: Count, 0; # Source and Dest Peer Address pushed above

Nas regras encima, não se faz nada para impor alguma ordem sobre endereço origem e destino. Quando um pacote aparece como o primeiro de um novo fluxo de tráfego, seu origem vai ser o origem para o fluxo.

Novell_pkt:

SourcePeerAddress & 255.255.255.255 = 0: PushPktToAct, Next;

DestPeerAddress & 255.255.255.255 = 0: CountPkt, 0;

#

Apple_pkt:

Null & 0 = 0: Count, 0; # No detail for Ethertalk

#

DEC_pkt:

SourcePeerAddress & 255.255.255.0 = 0: PushPktToAct, Next;

DestPeerAddress & 255.255.255.0 = 0: CountPkt, 0;

Estas ações juntam pacotes ethertalk, Novell e DECnet. As marcas colocam um endereço par completo em cada caso. Estas instruem o medidor para criar fluxo para todo possível par de endereços pares.

STATISTICS

#

FORMAT FlowRuleSet FlowIndex FirstTime " "

SourcePeerType SourcePeerAddress DestPeerAddress " "

ToPDUs FromPDUs " " ToOctets FromOctets;

#

# end of file

A sentença Format especifica os atributos para serem coletados pelo medidor. Elas usam espaços duplos para separar os atributos em quatro grupos.

5.3.3 rules.gateway

# 1700, Wed 8 Feb 95

#

# Rule specification file to tally traffic to/from ccr1

#

# Nevil Brownlee, Computer Centre, University of Auckland

#

SET 3

#

RULES

DestAdjacentAddress & FF-FF-FF-FF-FF-FF = AA-00-04-00-F4-ED:

Goto, gateway;

Null & 0 = 0: Retry, 0;

gateway:

SourcePeerType & 255 = IP: Pushto, ip_pkt;

Null & 0 = 0: Ignore, 0;

#

ip_pkt:

SourcePeerAddress & 255.255.0.0 = 130.216.0.0: Goto, low_C; # Auckland

SourcePeerAddress & 192.0.0.0 = 192.0.0.0: Goto, low_C;

low_B:

DestPeerAddress & 192.0.0.0 = 128.0.0.0: GotoAct, B_B;

DestPeerAddress & 192.0.0.0 = 192.0.0.0: GotoAct, B_C;

Null & 0 = 0: GotoAct, B_A;

Esta regra foi definida para medir o tráfego através de um gateway ethernet, o qual será um roteador com endereço ethernet AA-00-04-00-F4-ED o qual fornece nossa conexão com a Internet. A primeira regra acima testa cada pacote DestAdjacentAddress para ver se seu destino é do lado mais afastado do roteador. Se ele for, a regra rotulada gateway será testada após, do contrário, a regra ‘retry’ é executada, permitindo ao medidor trocar origem e destino e tentar novamente. Se a combinação falhar na segunda tentativa o pacote será ignorado.

O resto deste arquivo de regra é bastante similar ao rules.sample acima.

  1. rules.broadcast

# 1445, Wed 8 Feb 95

#

# Rule specification file to tally broadcast packets

#

# Nevil Brownlee, Computer Centre, University of Auckland

#

SET 4

#

RULES

DestAdjacentAddress & FF-FF-FF-FF-FF-FF = FF-FF-FF-FF-FF-FF:

GotoAct, broadcast;

Null & 0 = 0 : Retry, 0; # Try other direction

Esta regra procura por pacotes ethernet broadcast, testando seu DestAdjacenteAddress. Broadcast marcado usando um grupo de regras rotulado broadcast (veja mais adiante).

A segunda regra é muito importante, e é necessária devido a forma que a tabela de contagem é manipulada. Considerando um pacote de entrada. Se a primeira combinação for um pacote broadcast e estiver marcado. Se este (broadcast) fluxo estiver pronto na tabela de contagem ele será contado e o trabalho é feito. Senão não, o contador não coloca ele imediatamente (devido a ele poder já ter sido trocado com o origem e destino) e a combinação falha.

O pacote é combinado de novo, mas a regra 1 e regra 2 falham. Nesta situação o medidor relembra que ele foi um contador que causou a primeira falha, assim a combinação tenta uma terceira alternativa, forçando o contador a adicionar o fluxo.

broadcast:

SourceAdjacentAddress & FF-FF-FF-FF-FF-FF = 0: PushPkttoAct, Next;

DestAdjacentAddress & FF-FF-FF-FF-FF-FF = 0: PushPkttoAct, Next;

SourcePeerType & 255 = 0: PushPkttoAct, Next;

SourcePeerAddress & 255.255.255.255 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.255.255 = 0: PushPkttoAct, Next;

SourceTransType & 255 = 0: PushPkttoAct, Next;

SourceTransAddress & 255.255 = 0: PushPkttoAct, Next;

DestTransAddress & 255.255 = 0: CountPkt, 0;

Este grupo de regras leva todo endereço adjacente, par e de transporte do pacote. Veja que desde que nós não queremos qualquer deste testes para ser executado (eles falhariam) nós usamos o ‘toAct’ do ‘PushPkt’. A última regra empurra o DestTransAddress e conta o pacote. Este exemplo demonstra como coletar uma quantidade grande de detalhes sem explicitamente testar cada atributo requisitado.

Os serviços do protocolo IP, BOOTP (porta 67 e 68) e RIP (porta 520) são comumente origens de pacotes IP broadcast. Lembre-se que ARP não faz parte do protocolo IP, assim Netramet verá pacotes ARP como outros (Others) pacotes.

  1. rules.ipport

# 1240, Thu 9 Feb 95

#

# Rule specification file to tally IP packets by port nbr

#

# Nevil Brownlee, Computer Centre, University of Auckland

#

SET 5

#

RULES

SourcePeerType & 255 = IP: Pushto, ip_pkt;

SourcePeerType & 255 = dummy: Ignore, 0; # Ignore meter's dummy pkts

Null & 0 = 0: GotoAct, Next;

SourcePeerType & 255 = 0: CountPkt, 0; # Count packet types

Pacotes IP fazem o medidor pular para a regra chamada ip_pkt. Outros tipos de pacotes são contados pelo tipo par; isto é feito da mesma forma da regra default do medidor (veja em rules.default).

ip_pkt:

SourceTransType & 255 = tcp: Pushto, tcp_udp;

SourceTransType & 255 = udp: Pushto, tcp_udp;

SourceTransType & 255 = icmp: Pushto, c_trans_only;

SourceTransType & 255 = ospf: Pushto, c_trans_only;

Null & 0 = 0: GotoAct, t_bad; # Unknown transport type

#

tcp_udp: s_news:

SourceTransAddress & 255.255 = nntp: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = nntp: GotoAct, s_news;

s_smtp:

SourceTransAddress & 255.255 = smtp: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = smtp: GotoAct, s_smtp;

O tipo transporte é testado primeiro. Pacotes TCP e UDP são desviados para a regra chamada tcp_udp. Pacotes ICMP e OSPF saltam para c_trans_only, onde eles são marcados como tipo transporte. Pacotes de tipos desconhecidos saltam para t_bad onde todos seus atributos são registrados.

s_domain:

SourceTransAddress & 255.255 = domain: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = domain: GotoAct, s_domain;

s_telnet:

SourceTransAddress & 255.255 = telnet: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = telnet: GotoAct, s_telnet;

s_ftp_ctrl:

SourceTransAddress & 255.255 = ftp: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = ftp: GotoAct, s_ftp_ctrl;

s_ftp_data:

SourceTransAddress & 255.255 = ftpdata: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = ftpdata: GotoAct, s_ftp_data;

#

Null & 0 = 0: GotoAct, t_bad; # 'Unusual' port

#

t_bad: # End of packet testing

SourceTransAddress & 255.255 = 0: PushPkttoAct, Next;

DestTransAddress & 255.255 = 0: PushPkttoAct, Next;

SourceTransType & 255 = 0: CountPkt, 0;

c_trans_source: # SourceTransAddress already pushed

SourceTransType & 255 = 0: CountPkt, 0;

c_trans_only:

SourceTransType & 255 = 0: CountPkt, 0;

#

FORMAT FlowRuleSet FlowIndex FirstTime " "

SourcePeerType

SourceTransType SourceTransAddress DestTransAddress " "

ToPDUs ToOctets FromPDUs FromOctets;

#

STATISTICS

#

# end of file

Para cada um dos tipos específicos de portas é analisado o DestTransAddress. Se o teste for positivo, DestTransAddress (número da porta IP) é recuperado, e o pacote é contado no c_trans_source. Se falhar, o SourceTransAddress é analisado. Obtendo sucesso chama a regra precedente para ser executada. O efeito disto é para recuperar o número da porta do protocolo no SourceTransAddress, sem considerar em qual direção o pacote trafegava.

O efeito global desta regra é classificar tráfego IP em um grupo pequeno de tipos de tráfegos em comum, pela análise de seus números de portas já conhecidos.

5.3.6 rules.manage

# 1550, Thu 9 Feb 95

#

# Rule specification file to tally traffic for Auckland, using four

# groups of sites: UA-depts, Local, NZ and World

#

# Nevil Brownlee, Computer Centre, University of Auckland

#

SET 6

#

RULES

SourcePeerType & 255 = IP: Pushto, IP_pkt;

Null & 0 = 0 : Ignore, 0; # Ignore other packet types

Esta regra mede nosso gateway Ethernet, fornecendo informações sumárias sobre quatro tipos de redes IP: departamentos da universidade de Auckland, Redes locais, redes na Nova Zelândia e o resto do mundo.

dest_local:

v1 & 0 = SourcePeerAddress: AssignAct, Next;

Null & 0 = 0: Gosub, Auckland_nets;

Null & 0 = 0: Goto, c_pkt; # 1 Dept -> dept-local

Null & 0 = 0: GotoAct, t_bad; # 2 UA, not in list of OK subnets -> UA-local

Null & 0 = 0: Ignore, 0; # 3 Local -> Ignore local-local

Null & 0 = 0: Retry, 0; # 4 Not UA or local -> Want local as source

#

dest_UA:

SourcePeerAddress & 255.255.0.0 = 130.216.0.0: Ignore, 0; # Ignore UA-UA

Null & 0 = 0 : Retry, 0; # Want Auckland as source

#

IP_pkt:

DestPeerAddress & 255.255.0.0 = 130.216.0.0: Pushto, dest_UA; # Auckland

Null & 0 = 0: GotoAct, Next;

v1 & 0 = DestPeerAddress: AssignAct, Next;

Null & 0 = 0: Gosub, Auckland_nets;

Null & 0 = 0: Ignore, 0; # 1 dest UA department

Null & 0 = 0: Ignore, 0; # 2 dest UA

Null & 0 = 0: GotoAct, dest_local; # 3 dest Local

#

v1 & 0 = SourcePeerAddress: AssignAct, Next; # 4 dest NZ or world

Null & 0 = 0: Gosub, Auckland_nets;

Null & 0 = 0: GotoAct, src_dept; # 1 source Dept

Null & 0 = 0: GotoAct, t_bad; # 2 source UA, not an OK subnet

Null & 0 = 0: GotoAct, src_local; # 3 source Local

Null & 0 = 0: GotoAct, t_bad; # 4 Not local, unexpected transit

Uma vez que um pacote tenha sido identificado como IP de transporte (carrying IP), nós chamamos IP_pkt. Se seu destino e origem forem ambos de Auckland o pacote é ignorado. Se seu destino é de Auckland mas não o seu origem, a combinação falha; isto força Auckland para ser o origem do fluxo.

A subrotina Auckland_nets é chamada para testar os destinos dos pacotes. Isto retorna 1, 2, 3 ou 4 dependendo em qual grupo o destino pertence, e retorna o DestPeerAddress na pilha modelo.

Se o destino é uma conexão local de rede o controle passa para Dest_local, onde Auckland_net é chamado novamente para determinar a origem do pacote. Pacotes do tipo local-para-local são ignorados, pacotes Auckland-para-local são contados (indo para c_pkt) e pacotes com um destino local falham, forçando redes locais para ser o origem do fluxo para outras redes a não ser Auckland.

src_dept:

v1 & 0 = DestPeerAddress: AssignAct, Next;

Null & 0 = 0: Gosub, Tuia_proximal;

DestPeerAddress & 255.255.0 = 130.216.0 : Ignore, 0; # 1 Auckland

DestPeerAddress & 255.255.0 = 132.181.0 : Pushto, c_pkt; # 2 Canterbury

DestPeerAddress & 255.255.0 = 131.203.0 : Pushto, c_pkt; # 3 Gracefield

DestPeerAddress & 255.255.0 = 141.158.0 : Pushto, c_pkt; # 4 Invermay

DestPeerAddress & 255.255.0 = 161.65.0 : Pushto, c_pkt; # 5 Lincoln CRI

DestPeerAddress & 255.255.0 = 130.123.0 : Pushto, c_pkt; # 6 Massey

DestPeerAddress & 255.255.255 = 192.88.85 : Pushto, c_pkt; # 7 MoRST

DestPeerAddress & 255.255.0 = 161.29.0 : Pushto, c_pkt; # 8 Mt Albert

DestPeerAddress & 255.255.255 = 192.122.171: Pushto, c_pkt; # 9 Nat Lib

DestPeerAddress & 255.255.255 = 192.84.253 : Pushto, c_pkt; # 10 Netway

DestPeerAddress & 255.255.0 = 139.80.0 : Pushto, c_pkt; # 11 Otago

DestPeerAddress & 255.255.0 = 160.4.0 : Pushto, c_pkt; # 12 Ruakura

DestPeerAddress & 255.255.255 = 202.12.76 : Pushto, c_pkt; # 13 Taranaki

DestPeerAddress & 255.255.0 = 130.195.0 : Pushto, c_pkt; # 14 VUW

DestPeerAddress & 255.255.0 = 130.217.0 : Pushto, c_pkt; # 15 Waikato

DestPeerAddress & 255.255.255 = 192.111.102: Pushto, c_pkt; # 16 Wallaceville

DestPeerAddress & 255.255.0 = 140.200.0 : Pushto, c_pkt; # 17 Tuia

DestPeerAddress & 255.0.0 = 253.0.0 : Pushto, c_pkt; # 18 Unconnected

DestPeerAddress & 255.0.0 = 254.0.0 : Pushto, c_pkt; # 19 World

#

src_local:

v1 & 0 = DestPeerAddress: AssignAct, Next;

Null & 0 = 0: Gosub, Tuia_proximal;

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 1 Auckland

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 2 Canterbury

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 3 Gracefield

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 4 Invermay

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 5 Lincoln CRI

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 6 Massey

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 7 MoRST

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 8 Mt Albert

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 9 Nat Lib

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 10 Netway

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 11 Otago

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 12 Ruakura

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 13 Taranaki

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 14 VUW

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 15 Waikato

DestPeerAddress & 255 = 252.0.0 : Pushto, c_pkt; # 16 Wallaceville

DestPeerAddress & 255 = 253.0.0 : Pushto, c_pkt; # 18 Unconnected

DestPeerAddress & 255 = 254.0.0 : Pushto, c_pkt; # 19 World

DestPeerAddress & 255.255 = 140.200: Pushto, c_pkt; # 17 Tuia

Se o origem for de um departamento em Auckland ou de uma rede local, a subrotina Tuia_proximal é chamada para determinar se o destino é de uma rede em Nova Zelândia ou não. Tuia_proximal retorna valores de 1 a 19; para origem local o destino é reduzido para tanto Nova Zelândia (Network 252.0.0.0) ou mundialmente (Network 254.0.0.0), mas para o departamento de Auckland a rede destino (qual é a posição do gateway o qual ele conecta) é retornada sobre uma pilha modelo.

c_pkt:

SourceTransType & 255 = tcp: Pushto, tcp_udp;

SourceTransType & 255 = udp: Pushto, tcp_udp;

SourceTransType & 255 = icmp: Pushto, c_trans_only;

SourceTransType & 255 = ospf: Pushto, c_trans_only;

Null & 0 = 0: GotoAct, t_bad; # Unknown transport type

#

tcp_udp: s_news:

SourceTransAddress & 255.255 = nntp: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = nntp: GotoAct, s_news;

s_smtp:

SourceTransAddress & 255.255 = smtp: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = smtp: GotoAct, s_smtp;

s_domain:

SourceTransAddress & 255.255 = domain: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = domain: GotoAct, s_domain;

s_telnet:

SourceTransAddress & 255.255 = telnet: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = telnet: GotoAct, s_telnet;

s_ftp_ctrl:

SourceTransAddress & 255.255 = ftp: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = ftp: GotoAct, s_ftp_ctrl;

s_ftp_data:

SourceTransAddress & 255.255 = ftpdata: PushtoAct, c_trans_source;

DestTransAddress & 255.255 = ftpdata: GotoAct, s_ftp_data;

#

Null & 0 = 0: GotoAct, t_bad; # 'Unusual' port

#

t_bad: # End of packet testing

SourceTransAddress & 255.255 = 0: PushPkttoAct, Next;

DestTransAddress & 255.255 = 0: PushPkttoAct, Next;

SourceTransType & 255 = 0: CountPkt, 0;

c_trans_source: # SourceTransAddress already pushed

SourceTransType & 255 = 0: CountPkt, 0;

c_trans_only:

SourceTransType & 255 = 0: CountPkt, 0;

As regras que iniciam sobre c_pkt analisam os atributos de transporte do pacote IP, a fim de contar separadamente diferentes tipos de pacotes. Pacote ICMP são analisados para serem contados primeiro. Pacotes de News, Mail, Domain e Telnet são identificados por seus números de porta tanto o origem como destino; tipo transporte não é testado, assim ele pode ser tanto UDP como TCP.

Qualquer pacote que não pertence a uma das categorias de interesse acima, são marcados pelo procedimento t_bad.

# Auckland local nets

#

Auckland_nets:

v1 & 255.255.255.0 = 130.216.1.0 : PushtoAct, A_dept; # Computer Centre

v1 & 255.255.255.0 = 130.216.3.0 : PushtoAct, A_dept; # Auckland DMZ

v1 & 255.255.255.0 = 130.216.5.0 : PushtoAct, A_dept; # Eng Science

v1 & 255.255.255.0 = 130.216.7.0 : PushtoAct, A_dept; # Physics

v1 & 255.255.255.0 = 130.216.11.0 : PushtoAct, A_dept; # Medical School

v1 & 255.255.255.0 = 130.216.12.0 : PushtoAct, A_dept; # Pharmacology

v1 & 255.255.255.0 = 130.216.14.0 : PushtoAct, A_dept; # Commerce

v1 & 255.255.255.0 = 130.216.15.0 : PushtoAct, A_dept; # Mathematics

v1 & 255.255.255.0 = 130.216.21.0 : PushtoAct, A_dept; # Chemistry

v1 & 255.255.255.0 = 130.216.26.0 : PushtoAct, A_dept; # S.B.S.

v1 & 255.255.255.0 = 130.216.33.0 : PushtoAct, A_dept; # Computer Science

v1 & 255.255.255.0 = 130.216.34.0 : PushtoAct, A_dept; # Computer Science

v1 & 255.255.255.0 = 130.216.73.0 : PushtoAct, A_dept; # Law

#

v1 & 255.255.255.0 = 192.156.165.0 : PushtoAct, A_local; # DECUSLINK

v1 & 255.255.255.0 = 192.251.230.0 : PushtoAct, A_local; # CLEARFIELD

v1 & 255.255.255.0 = 202.12.104.0 : PushtoAct, A_local; # DSE

v1 & 255.255.255.0 = 202.12.105.0 : PushtoAct, A_local; # FPNET

v1 & 255.255.255.0 = 202.14.100.0 : PushtoAct, A_local; # STATUS

v1 & 255.255.255.0 = 202.14.102.0 : PushtoAct, A_local; # KCBBS

v1 & 255.255.255.0 = 202.14.216.0 : PushtoAct, A_local; # MANUKAU

v1 & 255.255.255.0 = 202.14.217.0 : PushtoAct, A_local; # MALEFICARUM

v1 & 255.255.255.0 = 202.14.252.0 : PushtoAct, A_local; # NETBLK-CRAYCOM

v1 & 255.255.255.0 = 202.14.253.0 : PushtoAct, A_local; # NETBLK-CRAYCOM

v1 & 255.255.255.0 = 202.14.254.0 : PushtoAct, A_local; # NETBLK-CRAYCOM

#

v1 & 255.255.0.0 = 156.62.0.0 : PushtoAct, A_local; # ATINET

v1 & 255.255.0.0 = 130.216.0.0 : Return, 2; # University of Auckland

#

Null & 0 = 0 : Return, 4; # Not dept or local

#

A_dept:

Null & 0 = 0 : Return, 1; # UofA department

#

A_local:

Null & 0 = 0 : Return, 3; # Auckland local

#

# NZ nets (checked by traceroute from Auckland), Tue 19 Oct 93

#

# 132.160.0.0 PACCOM

# 140.200.0.0 KAWAIHIKO

#

# Class B nets

#

Tuia_proximal: # Auckland B

v1 & 255.255.0.0 = 130.216.0.0 : Return, 1; # AUCKLAND

v1 & 255.255.0.0 = 156.62.0.0 : Return, 1; # ATINET

# Canterbury B

v1 & 255.255.0.0 = 132.181.0.0 : Return, 2; # CANTERBURY

v1 & 255.255.0.0 = 138.75.0.0 : Return, 2; # LINCOLN-LAN-1

v1 & 255.255.0.0 = 153.111.0.0 : Return, 2; # CCCNET2

v1 & 255.255.0.0 = 165.84.0.0 : Return, 2; # CHCHPOLY-NET

. . . . . . . . . . . .

# Class C nets

# Auckland C

v1 & 255.255.255.0 = 192.156.165.0: Return, 1; # DECUSLINK

v1 & 255.255.255.0 = 192.251.230.0: Return, 1; # CLEARFIELD

v1 & 255.255.255.0 = 202.12.104.0 : Return, 1; # DSE

v1 & 255.255.255.0 = 202.12.105.0 : Return, 1; # FPNET

v1 & 255.255.255.0 = 202.14.100.0 : Return, 1; # STATUS

v1 & 255.255.255.0 = 202.14.102.0 : Return, 1; # KCBBS

v1 & 255.255.255.0 = 202.14.216.0 : Return, 1; # MANUKAU

v1 & 255.255.255.0 = 202.14.217.0 : Return, 1; # MALEFICARUM

v1 & 255.255.255.0 = 202.14.252.0 : Return, 1; # NETBLK-CRAYCOM

v1 & 255.255.255.0 = 202.14.253.0 : Return, 1; # NETBLK-CRAYCOM

v1 & 255.255.255.0 = 202.14.254.0 : Return, 1; # NETBLK-CRAYCOM

# Canterbury C

v1 & 255.255.255.0 = 192.73.21.0 : Return, 2; # TUIA-DSIR-1

v1 & 255.255.255.0 = 192.101.16.0 : Return, 2; # CHMEDS

v1 & 255.255.255.0 = 192.122.180.0: Return, 2; # WAIRCNET

. . . . . . . . . . . .

v1 & 255.255.255.0 = 202.20.76.0 : Return, 18; # SANS

v1 & 255.255.255.0 = 202.20.102.0 : Return, 18; # AGCTRL

v1 & 255.255.255.0 = 202.20.103.0 : Return, 18; # AGLINC

v1 & 255.255.255.0 = 202.20.104.0 : Return, 18; # AGGRASS

#

Null & 0 = 0 : Return, 19; # Not an NZ net

FORMAT FlowRuleSet FlowIndex FirstTime " "

SourcePeerType SourcePeerAddress DestPeerAddress " "

SourceTransType SourceTransAddress DestTransAddress " "

ToPDUs FromPDUs " " ToOctets FromOctets;

#

STATISTICS # Collect meter statistics

#

# end of file

A sentença Format especifica os atributos a serem coletados. Este inclui o endereço de transporte, permitindo a análise de tráfego pelo serviço IP. A estatística de desempenho do medidor também será coletada.

  1. rules.lan

# 1705, Thu 9 Feb 95

#

# Rule specification file to tally Local Area Network traffic

#

# Nevil Brownlee, Computer Centre, University of Auckland

#

SET 7

#

RULES

SourcePeerType & 255 = IP: PushtoAct, IP_pkt;

SourcePeerType & 255 = Novell: PushtoAct, Novell_pkt;

SourcePeerType & 255 = EtherTalk: PushtoAct, Apple_pkt;

SourcePeerType & 255 = DECnet: PushtoAct, DEC_pkt;

Null & 0 = 0: Ignore, 0;

#

IP_pkt: # Tally IP traffic by (Class C) subnet

SourcePeerAddress & 255.255.255.0 = 0: PushPktToAct, Next;

DestPeerAddress & 255.255.255.0 = 0: CountPkt, 0;

#

Novell_pkt: # Tally Novell traffic by network number and port

SourcePeerAddress & 255.255.255.255 = 0: PushPktToAct, Next;

DestPeerAddress & 255.255.255.255 = 0: PushPktToAct, Next;

SourceTransAddress & 255.255 = 0: PushPktToAct, Next;

DestTransAddress & 255.255 = 0: PushPktToAct, Next;

SourceTransType & 255 = 0: CountPkt, 0;

#

DEC_pkt:

SourceTransType & 255 = 38: PushtoAct, DEC_hosts;

SourceTransType & 255 = 6: PushtoAct, DEC_hosts;

SourceTransType & 255 = 46: PushtoAct, DEC_hosts;

SourceTransType & 255 = 14: PushtoAct, DEC_hosts;

#

Null & 0 = 0: GotoAct, Next # Tally DECnet non-data packets by type

SourceTransType & 255 = 0: CountPkt, 0;

#

DEC_hosts: # Tally DECnet data by host

SourcePeerAddress & 255.255.255 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.255 = 0: CountPkt, 0;

#

Apple_pkt:

SourceTransType & 255 = 3: PushtoAct, Apple_hosts;

Null & 0 = 0: GotoAct, Next # Tally EtherTalk by DDP type

SourceTransType & 255 = 0: CountPkt, 0;

#

Apple_hosts: # Tally EtherTalk data by host

SourcePeerAddress & 255.255.255 = 0: PushPkttoAct, Next;

DestPeerAddress & 255.255.255 = 0: CountPkt, 0;

#

STATISTICS

#

FORMAT FlowRuleSet FlowIndex FirstTime " "

SourcePeerType SourcePeerAddress DestPeerAddress " "

SourceTransType SourceTransAddress DestTransAddress " "

ToPDUs FromPDUs " " ToOctets FromOctets;

#

# end of file

Esta regra mede o tráfego em uma rede local de computadores. Ele tenta marcar cada um dos quatro protocolos pelo tipo transporte a fim de medir a quantidade de fluxo de tráfego para cada um destes. Além disso, fluxo de dados de transporte são marcados por pares de endereço par no qual determina qual par de hosts geram a proporção maior do total de tráfego da rede.



Márcia G. Baltar