Filtrar por processo / PID no Wireshark


Respostas:


58

Não vejo como. O PID não chega ao fio (em geral), e o Wireshark permite que você veja o que está no fio - potencialmente todas as máquinas que estão se comunicando através do fio. De qualquer forma, os IDs de processo não são exclusivos em máquinas diferentes.


7
bom ponto ... foi o que eu pensei também .. deixe-me esperar um dia antes de fechar isso, caso haja um ninja Wirehark por aí que consegue fazer isso ..
Ryan Fernandes

30
O Wireshark sabe qual porta está sendo usada e o sistema operacional sabe o PID do processo que está usando a porta. Com as mudanças de código, deve ser possível para o Wireshark mapear a porta para PID. Existem alguns casos em que isso falharia, como quando o sistema operacional realoca uma porta para um aplicativo diferente antes do Wireshark consultar o sistema operacional em busca de um PID para uma porta. Portanto, isso não será à prova de idiotas e falhas, mas se o usuário estiver ciente dessas limitações, ainda será um recurso útil.
Dojo

Eu digo apenas adicionar módulo ao WireShark que escuta a porta abre / fecha e mapeia o PID para a porta. Sincronize isso com o processo principal e você terá um mapeador de porta para processo perfeito. No entanto, lendo o bug do comentário da pergunta, o módulo não é tão simples de criar.
Vesper

Lembro-me da primeira vez que baixei o wirehark, ele mostrava a árvore de processos e você podia selecionar um processo para monitorar. Não sei quando essa opção desapareceu, mas estava lá.
Tomáš Zato - Reintegrar Monica

90

Caso você esteja procurando uma maneira alternativa e o ambiente que você usa seja o Windows, o Network Monitor 3.3 da Microsoft é uma boa escolha. Possui a coluna de nome do processo. Você pode adicioná-lo facilmente a um filtro usando o menu de contexto e aplicar o filtro. Como de costume, a GUI é muito intuitiva ...


10
O Microsoft Network Monitor 3.4 está em microsoft.com/en-us/download/details.aspx?id=4865
gt

39
Há também o Microsoft Message Analyzer que é basicamente a versão do Wireshark da Microsoft (e o sucessor do Network Monitor, pelo que entendi), mas um pouco melhor integrado. No seletor de coluna, em 'Etw' -> 'EtwProviderMsg' há uma coluna para 'PID'. Isso funciona bem!
Cameron de

3
O caminho exato é EtwProviderMsg -> EventRecord -> Cabeçalho -> ProcessId
r590

Acabei de experimentar e aquele Microsoft Message Analyzer é um software tão enfadonho! Quase fez meu sistema engatinhar. UI muito contra-intuitiva também. Alguém encontrou uma maneira de limpar a lista com os dados coletados? Desisti e desinstalei aquele pedaço de lixo. (PS. Pena que os desenvolvedores do Wireshark não adicionaram um recurso para conectar o PID / nome do processo a uma porta no filtro. É muito fácil de fazer. Isso pode ser crítico para ver o que está acontecendo no processo durante sua inicialização. uma solução alternativa que eu poderia ter uma ideia geral usando ProcMon da SysInternals.)
c00000fd

1
Acabei de descobrir o Microsoft Message Analyzer recentemente e é uma ferramenta muito útil! Como é possível que nunca tenha ouvido falar disso. Tão subestimado. Ele tem excelentes recursos de filtragem devido à integração muito melhor com o Windows do que o Wireshark. Eu mudei para ele em todos os hosts da minha empresa em cerca de 3 meses de trabalho diário. Muito obrigado a @Cameron por seu comentário sob essa resposta! :-)
Skipper

16

Você pode combinar os números de porta de WireShark com os números de porta de, digamos, netstat , que lhe dirá o PID de um processo escutando nessa porta.


12
bem, isso pode não funcionar ... o programa abre e fecha muitas portas locais e remotas
Ryan Fernandes

11

Use o Microsoft Message Analyzer v1.4

Navegue até ProcessId no seletor de campo.

Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId

Clique com o botão direito e adicione como coluna


1
Obrigado por me apontar na direção disso, é exatamente o que eu precisava. FWIW, o grupo de nível superior "ProcMon" parece conter o mesmo ProcessId, bem como outras informações, como nome do processo, ParentId, etc.
Tobias J

3

No Windows, há uma versão experimental que faz isso, conforme descrito na lista de discussão, Filtrar por nome de processo local


Isso faz, dentro do Wireshark, o "Você poderia combinar os números de porta do wirehark até os números de porta de, digamos, netstat que lhe dirá o PID de um processo escutando nessa porta." coisas do comentário de Tom Woolfrey, portanto (como a mensagem observa) sujeito às limitações desse mecanismo.

3

Isso é uma coisa importante para monitorar onde certos processos tentam se conectar, e parece que não há uma maneira conveniente de fazer isso no Linux. No entanto, várias soluções alternativas são possíveis e, portanto, acho que vale a pena mencioná-las.

Existe um programa chamado nonet que permite executar um programa sem acesso à Internet (tenho a maioria dos inicializadores de programas em meu sistema configurados com ele). Ele usa setguid para executar um processo no grupo nonet e define uma regra iptables para recusar todas as conexões deste grupo.

Update: agora eu uso um sistema ainda mais simples, você pode facilmente ter uma configuração legível do iptables com ferm, e apenas usar o programa sgpara rodar um programa com um grupo específico. Iptables também permite que você redirecione o tráfego para que você possa até mesmo encaminhá-lo para uma interface separada ou um proxy local em uma porta, o que permite que você filtre no wirehark ou faça LOG nos pacotes diretamente do iptables se você não quiser desabilitar toda a internet enquanto você estão verificando o tráfego.

Não é muito complicado adaptá-lo para executar um programa em um grupo e cortar todo o outro tráfego com iptables durante o tempo de execução e então você poderia capturar o tráfego apenas desse processo.

Se eu conseguir escrevê-lo, postarei um link aqui.

Por outro lado, você sempre pode executar um processo em uma máquina virtual e farejar a interface correta para isolar as conexões que ela faz, mas isso seria uma solução bastante inferior ...


3

Se você deseja seguir um aplicativo que ainda precisa ser iniciado, é certamente possível:

  1. Instale o docker (consulte https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ )
  2. Abra um terminal e execute um pequeno contêiner: docker run -t -i ubuntu /bin/bash(mude "ubuntu" para sua distro favorita, isso não precisa ser o mesmo que em seu sistema real)
  3. Instale seu aplicativo no contêiner da mesma forma que o instalaria em um sistema real.
  4. Inicie o WireShark em seu sistema real, vá em captura> opções. Na janela que se abre, você verá todas as suas interfaces. Em vez de escolher any, wlan0, eth0, ... escolher o novo interface virtual docker0em seu lugar.
  5. Comece a capturar
  6. Inicie seu aplicativo no contêiner

Você pode ter algumas dúvidas sobre como executar seu software em um contêiner, então aqui estão as respostas para as perguntas que você provavelmente deseja fazer:

  • Meu aplicativo funcionará dentro de um contêiner? Quase com certeza sim, mas talvez você precise aprender um pouco sobre o docker para fazê-lo funcionar
  • Meu aplicativo não ficará lento? Insignificante. Se o seu programa é algo que executa cálculos pesados ​​por uma semana, agora pode levar uma semana e 3 segundos
  • E se meu software ou alguma outra coisa quebrar no contêiner? Essa é a coisa boa sobre contêineres. O que quer que esteja rodando dentro, só pode quebrar o contêiner atual e não pode prejudicar o resto do sistema.

0

Em alguns casos, você não pode filtrar por id de processo. Por exemplo, no meu caso, precisei farejar o tráfego de um processo. Mas eu encontrei em sua configuração o endereço IP da máquina alvo, adicionei filtro ip.dst==someipe voila. Não vai funcionar em nenhum caso, mas para alguns é útil.


0

Obtenha o número da porta usando netstat:

netstat -b

E então use o filtro Wireshark:

tcp.port == portnumber

Não tenho certeza se essa é uma maneira infalível. Se você tiver um servidor TCP escutando em uma porta, mas não tiver bloqueado a manipulação de TCP do kernel, um ou ambos do kernel ou seu aplicativo podem responder na porta.
aeb0

0

O uso straceé mais adequado para esta situação.

strace -f -e trace=network -s 10000 -p <PID>;

opções -fpara também rastrear todos os processos bifurcados, -e trace=netwrokpara filtrar apenas a chamada do sistema de rede e -spara exibir o comprimento da string de até 10.000 caracteres.

Você também pode rastrear apenas certas chamadas, como operações de envio, recebimento e leitura.

strace -f -e trace=send,recv,read -s 10000 -p <PID>;

-16

Você pode verificar os números de porta com estes exemplos de comando no WireShark: -

tcp.port == 80

tcp.port == 14220

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.