On the Wire: Network Capture Tools for API Developers

Lane LiaBraaten, team delle API di Google Data
Giugno 2007

Introduzione

Lo sviluppo di applicazioni che interagiscono con i servizi web pone una serie unica di problemi. Una fonte comune di frustrazione è non sapere esattamente quale messaggio è stato inviato al server o quale risposta è stata ricevuta. Alcuni dei bug più difficili da rintracciare sono causati da una discrepanza tra ciò che pensiamo di inviare al server e ciò che viene effettivamente trasmesso.

Questo articolo presenta diversi strumenti che possono contribuire a rendere i dati sul cavo più visibili e utili. Questi strumenti, comunemente chiamati "sniffer di pacchetti", acquisiscono tutti i pacchetti di rete che si spostano attraverso l'interfaccia di rete. L'esame dei contenuti di questi pacchetti e dell'ordine in cui sono stati inviati e ricevuti può essere una tecnica di debug utile.

Un esempio: recupero di un feed pubblico

Sto creando una squadra di ciclismo per una corsa di beneficenza e ho creato un calendario per eventi come sessioni informative, raccolte fondi di squadra e uscite di allenamento. Ho reso pubblico questo calendario in modo che i membri del team e gli altri ciclisti possano visualizzarlo e partecipare agli eventi. Voglio anche inviare una newsletter con i prossimi eventi, quindi anziché copiare le informazioni dal sito web di Google Calendar, posso utilizzare l'API Google Calendar Data per eseguire query su questo calendario e recuperare gli eventi.

La documentazione dell'API Google Calendar contiene informazioni su come utilizzare l'API Google Data RESTful per interagire in modo programmatico con il mio calendario. (Nota del redattore:a partire dalla versione 3, l'API Google Calendar non utilizza più il formato Google Data.) La prima cosa da fare è ottenere l'URL del feed degli eventi del calendario facendo clic sul pulsante nella pagina delle impostazioni del calendario:

http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic

Utilizzando la documentazione di Google Calendar come riferimento, posso recuperare e visualizzare gli eventi del calendario in questo modo, dove PUBLIC_FEED_URL contiene l'URL del feed degli eventi.

CalendarService myService = new CalendarService("exampleCo-fiddlerExample-1");
final String PUBLIC_FEED_URL = "http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic";
URL feedUrl = new URL(PUBLIC_FEED_URL);
CalendarEventFeed resultFeed = myService.getFeed(feedUrl, CalendarEventFeed.class);

System.out.println("All events on your calendar:");
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
  CalendarEventEntry entry = resultFeed.getEntries().get(i);
  System.out.println("\t" + entry.getTitle().getPlainText());
}
System.out.println();

Viene generato un elenco di base degli eventi nel mio calendario:

All events on your calendar:
    MS150 Training ride
    Meeting with Nicole
    MS150 Information session

Lo snippet di codice riportato sopra mostra i titoli degli eventi del calendario, ma cosa dire del resto dei dati ricevuti dal server? La libreria client Java non semplifica l'output di un feed o di una voce in formato XML e, anche se lo facesse, l'XML non è tutto. Che dire delle intestazioni HTTP che accompagnano la richiesta? La query è stata inviata tramite proxy o reindirizzata? Con operazioni più complesse, queste domande diventano sempre più importanti, soprattutto quando le cose vanno male e si verificano errori. Il software di sniffing dei pacchetti può rispondere a queste domande rivelando il traffico di rete.

tcpdump

tcpdump è uno strumento a riga di comando che funziona su piattaforme di tipo Unix, ma esiste anche una porta Windows chiamata WinDump. Come la maggior parte dei packet sniffer, tcpdump mette la scheda di rete in modalità promiscua, che richiede i privilegi di superutente. Per utilizzare tcpdump, specifica l'interfaccia di rete da monitorare e il traffico di rete verrà inviato a stdout:

sudo tcpdump -i eth0

Se esegui questo comando, riceverai una quantità enorme di traffico di rete, parte del quale non riconoscerai nemmeno. Potresti semplicemente inoltrare l'output a un file ed eseguire grep in un secondo momento, ma ciò potrebbe portare alla creazione di file molto grandi. La maggior parte dei software di acquisizione dei pacchetti dispone di meccanismi di filtraggio integrati, in modo da acquisire solo ciò che ti serve.

tcpdump supporta il filtraggio in base a varie caratteristiche del traffico di rete. Ad esempio, puoi indicare a tcpdump di acquisire solo il traffico da o verso il tuo server sulla porta 80 (messaggi HTTP) inserendo il nome host del server nella seguente espressione:

dst or src host <hostname> and port 80

Per ogni pacchetto che corrisponde all'espressione del filtro, tcpdump visualizzerà un timestamp, l'origine e la destinazione del pacchetto e diversi flag TCP. Queste informazioni possono essere preziose perché mostrano l'ordine di invio e ricezione dei pacchetti.

Spesso è utile visualizzare anche i contenuti dei pacchetti. Il flag "-A" indica a tcpdump di stampare ogni pacchetto in ASCII, esponendo le intestazioni HTTP e il corpo del messaggio. Il flag "-s" viene utilizzato per specificare il numero di byte da visualizzare (dove "-s 0" significa non troncare affatto il corpo del messaggio).

Mettendo insieme tutti i pezzi, otteniamo il seguente comando:

sudo tcpdump -A -s 0 -i eth0 dst or src host <hostname> and port 80

Se esegui questo comando, quindi esegui il breve esempio .Java riportato sopra, vedrai tutta la comunicazione di rete coinvolta in questa operazione. Tra il traffico vedrai la richiesta HTTP GET:

22:22:30.870771 IP dellalicious.mshome.net.4520 > po-in-f99.google.com.80: P 1:360(359) ack 1 win 65535
E.....@....\...eH..c...P.=.....zP......GET /calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic HTTP/1.1
User-Agent: exampleCo-fiddlerExample-1 GCalendar-Java/1.0.6 GData-Java/1.0.10(gzip)
Accept-Encoding: gzip
Cache-Control: no-cache
Pragma: no-cache
Host: www.google.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

Vedrai anche il messaggio di risposta 200 OK che contiene il feed di dati di Google. Tieni presente che il feed è suddiviso in quattro pacchetti:

22:22:31.148789 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1:1431(1430) ack 360 win 6432
E...1 ..2.I.H..c...e.P.....z.=.:P..M...HTTP/1.1 200 OK
Content-Type: application/atom+xml; charset=UTF-8
Cache-Control: max-age=0, must-revalidate, private
Last-Modified: Mon, 11 Jun 2007 15:11:40 GMT
Transfer-Encoding: chunked
Date: Sun, 24 Jun 2007 02:22:10 GMT
Server: GFE/1.3

13da
<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom'
xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gCal='http://sc
hemas.google.com/gCal/2005' xmlns:gd='http://schemas.google.com/g/2005'><id>http
://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo
gle.com/public/basic</id><updated>2007-06-11T15:11:40.000Z</updated><category sc
heme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2
005#event'></category><title type='text'>MS150 Training Schedule</title><subtitl
e type='text'>This calendar is public</subtitle><link rel='http://schemas.google
.com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/calend
ar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic'></
link><link rel='self' type='application/atom+xml' href='http://www.google.com/ca
lendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic
?max-results=25'></link><author><name>Lane LiaBraaten</name><email>api.lliabraa@
gmail.com</email></author><generator version='1.0' uri='http://www.google.com/ca
lendar'>Google Calendar</generator><openSearch:totalRe


22:22:31.151501 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1431:2861(1430) ack 360 win 6432
E...1!..2.I.H..c...e.P.......=.:P.. 2...sults>3</openSearch:totalResults><openSe
arch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch
:itemsPerPage><gd:where valueString=''></gd:where><gCal:timezone value='America/
Los_Angeles'></gCal:timezone><entry><id>http://www.google.com/calendar/feeds/24v
j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j
740hnj46744</id><published>2007-06-11T15:11:05.000Z</published><updated>2007-06-
11T15:11:05.000Z</updated><category scheme='http://schemas.google.com/g/2005#kin
d' term='http://schemas.google.com/g/2005#event'></category><title type='text'>M
S150 Training ride</title><summary type='html'>When: Sat Jun 9, 2007 7am to 10am

&amp;nbsp; PDT&lt;br&gt;   &lt;br&gt;Event Status:     confirmed</summary><conte
nt type='text'>When: Sat Jun 9, 2007 7am to 10am&amp;nbsp; PDT&lt;br&gt;   &lt;b
r&gt;Event Status:     confirmed</content><link rel='alternate' type='text/html'
 href='http://www.google.com/calendar/event?eid=ZGd0NDAwMjJjdWkyazNqNzQwaG5qNDY3
NDQgMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw' title='alternate'></link><link rel='
self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/24v
j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j
740hnj46744'></link><author><name>MS150 Training Schedule</name></author><gCal:s
endEventNotifications value='false'></gCal:sendEventNotifications></entry><entry

><id>http://www.google.com/cal

22:22:31.153097 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 2861:4291(1430) ack 360 win 6432
E...1#..2.I.H..c...e.P.......=.:P.. ....endar/feeds/24vj3m5pl125bh2ijbbneh953s%4
0group.calendar.google.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8</id><publishe
d>2007-06-11T15:08:23.000Z</published><updated>2007-06-11T15:10:39.000Z</updated
><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.g
oogle.com/g/2005#event'></category><title type='text'>Meeting with Nicole</title

><summary type='html'>When: Mon Jun 4, 2007 10am to 11am&amp;nbsp; PDT&lt;br&gt;
  &lt;br&gt;Where: Conference Room B &lt;br&gt;Event Status:     confirmed</summ
ary><content type='text'>When: Mon Jun 4, 2007 10am to 11am&amp;nbsp; PDT&lt;br&
gt;  &lt;br&gt;Where: Conference Room B &lt;br&gt;Event Status:     confirmed

&lt;br&gt;Event Description: Discuss building cycling team for MS150</content><l
ink rel='alternate' type='text/html' href='http://www.google.com/calendar/event?
eid=NTFkOGtoNHMzYnBscW5iZjFscDZwMGtqcDggMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw'
title='alternate'></link><link rel='self' type='application/atom+xml' href='http
://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo
gle.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8'></link><author><name>MS150 Trai
ning Schedule</name></author><gCal:sendEventNotifications value='false'></gCal:s
endEventNotifications></entry><entry><id>http://www.google.com/calendar/feeds/24
vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/va41amq3r08dhh
kpm3lc1abs2o</id><published>20


22:22:31.190244 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: P 4291:5346(1055) ack 360 win 6432
E..G1$..2.K.H..c...e.P.....<.=.:P.. ....07-06-11T15:10:08.000Z</published><updat
ed>2007-06-11T15:10:08.000Z</updated><category scheme='http://schemas.google.com
/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title ty
pe='text'>MS150 Information session</title><summary type='html'>When: Wed Jun 6,
 2007 4pm to Wed Jun 6, 2007 5pm&amp;nbsp; PDT&lt;br&gt;   &lt;br&gt;Event Statu
s:     confirmed</summary><content type='text'>When: Wed Jun 6, 2007 4pm to Wed
Jun 6, 2007 5pm&amp;nbsp; PDT&lt;br&gt;   &lt;br&gt;Event Status:     confirmed<

/content><link rel='alternate' type='text/html' href='http://www.google.com/cale
ndar/event?eid=dmE0MWFtcTNyMDhkaGhrcG0zbGMxYWJzMm8gMjR2ajNtNXBsMTI1YmgyaWpiYm5la
Dk1M3NAZw' title='alternate'></link><link rel='self' type='application/atom+xml'
 href='http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.c
alendar.google.com/public/basic/va41amq3r08dhhkpm3lc1abs2o'></link><author><name
>MS150 Training Schedule</name></author><gCal:sendEventNotifications value='fals
e'></gCal:sendEventNotifications></entry></feed>

Questo output include tutti i contenuti e le intestazioni HTTP, nonché diversi flag TCP criptici. Tutti i dati sono presenti qui, ma sono un po' difficili da leggere e comprendere. Esistono diversi strumenti grafici che semplificano la visualizzazione di questi dati.

WireShark (in precedenza Ethereal)

Acquisizione schermo di Wireshark
WireShark mostra il traffico di rete in diversi modi.

WireShark è uno strumento grafico creato con libpcap, la stessa libreria su cui è basato tcpdump, ed è disponibile su Linux, Mac OS X e Windows. La GUI di Wireshark consente diversi nuovi modi di interpretare e interagire con i dati di acquisizione dei pacchetti. Ad esempio, quando i pacchetti vengono acquisiti dall'interfaccia di rete, vengono visualizzati in colori diversi in base al protocollo che utilizzano. Puoi anche ordinare il traffico per timestamp, origine, destinazione e protocollo.

Se selezioni una riga nell'elenco dei pacchetti, Wireshark visualizzerà informazioni specifiche di IP, TCP e altri protocolli nelle intestazioni dei pacchetti in una struttura ad albero leggibile. I dati vengono visualizzati anche in formato esadecimale e ASCII nella parte inferiore dello schermo.

Sebbene la natura visiva di WireShark renda più facile la comprensione del traffico di rete, nella maggior parte dei casi è comunque consigliabile filtrare il traffico di rete. WireShark offre solide funzionalità di filtraggio, tra cui il supporto per centinaia di protocolli.

SUGGERIMENTO:per visualizzare i protocolli disponibili e creare filtri complessi, fai clic sul pulsante nella parte superiore della finestra di Wireshark.

Per ricreare il filtro utilizzato nell'esempio di tcpdump riportato sopra, puoi inserire la seguente espressione nella casella del filtro di WireShark:

ip.addr==<your IP address> && tcp.port==80

Oppure sfrutta la conoscenza di HTTP di WireShark:

ip.addr==<your IP address> && http

In questo modo, i risultati dell'acquisizione verranno filtrati in modo da includere solo i pacchetti coinvolti in questa interazione con il server Google Calendar. Puoi fare clic su ogni pacchetto per visualizzarne i contenuti e ricostruire la transazione.

SUGGERIMENTO:puoi fare clic con il tasto destro del mouse su uno dei pacchetti e scegliere "Segui flusso TCP" per visualizzare le richieste e le risposte in sequenza in un'unica finestra.

WireShark offre diversi modi per salvare le informazioni di acquisizione. Puoi salvare uno, alcuni o tutti i pacchetti. Se stai visualizzando un flusso TCP, puoi semplicemente fare clic sul pulsante "Salva con nome" per salvare solo i pacchetti pertinenti. Puoi anche importare l'output di un'acquisizione tcpdump e visualizzarlo in WireShark.

Un problema: SSL e crittografia

Un limite comune degli strumenti di acquisizione dei pacchetti è l'impossibilità di visualizzare i dati criptati tramite una connessione SSL. L'esempio precedente accede a un feed pubblico, quindi SSL non è necessario. Tuttavia, se l'esempio accedesse a un feed privato, il client dovrebbe autenticarsi con il servizio di autenticazione Google, che richiede una connessione SSL.

Il seguente snippet è simile all'esempio precedente, ma qui CalendarService richiede il metafeed del calendario dell'utente, che è un feed privato che richiede l'autenticazione. Per l'autenticazione, chiama il metodo setUserCredentials. Questo metodo attiva una richiesta HTTPS al servizio ClientLogin e recupera il token di autenticazione dalla risposta. L'oggetto CalendarService includerà quindi il token di autenticazione in tutte le richieste successive.

CalendarService myService = new CalendarService("exampleCo-fiddlerSslExample-1");
myService.setUserCredentials(username, userPassword);
final String METAFEED_URL = "http://www.google.com/calendar/feeds/default";
URL feedUrl = new URL(METAFEED_URL);
CalendarFeed resultFeed = myService.getFeed(feedUrl, CalendarFeed.class);

System.out.println("Your calendars:");
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
  CalendarEntry entry = resultFeed.getEntries().get(i);
  System.out.println("\t" + entry.getTitle().getPlainText());
}
System.out.println();

Considera il traffico di rete necessario per autenticare e accedere a un feed API Google Data privato:

  1. Invia le credenziali utente al servizio ClientLogin
    • Invia una richiesta HTTP POST a https://www.google.com/accounts/ClientLogin con i seguenti parametri nel corpo del messaggio:
      • Email: l'indirizzo email dell'utente.
      • Passwd: la password dell'utente.
      • source: identifica l'applicazione client. Deve avere il formato nomeAzienda-nomeApplicazione-IDversione. Gli esempi utilizzano il nome ExampleCo-FiddlerSSLExample-1.
      • service: il nome del servizio Google Calendar è "cl".
  2. Ricevi il token di autorizzazione
    • Se la richiesta di autenticazione non va a buon fine, riceverai un codice di stato HTTP 403 Forbidden.
    • Se l'operazione riesce, la risposta del servizio è un codice di stato HTTP 200 OK, più tre codici alfanumerici lunghi nel corpo della risposta: SID, LSID e Auth. Il valore Auth è il token di autorizzazione.
  3. Richiedi il metafeed del calendario privato
    • Invia una richiesta HTTP GET a http://www.google.com/calendar/feeds/default con la seguente intestazione:
    • Authorization: GoogleLogin auth=<yourAuthToken>
      

Prova a eseguire questo snippet e a visualizzare il traffico di rete in WireShark (utilizzando "http || ssl" come filtro). Vedrai i pacchetti SSL e TLS coinvolti nella transazione, ma i pacchetti di richiesta e risposta ClientLogin sono criptati nei pacchetti "Dati applicazione". Non preoccuparti, in seguito esamineremo uno strumento che può effettivamente rivelare queste informazioni criptate.

Fiddler

Fiddler è un altro strumento grafico di sniffing dei pacchetti, ma si comporta in modo molto diverso dagli strumenti presentati finora. Fiddler funge da proxy tra l'applicazione e i servizi remoti con cui interagisci, diventando di fatto un intermediario. Fiddler stabilisce una connessione SSL sia con la tua applicazione sia con il servizio web remoto, decriptando il traffico da un endpoint, acquisendo il testo non criptato e ricriptando il traffico prima di inviarlo. Purtroppo Fiddler è disponibile solo per Windows. Ci scusiamo con gli utenti Mac e Linux.

Nota:il supporto SSL richiede Fiddler versione 2 e .NET Framework versione 2.0.

La visualizzazione del traffico di rete in Fiddler avviene principalmente tramite la scheda Session Inspector. Le schede secondarie più utili per il debug dei problemi relativi alle API Google Data sono:

  • Intestazioni: mostra le intestazioni HTTP in un formato ad albero comprimibile.
  • Auth: mostra le intestazioni di autenticazione.
  • Non elaborato: mostra i contenuti dei pacchetti di rete in testo ASCII

SUGGERIMENTO:fai clic sull'icona nell'angolo in basso a sinistra della finestra di Fiddler per attivare e disattivare l'acquisizione.

Fiddler utilizza .NET Framework per configurare le connessioni di rete in modo da utilizzare Fiddler come proxy. Ciò significa che tutte le connessioni effettuate con Internet Explorer o con il codice .NET verranno visualizzate in Fiddler per impostazione predefinita. Tuttavia, il traffico dell'esempio Java riportato sopra non verrà visualizzato perché Java ha un modo diverso di configurare i proxy HTTP.

In Java, puoi impostare il proxy HTTP utilizzando le proprietà di sistema. Fiddler viene eseguito sulla porta 8888, quindi per un'installazione locale puoi fare in modo che il codice Java utilizzi Fiddler come proxy per HTTP e HTTPS aggiungendo queste righe:

System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyHost", "localhost");
System.setProperty("https.proxyPort", "8888");

Se esegui l'esempio con queste righe, otterrai una traccia dello stack piuttosto brutta dal pacchetto di sicurezza Java:

[java] Caused by:
  sun.security.validator.ValidatorException: PKIX path building failed:
  sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Acquisizione schermo di Fiddler
Fiddler può decriptare e visualizzare il traffico SSL.

Questo errore si verifica quando non è possibile verificare il certificato restituito dal server in una connessione SSL. In questo caso, il certificato non valido proviene da Fiddler, che funge da intermediario. Fiddler genera certificati al volo e, poiché non è un emittente attendibile, questi certificati causano errori in Java durante la configurazione della connessione SSL.

Nota:quando Fiddler è in esecuzione, qualsiasi connessione SSL effettuata in Internet Explorer attiverà un "Avviso di sicurezza" che chiede se vuoi procedere nonostante il certificato non verificato. Puoi fare clic su "Visualizza certificato" per visualizzare il certificato generato da Fiddler.

Come puoi aggirare questa eccezione di sicurezza? In pratica, devi riconfigurare il framework di sicurezza di Java in modo che consideri attendibili tutti i certificati. Fortunatamente, non devi reinventare la ruota: dai un'occhiata alla soluzione di Francis Labrie e aggiungi il metodo SSLUtilities.trustAllHttpsCertificates() all'esempio precedente.

Dopo aver configurato Java per utilizzare Fiddler come proxy e aver disattivato la verifica predefinita dei certificati, puoi eseguire l'esempio e visualizzare tutto il traffico inviato via cavo in testo non crittografato. Non rubare la mia password.

Ricorda che questa transazione di autenticazione è solo un piccolo esempio di traffico SSL. Alcune applicazioni web utilizzano esclusivamente connessioni SSL, quindi il debug del traffico HTTP è fuori discussione senza un modo per decriptare i dati.

Conclusione

tcpdump è disponibile su Linux, Mac OS X e Windows ed è un ottimo strumento quando sai cosa stai cercando e hai bisogno di una cattura rapida. Tuttavia, esistono alcuni strumenti grafici che presentano il traffico di rete in formati più facili da comprendere. tcpdump offre molte più opzioni e funzionalità di filtro rispetto a quelle trattate qui. Per una descrizione completa della funzionalità di tcpdump, digita "man tcpdump" o visita la pagina del manuale di tcpdump online.

WireShark è disponibile anche su Linux, Mac OS X e Windows. Il supporto integrato per centinaia di protocolli rende Wireshark uno strumento utile per molte applicazioni, non solo per il debug HTTP. Questa introduzione scalfisce appena la superficie delle numerose funzionalità di Wireshark. Per maggiori informazioni, digita "man wireshark" o visita il sito web di WireShark.

Fiddler ha anche molte funzionalità fantastiche, ma ciò che lo distingue è la sua capacità di decriptare il traffico SSL. Per ulteriori informazioni, visita il sito web di Fiddler2.

Queste applicazioni di sniffing dei pacchetti sono strumenti eccezionali da avere a disposizione e i lettori più attenti avranno notato che sono tutte senza costi. La prossima volta che utilizzi le API di Google e noti qualcosa di strano, estrai uno di questi analizzatori di rete e dai un'occhiata più da vicino a ciò che viene trasmesso. Se non riesci a trovare il problema, puoi sempre pubblicare una domanda nel nostro gruppo di discussione. L'inclusione dei messaggi di rete pertinenti aiuterà gli altri a comprendere e diagnosticare il tuo problema specifico.

Buona fortuna e buon fiuto!

Risorse