juin 2007
- Introduction
- Exemple : Récupérer un flux public
- tcpdump
- WireShark
- Problème : SSL et chiffrement
- Fiddler
- Conclusion
Introduction
Le développement d'applications qui interagissent avec des services Web pose un ensemble de problèmes uniques. Une source de frustration courante est de ne pas savoir exactement quel message a été envoyé au serveur ni quelle réponse a été reçue. Certains des bugs les plus difficiles à identifier sont causés par une déconnexion entre ce que nous pensons envoyer au serveur et ce qui est réellement transmis.
Cet article présente plusieurs outils qui peuvent vous aider à rendre les données sur le réseau plus visibles et utiles. Ces outils, souvent appelés "analyseurs de paquets", capturent tous les paquets réseau qui transitent par votre interface réseau. L'examen du contenu de ces paquets et de l'ordre dans lequel ils ont été envoyés et reçus peut être une technique de débogage utile.
Exemple : Récupérer un flux public
Je suis en train de monter une équipe de cyclistes pour une course caritative et j'ai créé un agenda pour les événements tels que les séances d'information, les collectes de fonds de l'équipe et les sorties d'entraînement. J'ai rendu cet agenda public pour que les membres de l'équipe et les autres cyclistes puissent le consulter et participer aux événements. Je souhaite également envoyer une newsletter sur les événements à venir. Au lieu de copier les informations du site Web Google Agenda, je peux utiliser l'API Google Agenda Data pour interroger cet agenda et récupérer les événements.
La documentation de l'API Google Calendar explique comment utiliser l'API Google Data RESTful pour interagir avec mon agenda de manière programmatique. (Remarque de l'éditeur : depuis la version 3, l'API Google Agenda n'utilise plus le format Google Data.) La première chose à faire est d'obtenir l'URL du flux d'événements de l'agenda en cliquant sur le bouton sur la page des paramètres de l'agenda :
http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic
En utilisant la documentation Google Agenda comme référence, je peux récupérer et afficher des événements d'agenda comme celui-ci, où PUBLIC_FEED_URL
contient l'URL du flux d'événements.
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();
Cela génère une liste de base des événements de mon agenda :
All events on your calendar: MS150 Training ride Meeting with Nicole MS150 Information session
L'extrait de code ci-dessus affiche les titres des événements d'agenda, mais qu'en est-il du reste des données que nous avons reçues du serveur ? La bibliothèque cliente Java ne facilite pas la sortie d'un flux ou d'une entrée au format XML. Même si c'était le cas, le XML ne serait pas tout. Qu'en est-il des en-têtes HTTP qui accompagnent la requête ? La requête a-t-elle été transmise par un proxy ou redirigée ? Ces questions deviennent de plus en plus importantes pour les opérations complexes, en particulier lorsque des erreurs se produisent. Les logiciels d'analyse de paquets peuvent répondre à ces questions en révélant le trafic réseau.
tcpdump
tcpdump est un outil de ligne de commande qui fonctionne sur les plates-formes de type Unix, mais il existe également un port Windows appelé WinDump. Comme la plupart des renifleurs de paquets, tcpdump place votre carte réseau en mode promiscuous, ce qui nécessite des droits de super-utilisateur. Pour utiliser tcpdump, il vous suffit de spécifier l'interface réseau à écouter. Le trafic réseau sera envoyé à stdout :
sudo tcpdump -i eth0
Si vous exécutez cette commande, vous serez bombardé par toutes sortes de trafic réseau, dont certains que vous ne reconnaîtrez même pas. Vous pouvez simplement transférer la sortie vers un fichier et la grep ultérieurement, mais cela peut entraîner la création de fichiers très volumineux. La plupart des logiciels de capture de paquets intègrent des mécanismes de filtrage pour que vous ne capturiez que ce dont vous avez besoin.
tcpdump permet de filtrer le trafic réseau en fonction de différentes caractéristiques. Par exemple, vous pouvez demander à tcpdump de n'enregistrer que le trafic vers ou depuis votre serveur sur le port 80 (messages HTTP) en insérant le nom d'hôte de votre serveur dans l'expression suivante :
dst or src host <hostname> and port 80
Pour chaque paquet correspondant à l'expression de filtre, tcpdump affiche un code temporel, la source et la destination du paquet, ainsi que plusieurs indicateurs TCP. Ces informations peuvent être utiles, car elles indiquent l'ordre dans lequel les paquets ont été envoyés et reçus.
Il est souvent utile de voir le contenu des paquets. L'indicateur "-A" indique à tcpdump d'imprimer chaque paquet en ASCII, ce qui expose les en-têtes HTTP et le corps du message. L'indicateur "-s" permet de spécifier le nombre d'octets à afficher (où "-s 0" signifie qu'il ne faut pas du tout tronquer le corps du message).
En combinant le tout, nous obtenons la commande suivante :
sudo tcpdump -A -s 0 -i eth0 dst or src host <hostname> and port 80
Si vous exécutez cette commande, puis l'exemple .Java court ci-dessus, vous verrez toutes les communications réseau impliquées dans cette opération. Parmi le trafic, vous verrez la requête 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
Vous verrez également le message de réponse 200 OK
contenant le flux de données Google. Notez que le flux est divisé en quatre paquets :
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 &nbsp; PDT<br> <br>Event Status: confirmed</summary><conte nt type='text'>When: Sat Jun 9, 2007 7am to 10am&nbsp; PDT<br> <b r>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&nbsp; PDT<br> <br>Where: Conference Room B <br>Event Status: confirmed</summ ary><content type='text'>When: Mon Jun 4, 2007 10am to 11am&nbsp; PDT<br& gt; <br>Where: Conference Room B <br>Event Status: confirmed <br>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&nbsp; PDT<br> <br>Event Statu s: confirmed</summary><content type='text'>When: Wed Jun 6, 2007 4pm to Wed Jun 6, 2007 5pm&nbsp; PDT<br> <br>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>
Ce résultat inclut tous les en-têtes et le contenu HTTP, ainsi que plusieurs indicateurs TCP cryptiques. Toutes les données sont présentes, mais elles sont difficiles à lire et à comprendre. Il existe plusieurs outils graphiques qui facilitent l'affichage de ces données.
WireShark (anciennement Ethereal)

WireShark affiche le trafic réseau de plusieurs façons.
WireShark est un outil graphique basé sur libpcap, la même bibliothèque que tcpdump. Il est disponible sur Linux, Mac OS X et Windows. L'interface utilisateur graphique de WireShark permet d'interpréter et d'interagir avec les données de capture de paquets de plusieurs nouvelles façons. Par exemple, lorsque des paquets sont capturés à partir de votre interface réseau, ils s'affichent dans différentes couleurs en fonction du protocole qu'ils utilisent. Vous pouvez également trier le trafic par code temporel, source, destination et protocole.
Si vous sélectionnez une ligne dans la liste des paquets, Wireshark affiche les informations spécifiques à l'adresse IP, au protocole TCP et à d'autres protocoles dans les en-têtes de paquets, sous la forme d'un arbre lisible par l'utilisateur. Les données sont également affichées au format HEX et ASCII en bas de l'écran.
Bien que la nature visuelle de Wireshark facilite la compréhension du trafic réseau, vous devrez toujours filtrer le trafic réseau dans la plupart des cas. WireShark dispose de solides capacités de filtrage, y compris la prise en charge de centaines de protocoles.
CONSEIL : Pour afficher les protocoles disponibles et créer des filtres complexes, cliquez sur le bouton en haut de la fenêtre Wireshark.
Pour recréer le filtre utilisé dans l'exemple tcpdump ci-dessus, vous pouvez insérer l'expression suivante dans la zone de filtre WireShark :
ip.addr==<your IP address> && tcp.port==80
Vous pouvez également exploiter les connaissances de WireShark sur HTTP :
ip.addr==<your IP address> && http
Les résultats de votre capture seront alors filtrés pour n'afficher que les paquets impliqués dans cette interaction avec le serveur Google Agenda. Vous pouvez cliquer sur chaque paquet pour en afficher le contenu et reconstituer la transaction.
CONSEIL : Vous pouvez effectuer un clic droit sur l'un des paquets et sélectionner "Suivre le flux TCP" pour afficher les requêtes et les réponses de manière séquentielle dans une seule fenêtre.
WireShark propose plusieurs façons d'enregistrer les informations de capture. Vous pouvez enregistrer un, plusieurs ou tous les paquets. Si vous regardez un flux TCP, vous pouvez simplement cliquer sur le bouton "Enregistrer sous" pour enregistrer uniquement les paquets concernés. Vous pouvez également importer le résultat d'une capture tcpdump et l'afficher dans Wireshark.
Problème : SSL et chiffrement
Un inconvénient courant des outils de capture de paquets est l'impossibilité d'afficher les données chiffrées via une connexion SSL. L'exemple ci-dessus accède à un flux public. Le protocole SSL n'est donc pas nécessaire. Toutefois, si l'exemple accédait à un flux privé, le client devrait s'authentifier auprès du service d'authentification Google, qui nécessite une connexion SSL.
L'extrait suivant est semblable à l'exemple précédent, mais ici, CalendarService
demande le métaflux de l'agenda de l'utilisateur, qui est un flux privé nécessitant une authentification. Pour vous authentifier, il vous suffit d'appeler la méthode setUserCredentials
. Cette méthode déclenche une requête HTTPS au service ClientLogin et récupère le jeton d'authentification à partir de la réponse. L'objet CalendarService
inclura alors le jeton d'authentification dans toutes les requêtes ultérieures.
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();
Considérez le trafic réseau nécessaire pour s'authentifier et accéder à un flux d'API Google Data privé :
- Envoyer les identifiants utilisateur au service ClientLogin
- Envoyez une requête HTTP
POST
à https://www.google.com/accounts/ClientLogin avec les paramètres suivants dans le corps du message :- Adresse e-mail : adresse e-mail de l'utilisateur.
- Passwd : mot de passe de l'utilisateur.
- source : identifie votre application cliente. Il doit se présenter sous la forme nomDeLentreprise-nomDeLapplication-IDdeVersion. Les exemples utilisent le nom ExampleCo-FiddlerSSLExample-1.
- service : le nom du service Google Agenda est "cl".
- Envoyez une requête HTTP
- Recevez le jeton d'autorisation.
- Si la demande d'authentification échoue, vous recevrez un code d'état HTTP 403 "Accès refusé".
- Si l'opération réussit, la réponse du service est un code d'état HTTP 200 OK, ainsi que trois longs codes alphanumériques dans le corps de la réponse :
SID
,LSID
etAuth
. La valeurAuth
correspond au jeton d'autorisation.
- Demander le métaflux d'un agenda privé
- Envoyez une requête HTTP
GET
à http://www.google.com/calendar/feeds/default avec l'en-tête suivant :
Authorization: GoogleLogin auth=<yourAuthToken>
- Envoyez une requête HTTP
Essayez d'exécuter cet extrait et d'afficher le trafic réseau dans WireShark (en utilisant "http || ssl" comme filtre). Vous verrez les paquets SSL et TLS impliqués dans la transaction, mais les paquets de requête et de réponse ClientLogin sont chiffrés dans les paquets "Application Data " (Données d'application). Ne vous inquiétez pas, nous allons ensuite examiner un outil qui peut réellement révéler ces informations chiffrées.
Fiddler
Fiddler est un autre outil graphique d'analyse des paquets, mais il se comporte différemment des outils présentés jusqu'à présent. Fiddler agit comme un proxy entre votre application et les services à distance avec lesquels vous interagissez, devenant ainsi un intermédiaire. Fiddler établit une connexion SSL avec votre application et le service Web distant, déchiffre le trafic d'un point de terminaison, capture le texte brut et rechiffre le trafic avant de l'envoyer. Malheureusement, Fiddler n'est disponible que pour Windows. Désolé pour les utilisateurs de Mac et Linux.
Remarque : La prise en charge de SSL nécessite Fiddler version 2 et .NET Framework version 2.0.
Dans Fiddler, l'affichage du trafic réseau s'effectue principalement dans l'onglet "Session Inspector" (Inspecteur de session). Les sous-onglets les plus utiles pour résoudre les problèmes liés aux API Google Data sont les suivants :
- En-têtes : affiche les en-têtes HTTP sous forme d'arborescence réductible.
- Auth : affiche les en-têtes d'authentification.
- Brut : affiche le contenu des paquets réseau en texte ASCII.
CONSEIL : Cliquez sur l'icône en bas à gauche de la fenêtre Fiddler pour activer ou désactiver la capture.
Fiddler utilise le framework .NET pour configurer les connexions réseau afin d'utiliser Fiddler comme proxy. Cela signifie que toutes les connexions que vous établissez avec Internet Explorer ou avec du code .NET s'affichent dans Fiddler par défaut. Toutefois, le trafic de l'exemple Java ci-dessus ne s'affichera pas, car Java utilise une autre méthode pour configurer les proxys HTTP.
En Java, vous pouvez définir le proxy HTTP à l'aide des propriétés système. Fiddler s'exécute sur le port 8888. Pour une installation locale, vous pouvez faire en sorte que le code Java utilise Fiddler comme proxy pour HTTP et HTTPS en ajoutant les lignes suivantes :
System.setProperty("http.proxyHost", "localhost"); System.setProperty("http.proxyPort", "8888"); System.setProperty("https.proxyHost", "localhost"); System.setProperty("https.proxyPort", "8888");
Si vous exécutez l'exemple avec ces lignes, vous obtiendrez en fait une trace de pile désagréable du package de sécurité 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

Fiddler peut déchiffrer et afficher le trafic SSL.
Cette erreur se produit lorsque le certificat renvoyé par le serveur dans une connexion SSL ne peut pas être validé. Dans ce cas, le certificat incorrect provient de Fiddler, qui agit comme un intermédiaire. Fiddler génère des certificats à la volée. Comme Fiddler n'est pas un émetteur de confiance, ces certificats empêcheront Java de configurer la connexion SSL.
Remarque : Lorsque Fiddler est en cours d'exécution, toute connexion SSL que vous établissez dans Internet Explorer déclenche une "alerte de sécurité" vous demandant si vous souhaitez continuer malgré le certificat douteux. Vous pouvez cliquer sur "Afficher le certificat" pour voir le certificat généré par Fiddler.
Alors, comment contourner cette exception de sécurité ? En gros, vous devez reconfigurer le framework de sécurité de Java pour qu'il fasse confiance à tous les certificats. Heureusement, vous n'avez pas besoin de réinventer la roue ici. Consultez la solution de Francis Labrie et ajoutez la méthode SSLUtilities.trustAllHttpsCertificates()
à l'exemple ci-dessus.
Une fois que vous avez configuré Java pour utiliser Fiddler comme proxy et désactivé la validation par défaut des certificats, vous pouvez exécuter l'exemple et voir tout le trafic envoyé sur le réseau en texte brut. Ne volez pas mon mot de passe !
N'oubliez pas que cette transaction d'authentification n'est qu'un petit exemple de trafic SSL. Certaines applications Web utilisent exclusivement des connexions SSL. Il est donc impossible de déboguer le trafic HTTP sans un moyen de déchiffrer les données.
Conclusion
tcpdump est disponible sur Linux, Mac OS X et Windows. C'est un excellent outil lorsque vous savez ce que vous recherchez et que vous avez juste besoin d'une capture rapide. Toutefois, certains outils graphiques présentent le trafic réseau dans des formats plus faciles à comprendre. tcpdump offre beaucoup plus d'options et de capacités de filtrage que celles qui ont été abordées ici. Pour obtenir une description complète des fonctionnalités de tcpdump, saisissez "man tcpdump" ou consultez la page de manuel tcpdump en ligne.
WireShark est également disponible sur Linux, Mac OS X et Windows. La prise en charge intégrée de centaines de protocoles fait de Wireshark un outil utile pour de nombreuses applications, et pas seulement pour le débogage HTTP. Cette introduction ne fait qu'effleurer les nombreuses fonctionnalités de Wireshark. Pour en savoir plus, saisissez "man wireshark" ou consultez le site Web de Wireshark.
Fiddler possède également de nombreuses fonctionnalités intéressantes, mais ce qui le distingue, c'est sa capacité à déchiffrer le trafic SSL. Pour en savoir plus, consultez le site Web de Fiddler2.
Ces applications d'analyse de paquets sont d'excellents outils à avoir sous la main. Les lecteurs attentifs auront remarqué qu'elles sont toutes sans frais. La prochaine fois que vous travaillerez avec les API Google et que vous remarquerez quelque chose de suspect, sortez l'un de ces analyseurs de réseau et examinez de plus près ce qui se passe. Si vous ne trouvez pas le problème, vous pouvez toujours poser une question à notre groupe de discussion. En incluant les messages réseau concernés, vous aiderez les autres utilisateurs à comprendre et à diagnostiquer votre problème spécifique.
Bonne chance et bonne reniflage !