Como usar o Lua Dissector no Wireshark
Como uma das melhores ferramentas de captura de pacotes de rede do mundo, o Wireshark permite que você obtenha pacotes de dados específicos para que você possa analisá-los offline e em tempo real. Pense no aplicativo como uma forma de examinar de perto os dados que fluem pela sua rede, permitindo detectar problemas e irregularidades.
Você pode usar dissecadores se quiser analisar uma parte específica dos dados de um pacote. Como o nome indica, este processo “disseca” o código, permitindo que você corte certos aspectos que precisam de sua atenção. Este tutorial explica como criar e usar dissecadores no Wireshark usando a linguagem de script Lua.
Antes Você começa – O que você precisa saber sobre dissecadores
Embora os dissecadores ofereçam uma maneira rápida de analisar partes de um pacote de dados no Wireshark, eles precisam seguir alguns protocolos para funcionar de maneira eficaz. Esses protocolos incluem o seguinte:
Todo dissecador que você criar deve ser registrado para lidar com um determinado tipo de carga útil de um protocolo diferente. Para concluir esse registro, você deve atribuir um objeto”Proto”ao seu dissector, que você verá abaixo. Quando você chama um dissector via Wireshark, ele recebe três coisas do aplicativo: Objeto TVB – Um buffer TVB do pacote de dados. Objeto TreeItem – Uma raiz de árvore que representa um único nó em uma árvore de dados.Pinfo Object – Um registro de informações de pacote.Você só pode chamar um dissector se seu pacote de dados corresponder ao DissectorTable que você definiu para seu objeto”Proto”.Você pode contornar esse requisito forçando o uso de um dissector por meio do Função”Decodificar como”. Mas mesmo assim, você só pode forçar o dissector se o DissectorTable que você definiu para o seu objeto”Proto”for do tipo correto.
Configurando seu dissector usando LUA
Como o Wireshark é escrito e usa a linguagem de programação C, a maioria dos dissecadores é escrita de forma semelhante em C. No entanto, você pode querer usar Lua. Essa linguagem de script é mais simples que C e, portanto, mais acessível para codificadores novatos ou para aqueles que simplesmente desejam criar um dissecador usando uma linguagem de programação mais leve linguagem.
Embora seu código seja mais simples, o dissecador que você obtém ao usar Lua geralmente é mais lento do que aquele que você criaria usando C. No entanto, estas são as etapas a seguir se você quiser criar um Wireshark dissector usando Lua.
Etapa 1 – Configurar Lua no Wireshark
Você precisará configurar Lua se não tiver usado no Wireshark antes:
Clique em”Ajuda”seguido de”Sobre o Wireshark”.
Clique em”Pastas.”
Escolha um dos seguintes para criar um script Lua ativo:
Global Lua PluginsPersonal Lua PluginsPersonal
Uma vez ativado, seu script será esteja pronto sempre que iniciar o Wireshark. Toda vez que você fizer uma alteração nesse script, será necessário reiniciar o Wireshark para registrar a alteração ou pressionar”Ctrl + Shift + L”para recarregar todos os seus scripts Lua para tornar suas alterações ativas.
Etapa 2 – Os passos básicos para criar seu dissector
Se você já conhece Lua, pode usar os seguintes passos para criar seu próprio script dissector que funcionará no Wireshark:
Declarar o protocolo para seu dissecador, o que exige que você defina um nome longo para uso na árvore de protocolo e um nome curto que sirva como o nome do filtro de exibição do dissecador. Crie os três campos a seguir, com seus tipos apropriados: Pergunta – Mostra o tipo de pergunta. Answer – Mostra o tipo de resposta.MessageType – Demonstra se o seu pacote solicita uma pergunta ou uma resposta.Registre seus campos para que o Wireshark saiba como exibi-los. Sem campos cadastrados, você receberá uma mensagem “Lua Error”, geralmente informando que seu protocampo de item de árvore é inválido. Crie uma função de dissecação que inclua o Pinfo mencionado anteriormente (contendo dados sobre seu pacote) e Item de árvore (criando a árvore que você anexará a uma subárvore). Você também deve criar um”buffer”, que fica em cima do seu TCP. Especifique o protocolo e a porta para os quais o Wireshark deve usar o dissecador. Por exemplo, você pode definir o protocolo como”TCP”e o número da porta para o que você deseja usar.
Etapa 3 – Adicione seu dissector ao Wireshark
No momento, seu dissector é como uma lâmpada sem eletricidade. Ele existe, mas não tem utilidade para você até que você possa passar algum poder por ele. Em outras palavras, seu dissector ainda não foi adicionado ao Wireshark, então você deve adicioná-lo manualmente para executá-lo usando estas etapas:
Clique em”Ajuda”e vá para o menu”Sobre o Wireshark”.
Selecione a guia”Pasta”para encontrar uma lista de caminhos para seu arquivo Lua.
Escolha”Plugins Lua Pessoal.”Crie um diretório, se necessário.
Copie e cole o arquivo Lua que você criou no diretório”Personal Lua Plugins”. Recarregue o Wireshark para ligar o dissector.
É uma boa ideia executar um teste em seu novo dissector abrindo alguns dos pacotes que você capturou. O Wireshark deve entregar uma mensagem que mostre o nome longo que você escolheu para seu dissector, juntamente com informações sobre o tipo de mensagem ( pergunta ou resposta) e o resultado de sua verificação.
Algumas amostras de código
Se você nunca criou um dissector antes (ou é novo em Lua), Wireshark oferece um dissecador de exemplo útil para você experimentar:
local p_multi=Proto (“multi”,”MultiProto”); local vs_protos={ [2]=”mtp2″, [3]=”mtp3″, [4]=”alcap”, [5]=”h248″, [6]=”ranap”, [7]=”rnsap”, [8]=”nbap”} local f_proto=ProtoField.uint8(“multi.protocol”,”Protocol”, base.DEC, vs_protos) local f_dir=ProtoField.uint8(“multi.direction”,”Direction”, base.DEC, { [1]=”incoming”, [0]=”outgoing”}) local f_text=ProtoField.string(“multi.text”,”Text”) p_multi.fields={ f_proto, f_dir, f_text } local data_dis=Dissector.get(“data”) local protos={ [2]=Dissector.get(“mtp2”), [3]=Dissector.get(“mtp3”) , [4]=Dissector.get(“alcap”), [5]=Dissector.get(“h248”), [6]=Dissector.get(“ranap”), [7]=Dissector.get(“rnsap”), [8]=Dissector.get(“nbap”), [9]=Dissector.get(“rrc”), [10]=DissectorTable.get(“sctp.ppi”):get_dissector(3),–m3ua [11]=DissectorTable.get(“ip.proto”):get_dissector(132),–sctp } function p_multi.dissector(buf, pkt, tree) local subtree=tree:add(p_multi, buf(0, 2)) subtree:add(f_proto, buf(0,1)) subtree:add(f_dir, buf(1,1)) local proto_id=buf(0,1):uint() local dissector=protos[proto_id] if dissector ~=nil then–Dissector foi encontrado, chama subdissector com um novo Tvb,–criado a partir do buffer atual (pulando os dois primeiros bytes). dissector:call(buf(2):tvb(), pkt, tree) elseif proto_id <2 then subtree:add(f_text, buf(2))--pkt.cols.info:set(buf(2, buf:len ()-3):string()) else--dissecador alternativo que apenas mostra os dados brutos. data_dis:call(buf(2):tvb(), pkt, tree) end local wtap_encap_table =DissectorTable.get("wtap_encap") udp_encap_table=DissectorTable.get("udp.port") wtap_encap_table:add(wtap.user15 , p_multi) wtap_encap_table:add(wtap.user12, udp_encap_table:add(7555,
Pós-dissecadores e dissecadores encadeados
Você pode querer aprofundar um pouco mais o uso do seu dissecador depois de dominar a criação deles em Lua. O Wireshark oferece dois tipos adicionais de dissecadores – pós-dissetores e dissecadores encadeados – que oferecem mais funcionalidade.
Um pós-dissector é muito parecido com uma verificação final de todos os dissecadores que você executou para um pacote. Você o registra para ser notificado assim que o Wireshark chamar todos os outros dissectores que você deseja usar e pode usá-lo para filtrar as colunas”Protocolo”e”Informações”. Esse recurso é especialmente útil se você deseja filtrar vários pacotes em uma sessão em que você teve um longo intervalo entre os conjuntos de dados e não consegue recuperar cada um individualmente.
O encadeamento de dissecadores tem uma função semelhante ( pelo menos em termos de filtragem através de dissecadores usados anteriormente), dando a você acesso aos dados de um único dissecador. A principal vantagem aqui é que o dissecador encadeado não precisa executar todos os pacotes novamente, fornecendo um resultado sem forçá-lo a esperar que o dissecador original seja executado novamente.
Dissectar em Lua
Dado que o Wireshark já oferece a capacidade de criar dissectores em C (sua linguagem natural), você pode não ver a necessidade de criá-los também em Lua. Ainda assim, aqueles que não se sentem confortáveis com C, bem como aqueles que já dominam Lua, podem achar que o script leve de Lua torna mais fácil criar seus dissecadores. Concedido, você tem que compensar um tempo de carregamento mais longo ao executar o processo em comparação com os dissecadores baseados em C, mas é útil ter a opção de qualquer maneira.
Dito isso, queremos ouvir você. Com que frequência você usa dissectores no Wireshark? Você já tentou criá-los em C antes, e quais benefícios você acha que fazer dissecadores em Lua oferece? Informe-nos na seção de comentários abaixo.
Isenção de responsabilidade: algumas páginas deste site podem incluir um link de afiliado. Isso não afeta nosso editorial de forma alguma.