On the Wire: Network Capture Tools for API Developers

Lane LiaBraaten, zespół Google Data API
Czerwiec 2007

Wprowadzenie

Tworzenie aplikacji, które wchodzą w interakcje z usługami internetowymi, wiąże się z określonym zestawem problemów. Częstym źródłem frustracji nie jest dokładna informacja o tym, która wiadomość została wysłana do serwera, ani jaka odpowiedź została odebrana. Do najtrudniejszych do znalezienia błędów zaliczamy właśnie to, co wydaje się nam wysyłane do serwera, a co faktycznie dzieje się w sieci przewodowej.

W tym artykule przedstawiamy kilka narzędzi, które mogą zwiększyć widoczność i użyteczność danych przewodu. Narzędzia te, nazywane „snifferami pakietów”, przechwytują wszystkie pakiety sieciowe poruszające się po interfejsie sieci. Przydatną metodą debugowania może być przeanalizowanie zawartości pakietów i kolejności ich wysłania.

Przykład: pobieranie publicznego pliku danych

Stworzyłem zespół kolarzów do organizacji charytatywnej i przygotowałem kalendarz na takie wydarzenia jak sesje informacyjne, zbiórki funduszy i przejazdy treningowe. Upubliczniam ten kalendarz, dzięki czemu członkowie zespołu i inni zawodnicy mogą go przeglądać i uczestniczyć w wydarzeniach. Chcę też wysyłać newsletter z nadchodzącymi wydarzeniami, dzięki czemu zamiast kopiować informacje z witryny Kalendarza Google mogę używać interfejsu API danych Kalendarza Google do przesyłania zapytań dotyczących tego kalendarza i pobierania wydarzeń.

Dokumentacja interfejsu API Kalendarza Google zawiera informacje na temat używania interfejsu API RESTowego interfejsu API danych Google w sposób zautomatyzowany. (Uwaga od redakcji:od wersji 3 interfejs Google Calendar API nie używa już formatu danych Google). Najpierw musisz uzyskać adres URL kanału wydarzeń, klikając przycisk na stronie ustawień kalendarza.

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

Korzystając z dokumentacji Kalendarza Google, mogę pobierać i wyświetlać takie wydarzenia w kalendarzu, gdzie PUBLIC_FEED_URL przechowuje adres URL kanału wydarzenia.

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();

W ten sposób zostanie utworzona podstawowa lista wydarzeń w kalendarzu:

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

Powyższy fragment kodu zawiera tytuły wydarzeń w kalendarzu, ale co z resztą danych, które otrzymaliśmy z serwera? W bibliotece klienta Java nie można łatwo wyeksportować pliku danych lub wpisu do formatu XML. Nawet jeśli tak się nie stanie, plik XML nie stanowi pełnej historii. Co z nagłówkami HTTP przesyłanymi w żądaniu? Czy zapytanie było przekierowane czy przekierowane? W przypadku bardziej złożonych operacji te pytania stają się coraz ważniejsze, zwłaszcza gdy coś pójdzie nie tak i występują błędy. Oprogramowanie do wychwytywania pakietów może odpowiedzieć na te pytania dzięki ujawnieniu ruchu w sieci.

tcpdump,

tcpdump to narzędzie wiersza poleceń działające na platformach podobnych do Unix, ale dostępny jest też port dla systemu Windows o nazwie WinDump. Podobnie jak większość snifferów pakietów, tcpdump ustawia kartę sieciową w trybie dosadnym, który wymaga uprawnień superużytkownika. Aby użyć tcpdump, wystarczy określić interfejs sieciowy, aby nasłuchiwać, a ruch sieciowy będzie wysyłany do stdout:

sudo tcpdump -i eth0

Jeśli uruchomisz to polecenie, bombardują Cię ruch sieciowy, którego nie rozpoznajesz. Później możesz przenieść dane wyjściowe do pliku i grep później, ale może to spowodować utworzenie bardzo dużych plików. Większość oprogramowania do przechwytywania pakietów ma wbudowane mechanizmy filtrowania, dzięki czemu możesz rejestrować tylko to, czego potrzebujesz.

tcpdump obsługuje filtrowanie w oparciu o różne cechy ruchu sieciowego. Możesz na przykład określić, że tcpdump będzie przechwytywać ruch tylko do serwera lub z niego przez port 80 (komunikaty HTTP), wstawiając nazwę hosta serwera w następujący sposób:

dst or src host <hostname> and port 80

Dla każdego pakietu zgodnego z wyrażeniem filtra tcpdump wyświetli sygnaturę czasową, źródło i miejsce docelowe pakietu oraz kilka flag TCP. Ta informacja może być cenna, ponieważ pokazuje kolejność wysyłania i odbierania pakietów.

Często sprawdza się również zawartość pakietów. Flaga „-A” informuje tcpdump, aby wydrukować każdy pakiet w ASCII, ujawniając nagłówki HTTP i treść wiadomości. Flaga „-s” służy do określenia liczby wyświetlanych elementów (gdzie „-s 0” oznacza całkowite skrócenie treści wiadomości).

Po połączeniu wszystkich poleceń otrzymujemy to polecenie:

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

Jeśli uruchomisz to polecenie, a następnie wykonasz krótki przykład powyżej w języku .Java, zobaczysz całą komunikację sieciową w ramach tej operacji. Wśród ruchu zobaczysz żądanie 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

Zobaczysz też odpowiedź 200 OK, która zawiera plik danych Google. Zwróć uwagę, że plik danych jest podzielony na 4 pakiety:

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>

Te dane wyjściowe obejmują wszystkie nagłówki i treści HTTP oraz kilka zaszyfrowanych flag TCP. Są tu wszystkie dane, ale są one trudne do zrozumienia i zrozumienia. Istnieje kilka narzędzi graficznych, które ułatwiają przeglądanie danych.

WireShark (dawniej Ethereal)

Zrzut ekranu z aplikacji Wireshark
WireShark wyświetla ruch w sieci na kilka sposobów.

WireShark to narzędzie graficzne utworzone na podstawie biblioteki libpcap, biblioteki tcpdump, dostępnej również w systemach Linux, Mac OS X i Windows. Interfejs GUI w WireShark umożliwia korzystanie z nowych sposobów interpretowania danych przechwytywania pakietów i korzystania z nich. Pakiety są przechwytywane na przykład przez interfejs sieci, dlatego wyświetlają się w różnych kolorach w zależności od używanego protokołu. Ruch można też sortować według sygnatury czasowej, źródła, miejsca docelowego i protokołu.

Jeśli wybierzesz wiersz na liście pakietów, Wireshark wyświetli w nagłówkach pakietów informacje w formacie zrozumiałym dla człowieka. Dane są też wyświetlane w kodowaniu szesnastkowym i ASCII u dołu ekranu.

Wirtualny charakter sieci WireShark ułatwia zrozumienie ruchu sieciowego, ale w większości przypadków można go odfiltrować. WireShark oferuje zaawansowane funkcje filtrowania, w tym obsługę setek protokołów.

WSKAZÓWKA: aby wyświetlić dostępne protokoły i utworzyć złożone filtry, kliknij przycisk w górnej części okna WireShark.

Aby odtworzyć filtr użyty w przykładzie tcpdump powyżej, możesz wstawić w polu filtra WireShark to wyrażenie:

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

Lub wykorzystaj WireShark do znajomości protokołu HTTP:

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

Spowoduje to odfiltrowanie wyników przechwytywania tylko na pakiety używane w tej interakcji z serwerem Kalendarza Google. Możesz kliknąć każdy pakiet, aby wyświetlić jego zawartość i pogrupować produkt.

WSKAZÓWKA: możesz kliknąć prawym przyciskiem myszy jeden z pakietów i wybrać „Obserwuj strumień TCP”, aby wyświetlić żądania sekwencyjnie w jednym oknie.

WireShark udostępnia kilka sposobów zapisywania informacji o przechwytywaniu. Możesz zapisać jeden, niektóre lub wszystkie pakiety. Podczas przeglądania strumienia TCP wystarczy kliknąć przycisk „Zapisz jako”, aby zapisać tylko odpowiednie pakiety. Możesz też zaimportować dane wyjściowe z tcpdump i wyświetlić je w WireShark.

Problem: SSL i szyfrowanie

Częstym problemem narzędzi do przechwytywania pakietów jest brak możliwości wyświetlania danych zaszyfrowanych przy użyciu połączenia SSL. Powyższy przykład uzyskuje dostęp do publicznego kanału, więc protokół SSL nie jest wymagany. Jeśli jednak przykładowy kanał uzyskał dostęp do kanału prywatnego, klient będzie musiał się uwierzytelnić w usłudze uwierzytelniania Google, która wymaga połączenia SSL.

Fragment kodu poniżej jest podobny do poprzedniego przykładu, ale w tym przypadku CalendarService wysyła żądanie metakanału kalendarza użytkownika, który jest prywatnym kanałem wymagającym uwierzytelnienia. Aby uwierzytelnić, wywołaj metodę setUserCredentials. Ta metoda powoduje wysłanie żądania HTTPS do usługi ClientLogin i pobranie tokena uwierzytelniania z odpowiedzi. Obiekt CalendarService będzie wówczas uwzględniać token uwierzytelniania we wszystkich kolejnych żądaniach.

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();

Weź pod uwagę ruch sieciowy wymagany do uwierzytelnienia i uzyskania dostępu do prywatnego pliku danych Google Data API:

  1. Przesyłanie danych logowania użytkownika do usługi ClientLogin
    • Wyślij POST HTTP na adres https://www.google.com/accounts/ClientLogin z tymi parametrami w treści wiadomości:
      • E-mail – adres e-mail użytkownika.
      • Hasło – hasło użytkownika.
      • source – określa aplikację kliencką. Powinien mieć format nazwafirmy-nazwa-aplikacji-identyfikatora. W przykładach użyto nazwy ExampleCo-FiddlerSSLExample-1.
      • service – nazwa usługi Kalendarz Google to „cl”.
  2. Odbierz token autoryzacji
    • Jeśli żądanie uwierzytelniania się nie powiedzie, otrzymasz kod stanu HTTP 403 Zabroniony.
    • Jeśli operacja się uda, odpowiedź usługi będzie zwracała kod stanu HTTP 200 OK i trzy długie kody alfanumeryczne w treści odpowiedzi: SID, LSID i Auth. Wartość Auth to token autoryzacji.
  3. Żądanie metatagu prywatnego kalendarza
    • Wyślij HTTP HTTP GET na adres http://www.google.com/calendar/feeds/default z tym nagłówkiem:
    • Authorization: GoogleLogin auth=<yourAuthToken>
      

Spróbuj uruchomić ten fragment kodu i sprawdzić ruch w sieci przez WireShark (użyj filtra „http || ssl”). Zobaczysz pakiety SSL i TLS powiązane z transakcją, ale pakiety ClientClient i odpowiedzi są szyfrowane w pakietach „Application Data”. Nie martw się, teraz skupimy się na narzędziu, które może ujawnić takie zaszyfrowane informacje.

Fiddler

Fiddler to kolejne graficzne narzędzie do przechwytywania pakietów, ale zachowuje się całkiem inaczej niż obecne narzędzia. Fiddler pełni rolę pośrednika między Twoją aplikacją a usługami zdalnymi, z którymi aktywnie się kontaktujesz. W ten sposób stajesz się pośrednikiem. Fiddler nawiązuje połączenie SSL z aplikacją i zdalną usługą internetową, odszyfrowuje ruch z jednego punktu końcowego, przechwytuje zwykły tekst i ponownie szyfruje ruch przed jego wysłaniem. Fiddler jest dostępny tylko w przypadku przeprosin dla użytkowników systemów Windows i macOS.

Uwaga: obsługa SSL wymaga Fiddlera w wersji 2 i .NET Framework w wersji 2.0.

Ruch sieciowy w Fiddlerie można głównie wyświetlać na karcie Inspektora sesji. Karty podrzędne najbardziej przydatne podczas debugowania problemów z interfejsami API danych Google to:

  • Nagłówki – nagłówki HTTP mają format zwijany.
  • Auth (Uwierzytelnianie) – nagłówki uwierzytelniania.
  • Nieprzetworzone – pokazuje zawartość pakietów sieciowych w tekście ASCII.

WSKAZÓWKA: aby włączyć lub wyłączyć robienie zdjęć, kliknij ikonę w lewym dolnym rogu okna Fiddlera.

Fiddler używa platformy .NET do konfigurowania połączeń sieciowych, by używał Fiddlera jako serwera proxy. Oznacza to, że wszystkie połączenia nawiązane za pomocą przeglądarki Internet Explorer lub kodu .NET będą domyślnie widoczne w Fiddlerie. Ruch z powyższej próbki kodu Java nie zostanie jednak wyświetlony, ponieważ Java ma inny sposób konfigurowania serwerów proxy HTTP.

W Javie możesz ustawić serwer proxy HTTP, korzystając z właściwości systemowych. Fiddler działa na porcie 8888. Aby przeprowadzić instalację lokalną, możesz użyć kodu Java, by użyć Fiddlera jako serwera proxy HTTP i HTTPS. Aby to zrobić, dodaj te wiersze:

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

Jeśli uruchomisz przykładowy kod z tymi wierszami, w rzeczywistości otrzymasz nieprzyjemny zrzut stosu z pakietu zabezpieczeń 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
Zrzut ekranu Fiddlera
Fiddler może odszyfrowywać i wyświetlać ruch SSL.

Ten błąd występuje, gdy nie można zweryfikować certyfikatu zwróconego z serwera za pomocą połączenia SSL. W tym przypadku zły certyfikat pochodzi z Fiddlera i działa jak człowiek pośrodku. Fiddler generuje certyfikaty na bieżąco, a ponieważ Fiddler nie jest zaufanym wystawcą, certyfikaty Java nie będą w stanie skonfigurować połączenia SSL.

Uwaga: gdy aplikacja Fiddler jest uruchomiona, każde połączenie SSL utworzone w przeglądarce Internet Explorer aktywuje alert „Bezpieczeństwa” z pytaniem, czy mimo to chcesz kontynuować sprawdzanie certyfikatu. Możesz kliknąć „Wyświetl certyfikat”, aby zobaczyć certyfikat wygenerowany przez Fiddlera.

Jak więc obejść ten wyjątek zabezpieczeń? Zasadniczo musisz ponownie skonfigurować platformę zabezpieczeń Java w zaufaniu do wszystkich certyfikatów. Na szczęście nie musisz wymyślać koła jeszcze raz – wypróbuj rozwiązanie Franciszka Labrie i dodaj metodę SSLUtilities.trustAllHttpsCertificates() do powyższego przykładu.

Gdy skonfigurujesz Java pod kątem używania Fiddlera jako serwera proxy i wyłączysz domyślną weryfikację certyfikatu, możesz uruchomić przykład i zobaczyć cały ruch kierowany kablem w postaci zwykłego tekstu. Nie kraść hasła!

Pamiętaj, że ta transakcja to tylko jeden mały przykład ruchu SSL. Niektóre aplikacje internetowe korzystają wyłącznie z połączeń SSL, więc debugowanie ruchu HTTP nie jest możliwe bez odszyfrowywania danych.

Podsumowanie

tcpdump jest dostępny w systemach Linux, Mac OS X i Windows. To świetne narzędzie, które pozwala szybko znaleźć potrzebne informacje. Istnieją jednak narzędzia graficzne przedstawiające ruch w sieci w formatach, które łatwiej zrozumieć. tcpdump oferuje o wiele więcej opcji i możliwości filtrowania niż te omówione tutaj. Aby zobaczyć pełny opis funkcji tcpdump, wpisz „man tcpdump” lub odwiedź stronę mancpt.

Program WireShark jest też dostępny w systemach Linux, Mac OS X i Windows. Dzięki wbudowanej obsłudze setek protokołów WireShark jest przydatnym narzędziem do wielu aplikacji, nie tylko do debugowania stron HTTP. W tym wprowadzeniu ledwie zarysowujemy wiele możliwości WireSharka. Aby dowiedzieć się więcej, wpisz „man shashark” lub wejdź na stronę WireShark.

Fiddler ma też wiele świetnych funkcji, ale to, co je wyróżnia, to możliwość odszyfrowywania ruchu SSL. Więcej informacji znajdziesz na stronie Fiddler2.

Te narzędzia do przechwytywania pakietów to świetne narzędzia, które możesz mieć na pasku narzędzi. Obserwatorzy zauważą, że wszystkie są bezpłatne. Następnym razem, gdy będziesz korzystać z interfejsów API Google i zobaczysz coś podejrzanego, wyjmij jeden z tych analizatorów sieciowych i przyjrzyj się bliżej temu, co widać w przewodach. Jeśli nie możesz znaleźć problemu, zawsze możesz zadać pytanie na naszej grupie dyskusyjnej. Podanie odpowiednich komunikatów sieciowych pomoże innym osobom zrozumieć i zdiagnozować dany problem.

Powodzenia i życzenia!

Zasoby