Principal Outro Como usar o Lua Dissector no Wireshark

Como usar o Lua Dissector no Wireshark



Como uma das melhores ferramentas de captura de pacotes de rede do mundo, o Wireshark permite obter 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.

  Como usar o Lua Dissector no Wireshark

Você pode usar dissecadores se quiser analisar uma parte específica dos dados de um pacote. Como o nome indica, esse processo “disseca” o código, permitindo que você corte certos aspectos que precisam de sua atenção. Este tutorial explica como criar e usar dissectores no Wireshark usando a linguagem de script Lua.

Antes de começar - 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:

como desbloquear um firestick 2017
  • Cada dissecador que você cria deve ser registrado para lidar com um tipo definido de carga útil de um protocolo diferente. Para concluir este registro, você deve atribuir um objeto “Proto” ao seu dissecador, 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.
    • Objeto Pinfo – Um registro de informações de pacote.
  • Você só pode chamar um dissector se o seu pacote de dados corresponder ao DissectorTable que você definiu para o seu objeto “Proto”.
    • Você pode contornar esse requisito forçando o uso de um dissector por meio da função “Decode As”. 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 dissecador usando LUA

Como o Wireshark é escrito e usa a linguagem de programação C, a maioria dos dissecadores também é escrita em C. No entanto, você pode querer usar Lua. Essa linguagem de script é mais simples que C e, portanto, mais acessível para iniciantes em codificação ou para aqueles que simplesmente desejam criar um dissecador usando uma linguagem mais leve.

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, essas são as etapas a serem seguidas se você quiser criar um dissecador Wireshark usando Lua.

Passo 1 – Configurar Lua no Wireshark

Você precisará configurar Lua se não tiver usado no Wireshark antes:

  1. Clique em 'Ajuda', seguido de 'Sobre o Wireshark'.
  2. Clique em 'Pastas'.
  3. Escolha uma das opções a seguir para criar um script Lua ativo:
    • Plug-ins Globais Lua
    • Plug-ins Lua Pessoal
    • Pessoal

Uma vez ativado, seu script estará pronto sempre que você 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 – As etapas básicas para criar seu dissecador

Se você já está familiarizado com Lua, pode usar as seguintes etapas para criar seu próprio script dissector que funcionará no Wireshark:

  • Declare o protocolo para seu dissecador, o que exige que você defina um nome longo para uso na árvore de protocolos 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.
    • Resposta – 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 ProtoField 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 o 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 que deseja usar.

Passo 3 – Adicione seu Dissector ao Wireshark

Neste momento, seu dissecador é 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:

  1. Clique em “Ajuda” e vá para o menu “Sobre o Wireshark”.
  2. Selecione a guia “Pasta” para encontrar uma lista de caminhos para o seu arquivo Lua.
  3. Escolha “Plugins Lua Pessoal”. Crie um diretório, se necessário.
  4. Copie e cole o arquivo Lua que você criou no diretório “Personal Lua Plugins”. Recarregue o Wireshark para ligar o dissecador.

É uma boa ideia fazer um teste em seu novo dissecador abrindo alguns dos pacotes que você capturou. O Wireshark deve entregar uma mensagem que mostre o nome longo que você escolheu para seu dissecador, juntamente com informações sobre o tipo de mensagem (pergunta ou resposta) e o resultado de sua verificação.

Algum Código de Exemplo

Se você nunca criou um dissector antes (ou é novo em Lua), Wireshark oferece um exemplo prático de dissecador 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 was found, invoke subdissector with a new Tvb,
        -- created from the current buffer (skipping first two 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
        -- fallback dissector that just shows the raw data.
        data_dis:call(buf(2):tvb(), pkt, tree)
    end
end
local wtap_encap_table = DissectorTable.get("wtap_encap")
local udp_encap_table = DissectorTable.get("udp.port")
wtap_encap_table:add(wtap.USER15, p_multi)
wtap_encap_table:add(wtap.USER12, p_multi)
udp_encap_table:add(7555, p_multi)

Pós-dissecadores e dissecadores acorrentados

Você pode querer se aprofundar um pouco mais no uso do 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-dissecador é 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 dissetores que 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 houve um longo intervalo entre os conjuntos de dados e não consegue recuperar cada um individualmente.

como selecionar todos os aplicativos gmail

O encadeamento de dissecadores serve a uma função semelhante (pelo menos em termos de filtragem por meio 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.

Dissecar 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 facilita a criação de 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? Deixe-nos saber na seção de comentários abaixo.

Artigos Interessantes

Escolha Do Editor

Como excluir um calendário no iPhone
Como excluir um calendário no iPhone
Não precisa mais de um calendário para uma de suas contas? Veja como remover um calendário do iPhone, incluindo calendários assinados, e adicioná-los novamente.
Como adicionar alguém no aplicativo Cash
Como adicionar alguém no aplicativo Cash
A vida não é mais conveniente agora que você pode pagar suas contas usando um aplicativo móvel? Sem filas intermináveis, sem complicações - você pode fazer tudo no conforto da sua casa. Aplicativos como o Cash App tomaram o mobile banking
Não baixe arquivos DLL para corrigir problemas de DLL ausentes
Não baixe arquivos DLL para corrigir problemas de DLL ausentes
Os sites de download de DLL às vezes fornecem soluções fáceis para problemas de DLL, permitindo downloads de DLL únicos, mas você nunca deve usá-los.
Como Abrir Terminal Root no Linux Mint
Como Abrir Terminal Root no Linux Mint
Para várias tarefas administrativas, você precisa abrir o terminal raiz no Linux Mint. Ele pode ser usado para alterar as configurações globais do sistema operacional ...
Como transmitir ao vivo o desfile do Dia de Ação de Graças da Macy's (2024)
Como transmitir ao vivo o desfile do Dia de Ação de Graças da Macy's (2024)
Corte o fio e transmita ao vivo o Desfile do Dia de Ação de Graças da Macy's. Use a internet para assistir a este feriado familiar favorito sem cabo ou antenas.
O que é rede sem fio de banda dupla?
O que é rede sem fio de banda dupla?
Saiba como as redes sem fio de banda dupla suportam dispositivos em duas bandas de radiofrequência diferentes, oferecendo diversas vantagens em relação às redes de banda única.
Como adicionar aplicativos da loja à inicialização no Windows 10
Como adicionar aplicativos da loja à inicialização no Windows 10
Se você deseja adicionar um aplicativo Store à inicialização do Windows 10, não pode usar métodos tradicionais. Veja como isso pode ser feito.