Como monitorar chamadas de rede feitas a partir do simulador iOS


113

Estou tentando monitorar chamadas de um aplicativo para meu servidor, assim como o Firebug faz. Não consegui encontrar uma maneira de ver isso no simulador iOS ou no xCode.

Existe uma maneira de fazer isso sem farejar todo o tráfego? Se não, qual ferramenta você sugere?

Respostas:


84

Pessoalmente, eu uso Charles para esse tipo de coisa.
Quando ativado, ele monitorará todas as solicitações de rede, exibindo detalhes estendidos de solicitação, incluindo suporte para SSL e vários formatos de solicitação / resposta, como JSON, etc ...

Você também pode configurá-lo para farejar apenas solicitações para servidores específicos, não todo o tráfego.

É um software comercial, mas existe uma versão de avaliação e IMHO é definitivamente uma ótima ferramenta.


1
Muito fácil de usar e configurar e faz exatamente o que eu queria, obrigado!
Mad Echet

3
Não funciona facilmente quando seu servidor está protegido por TLS, o que deveria ser.
carbocátion

Tentei Charles, mas não consegui monitorar o tráfego de saída muito bem. Por exemplo, não pude alterar a formatação da minha solicitação POST para JSON
Jesus Rodriguez

24

Um proxy man-in-the-middle, como sugerido por outras respostas, é uma boa solução se você deseja apenas ver o tráfego HTTP / HTTPS. Burp Suite é muito bom. Porém, pode ser difícil configurar. Não tenho certeza de como você convenceria o simulador a falar com ele. Você pode ter que definir o proxy em seu Mac local para sua instância de um servidor proxy para que ele seja interceptado, uma vez que o simulador fará uso do ambiente de seu Mac local.

A melhor solução para farejar pacotes (embora funcione apenas para dispositivos iOS reais , não o simulador) que encontrei é usar rvictl. Esta postagem do blog tem uma boa redação. Basicamente, você faz:

rvictl -s <iphone-uid-from-xcode-organizer>

Então você fareja a interface que ele cria com o Wireshark (ou sua ferramenta favorita) e, quando terminar, desliga a interface com:

rvictl -x <iphone-uid-from-xcode-organizer>

Isso é bom porque se você quiser farejar pacotes no simulador, terá que percorrer o tráfego para o seu Mac local também, mas rvictlcria uma interface virtual que apenas mostra o tráfego do dispositivo iOS que você conectou ao seu USB porta.


1
+1 para Burp Suite, e sem problemas para configurá-lo: engadget.com/2011/02/21/… Leva menos de 10 min
Vladimir

20

Uma ferramenta de proxy gratuita e de código aberto que roda facilmente em um Mac é o mitmproxy .

O site inclui links para um binário Mac, bem como o código-fonte no Github.

Os documentos contêm uma introdução muito útil para carregar um certificado em seu dispositivo de teste para visualizar o tráfego HTTPS.

Não é tão GUI-tastic quanto Charles, mas faz tudo que eu preciso e é gratuito e mantido. Bom material e bastante simples se você já usou algumas ferramentas de linha de comando antes.

ATUALIZAÇÃO: Acabei de notar no site que o mitmproxy está disponível como uma instalação homebrew. Não poderia ser mais fácil.


Você teve alguma sorte ao usar mitm para o simulador iOS? Eu tenho configurado, mas o tráfego do meu computador fora do simulador também é capturado, o que não é das melhores. Usá-lo em um dispositivo real é incrível. Faz anos que faço isso.
atreat

mitmweb é a interface do usuário baseada na web do mitmproxy que permite o exame interativo e a modificação do tráfego HTTP. Como o mitmproxy, ele difere do mitmdump porque todos os fluxos são mantidos na memória, o que significa que ele se destina a obter e manipular amostras pequenas mitmproxy.readthedocs.io/en/v2.0.2/mitmweb.html
Raunak

15

Recentemente, encontrei um repositório git que torna isso mais fácil.

Você pode experimentá-lo.

Esta é a captura de tela de um aplicativo: insira a descrição da imagem aqui

Cumprimentos.


Embora o Bagel seja ótimo e simples, notei recentemente que ele também exibe solicitações em cache. Portanto, se você quiser saber os bytes reais transferidos, por exemplo, isso não é útil.
BlackWolf

10

O Xcode fornece registro de diagnóstico CFNetwork. Doc da Apple

Para habilitá-lo, adicione CFNETWORK_DIAGNOSTICS=3na seção Variável de ambiente:

insira a descrição da imagem aqui

Isso mostrará as solicitações do aplicativo com seus cabeçalhos e corpo. Observe que OS_ACTIVITY_MODEdeve ser definido enablecomo mostrado. Caso contrário, nenhuma saída será exibida no console.


4

Wireshark it

Selecione sua interface

insira a descrição da imagem aqui

Adicionar filteriniciar ocapture

insira a descrição da imagem aqui


Testando

Clique em qualquer ação ou botão que acione uma solicitação GET / POST / PUT / DELETE

Você vai vê-lo listado no wirehark

insira a descrição da imagem aqui

Se você quiser saber mais detalhes sobre um pacote específico, basta selecioná-lo e Seguir> HTTP Stream .

insira a descrição da imagem aqui

espero que isso ajude outras pessoas !!


3

Se você tiver conexão a cabo e Mac, existe um método simples e poderoso:

  1. instale o Wireshark gratuito, certifique-se de que ele pode capturar dispositivos com (e você precisa fazer isso após cada reinicialização do computador !):

    sudo chmod 644 / dev / bpf *

  2. Agora compartilhe sua rede com wi-fi. Preferências do sistema> Compartilhamento> Compartilhamento de Internet. Verifique se você tem "Compartilhar suas conexões de: Ethernet" e usando: Wi-Fi. Você também pode querer configurar alguma segurança wi-fi, não perturba o monitoramento de dados.

  3. Conecte seu telefone à rede recém-criada. Muitas vezes preciso de várias tentativas aqui. Se o telefone não quiser se conectar, desligue o wi-fi do Mac e repita a etapa 2 acima e seja paciente.

  4. Inicie o Wireshark para capturar sua interface wireless com o Wireshark, provavelmente é "en1". Filtre seus endereços IP e / ou portas necessários. Quando você encontrar um pacote que seja interessante, selecione-o, clique com o botão direito (menu de contexto)> Seguir TCP Stream e você verá uma bela representação de texto das solicitações e respostas.

E o que é melhor: exatamente o mesmo truque funciona para Android também!


Você pode usar isso com o seu simulador? Ainda não tenho o aplicativo no meu telefone.
Joshua Dance

@Joshua Dance você pode usá-lo com o emulador, se fizer solicitação de rede externa. Conexões com localhost não podem ser rastreadas com WireShark, pois não estão passando o "wire" (placa de rede)
JaakL

1

Como isso funcionará em uma máquina OSX? Considerando que duas das tags são xcode e ios-simulator.
Kevin R

@KevinR, 1. A Telerik tem uma versão beta do Fiddler para OS X 2. Em nenhum lugar da questão é dito que a escolha é limitada a OS X telerik.com/blogs/using-fiddler-with-apple-ios-devices
Konstantin Salavatov 01 de

2
@KonstantinSalavatov, O assunto da postagem original é "Como monitorar chamadas de rede feitas a partir do simulador iOS". O simulador iOS só roda no OS X, então sim, a escolha é limitada ao OS X.
ChillyPenguin

1
+1 Acho que você deveria votar a favor agora, porque agora há suporte para Mac OS X! : D telerik.com/fiddler#SupportedTechnologies e aqui telerik.com/download/fiddler/fiddler-osx-beta
David Noreña

1
  1. Instale o WireShark
  2. obter o endereço IP do monitor de rede xcode
  3. ouvir interface wi-fi
  4. definir filtro ip.addr == 192.168.1.122 no WireShark

0

Uma boa solução se você está acostumado com as ferramentas do inspetor de cromo é o depurador Pony: https://github.com/square/PonyDebugger

É um pouco complicado configurar, mas depois de fazer isso funciona bem. No entanto, certifique-se de usar o Safari em vez do Chrome para usá-lo.


0

Eu uso netfox. É muito fácil de usar e integrar. Você pode usá-lo no simulador e no dispositivo. Ele mostra todas as solicitações e respostas. Ele suporta JSON, XML, HTML, Imagem e outros tipos de respostas. Você pode compartilhar solicitações, respostas e log completo pelos formatos de compartilhamento padrão do IOS (Gmail, WhatsApp, e-mail, slack, sms, etc.)

Você pode verificar no GitHub: https://github.com/kasketis/netfox

Netfox fornece uma visão rápida de todas as solicitações de rede executadas por seu aplicativo iOS ou OSX. Ele pega todas as solicitações - é claro, as solicitações de bibliotecas de terceiros (como AFNetworking, Alamofire ou outra), UIWebViews e muito mais

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.