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?

Mad Echet
fonte

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.

Macmade
fonte
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.

mpontillo
fonte
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.

giff
fonte
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.

Andres Paladines
fonte
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.

Evan
fonte
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 !!

cyber8200
fonte
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!

JaakL
fonte
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

Telerik Fiddler é uma boa escolha

http://www.telerik.com/blogs/using-fiddler-with-apple-ios-devices

Konstantin Salavatov
fonte
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
August Lin
fonte
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.

Simon Epskamp
fonte
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

Burcu Kutluay
fonte