On the Wire: API Geliştiricileri İçin Ağ Yakalama Araçları

Lane LiaBraaten, Google Veri API'leri Ekibi
Haziran 2007

Giriş

Web hizmetleriyle etkileşim kuran uygulamalar geliştirirken benzersiz bir dizi sorunla karşılaşılır. Sunucuya tam olarak hangi iletinin gönderildiğini veya hangi yanıtın alındığını bilmemek yaygın bir sorun kaynağıdır. Takibi en zor olan hatalardan bazıları, sunucuya gönderdiğimizi düşündüğümüz veriler ile aslında kablo üzerinden geçen veriler arasındaki bağlantı kopukluğundan kaynaklanır.

Bu makalede, kablodaki verilerin daha görünür ve kullanışlı hale gelmesine yardımcı olabilecek çeşitli araçlar tanıtılmaktadır. Genellikle "paket koklayıcılar" olarak adlandırılan bu araçlar, ağ arayüzünüzde hareket eden tüm ağ paketlerini yakalar. Bu paketlerin içeriklerini ve gönderilip alınma sırasını incelemek, faydalı bir hata ayıklama tekniği olabilir.

Örnek: Herkese açık feed alma

Hayır amaçlı bir bisiklet turu için bisiklet takımı oluşturuyorum ve bilgi oturumları, takımın bağış toplama etkinlikleri ve antrenman turları gibi etkinlikler için bir takvim oluşturdum. Bu takvimi herkese açık hale getirdim. Böylece ekip üyeleri ve diğer sürücüler takvimi görüntüleyip etkinliklere katılabilir. Ayrıca, yaklaşan etkinlikleri içeren bir bülten göndermek istiyorum. Bu nedenle, Google Takvim web sitesindeki bilgileri kopyalamak yerine bu takvimi sorgulamak ve etkinlikleri almak için Google Takvim Veri API'sini kullanabilirim.

Google Calendar API belgelerinde, takvimimle programatik olarak etkileşim kurmak için RESTful Google Data API'nin nasıl kullanılacağı hakkında bilgi verilmektedir. (Editörün Notu: Google Takvim API, v3'ten itibaren Google Veri biçimini kullanmamaktadır.) Yapılacak ilk işlem, takvim ayarları sayfasındaki düğmesini tıklayarak takvimin etkinlik feed'i URL'sini almak olmalıdır:

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

Google Takvim dokümanlarını referans alarak, PUBLIC_FEED_URL yer tutucusunun etkinlik feed'i URL'sini tuttuğu bu tür takvim etkinliklerini alıp görüntüleyebilirim.

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

Bu işlem, takvimimdeki etkinliklerin temel bir listesini oluşturur:

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

Yukarıdaki kod snippet'inde takvim etkinliklerinin başlıkları gösteriliyor ancak sunucudan aldığımız verilerin geri kalanı ne olacak? Java istemci kitaplığı, feed'i veya girişi XML olarak çıkışı kolaylaştırmaz. Kolaylaştırsa bile XML, hikayenin tamamı değildir. İsteğe eşlik eden HTTP üstbilgileri ne olacak? Sorguya proxy uygulandı mı veya sorgu yeniden yönlendirildi mi? Daha karmaşık işlemler söz konusu olduğunda bu sorular giderek daha önemli hale gelir. Özellikle işler ters gittiğinde ve hatalar aldığımızda bu soruların önemi artar. Paket koklama yazılımı, ağ trafiğini ortaya çıkararak bu soruları yanıtlayabilir.

tcpdump

tcpdump, Unix benzeri platformlarda çalışan bir komut satırı aracıdır ancak WinDump adlı bir Windows bağlantı noktası da vardır. Çoğu paket koklayıcı gibi tcpdump da ağ kartınızı karışık moda geçirir. Bu işlem için süper kullanıcı ayrıcalıkları gerekir. tcpdump'ı kullanmak için dinlenecek ağ arayüzünü belirtmeniz yeterlidir. Ağ trafiği stdout'a gönderilir:

sudo tcpdump -i eth0

Bu komutu çalıştırırsanız her türlü ağ trafiğiyle karşılaşırsınız. Bunlardan bazılarını tanımayabilirsiniz. Çıktıyı bir dosyaya yönlendirip daha sonra grep komutuyla arayabilirsiniz ancak bu, çok büyük dosyalarla sonuçlanabilir. Çoğu paket yakalama yazılımında, yalnızca ihtiyacınız olanı yakalamanızı sağlayan bazı filtreleme mekanizmaları bulunur.

tcpdump, ağ trafiğinin çeşitli özelliklerine göre filtrelemeyi destekler. Örneğin, sunucunuzun ana makine adını aşağıdaki ifadeye ekleyerek tcpdump'a yalnızca 80 numaralı bağlantı noktasındaki (HTTP mesajları) sunucunuza veya sunucunuzdan gelen trafiği yakalamasını söyleyebilirsiniz:

dst or src host <hostname> and port 80

tcpdump, filtre ifadesiyle eşleşen her paket için zaman damgası, paketin kaynağı ve hedefi ile çeşitli TCP işaretleri gösterir. Bu bilgi, paketlerin gönderilme ve alınma sırasını gösterdiği için değerli olabilir.

Paketlerin içeriğini görmek de genellikle faydalıdır. "-A" işareti, tcpdump'a her paketi ASCII olarak yazdırmasını söyler. Böylece HTTP üstbilgileri ve ileti gövdesi gösterilir. "-s" işareti, kaç bayt görüntüleneceğini belirtmek için kullanılır ("-s 0", mesaj gövdesinin hiç kesilmemesi anlamına gelir).

Tüm bunları bir araya getirdiğimizde aşağıdaki komutu elde ederiz:

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

Bu komutu çalıştırıp yukarıdaki kısa .Java örneğini yürüttüğünüzde, bu işlemde yer alan tüm ağ iletişimini görürsünüz. Trafik arasında HTTP GET isteğini görürsünüz:

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

Ayrıca, Google verileri feed'ini içeren 200 OK yanıt mesajını da görürsünüz. Feed'in dört paket arasında bölündüğünü unutmayın:

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>

Bu çıkış, tüm HTTP başlıklarını ve içeriğini, ayrıca birkaç şifreli TCP işaretini içerir. Tüm veriler burada yer alsa da okumak ve anlamak biraz zordur. Bu verileri görüntülemeyi kolaylaştıran çeşitli grafik araçları vardır.

WireShark (eski adıyla Ethereal)

Wireshark&#39;ın ekran görüntüsü
WireShark, ağ trafiğini çeşitli şekillerde gösterir.

WireShark, tcpdump'ın temelini oluşturan libpcap kitaplığıyla oluşturulmuş grafiksel bir araçtır ve Linux, Mac OS X ve Windows'ta kullanılabilir. WireShark'ın GUI'si, paket yakalama verilerini yorumlamanın ve bunlarla etkileşim kurmanın çeşitli yeni yollarını sunar. Örneğin, ağ arayüzünüzden paketler yakalandıkça kullandıkları protokole göre farklı renklerde gösterilirler. Trafiği zaman damgasına, kaynağa, hedefe ve protokole göre de sıralayabilirsiniz.

Paket listesinde bir satır seçerseniz Wireshark, paket başlıklarındaki IP, TCP ve diğer protokole özgü bilgileri okunabilir bir ağaç yapısında gösterir. Veriler, ekranın alt kısmında HEX ve ASCII olarak da gösterilir.

WireShark'ın görsel yapısı ağ trafiğini anlamayı kolaylaştırsa da çoğu durumda ağ trafiğini filtrelemek isteyeceksiniz. WireShark, yüzlerce protokol desteği de dahil olmak üzere güçlü filtreleme özelliklerine sahiptir.

İPUCU: Kullanılabilir protokolleri görüntülemek ve karmaşık filtreler oluşturmak için WireShark penceresinin üst kısmındaki düğmesini tıklayın.

Yukarıdaki tcpdump örneğinde kullanılan filtreyi yeniden oluşturmak için aşağıdaki ifadeyi WireShark filtre kutusuna ekleyebilirsiniz:

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

Alternatif olarak, WireShark'ın HTTP bilgisiyle ilgili avantajlardan yararlanabilirsiniz:

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

Bu işlem, yakalama sonuçlarınızı yalnızca Google Takvim sunucusuyla olan bu etkileşime dahil olan paketlerle filtreler. İçerikleri görmek ve işlemi bir araya getirmek için her paketi tıklayabilirsiniz.

İPUCU: İstekleri ve yanıtları tek bir pencerede sırayla göstermek için paketlerden birini sağ tıklayıp "TCP Akışını Takip Et"i seçebilirsiniz.

WireShark, yakalama bilgilerinizi kaydetmek için çeşitli yöntemler sunar. Paketlerin bir kısmını veya tamamını kaydedebilirsiniz. Bir TCP akışını görüntülüyorsanız yalnızca ilgili paketleri kaydetmek için "Farklı Kaydet" düğmesini tıklamanız yeterlidir. Ayrıca, tcpdump yakalamasından elde edilen çıktıyı içe aktarıp WireShark'ta görüntüleyebilirsiniz.

Bir sorun: SSL ve şifreleme

Paket yakalama araçlarının yaygın bir eksikliği, SSL bağlantısı üzerinden şifrelenen verileri görüntüleyememeleridir. Yukarıdaki örnekte herkese açık bir feed'e erişildiğinden SSL gerekli değildir. Ancak örnek, özel bir feed'e erişiyorsa istemcinin Google kimlik doğrulama hizmetiyle kimliğini doğrulaması gerekir. Bu işlem için SSL bağlantısı gerekir.

Aşağıdaki snippet, önceki örneğe benzer ancak burada CalendarService, kullanıcının takvim meta feed'ini (kimlik doğrulama gerektiren özel bir feed) istiyor. Kimlik doğrulamak için setUserCredentials yöntemini çağırmanız yeterlidir. Bu yöntem, ClientLogin hizmetine bir HTTPS isteği gönderir ve yanıttan kimlik doğrulama jetonunu alır. CalendarService nesnesi, sonraki tüm isteklerde kimlik doğrulama jetonunu içerir.

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

Özel bir Google Data API feed'inde kimlik doğrulaması yapmak ve feed'e erişmek için gereken ağ trafiğini göz önünde bulundurun:

  1. Kullanıcı kimlik bilgilerini ClientLogin hizmetine gönderme
    • İleti gövdesinde aşağıdaki parametrelerle birlikte https://www.google.com/accounts/ClientLogin adresine bir HTTP POST isteği gönderin:
      • E-posta: Kullanıcının e-posta adresi.
      • Passwd: Kullanıcının şifresi.
      • source: İstemci uygulamanızı tanımlar. companyName-applicationName-versionID biçiminde olmalıdır. Örneklerde ExampleCo-FiddlerSSLExample-1 adı kullanılmaktadır.
      • service: Google Takvim hizmetinin adı "cl"dir.
  2. Yetkilendirme jetonunu alma
    • Kimlik doğrulama isteği başarısız olursa HTTP 403 Yasaklandı durum kodunu alırsınız.
    • İşlem başarılı olursa hizmetten gelen yanıt, HTTP 200 OK durum kodu ve yanıtın gövdesinde üç uzun alfanümerik kod (SID, LSID ve Auth) olur. Auth değeri, yetkilendirme jetonudur.
  3. Özel takvim meta feed'i isteğinde bulunma
    • http://www.google.com/calendar/feeds/default adresine aşağıdaki üstbilgiyle bir HTTP GET isteği gönderin:
    • Authorization: GoogleLogin auth=<yourAuthToken>
      

Bu snippet'i çalıştırmayı ve WireShark'ta ağ trafiğini görüntülemeyi deneyin ("http || ssl" filtresini kullanarak). İşleme dahil olan SSL ve TLS paketlerini görürsünüz ancak ClientLogin isteği ve yanıt paketleri "Uygulama Verileri" paketlerinde şifrelenir. Endişelenmeyin, bir sonraki bölümde bu şifrelenmiş bilgileri gerçekten ortaya çıkarabilecek bir aracı inceleyeceğiz.

Fiddler

Fiddler da grafiksel bir paket koklama aracıdır ancak şimdiye kadar sunulan araçlardan oldukça farklı davranır. Fiddler, uygulamanız ile etkileşimde bulunduğunuz uzak hizmetler arasında proxy görevi görür ve etkili bir şekilde ortadaki adam haline gelir. Fiddler, hem uygulamanız hem de uzak web hizmetiyle SSL bağlantısı kurar, bir uç noktadan gelen trafiğin şifresini çözer, düz metni yakalar ve trafiği göndermeden önce yeniden şifreler. Fiddler yalnızca Windows'da kullanılabilir. Mac ve Linux kullanıcıları bu özellikten yararlanamaz.

Not: SSL desteği için Fiddler sürüm 2 ve .NET Framework sürüm 2.0 gerekir.

Fiddler'da ağ trafiğini görüntüleme işlemi çoğunlukla Oturum İnceleyici sekmesi üzerinden yapılır. Google Veri API'leriyle ilgili sorunları ayıklamak için en yararlı olan alt sekmeler şunlardır:

  • Üstbilgiler: HTTP üstbilgilerini daraltılabilir ağaç biçiminde gösterir.
  • Auth: Kimlik doğrulama üstbilgilerini gösterir.
  • Ham: Ağ paketlerinin içeriğini ASCII metin olarak gösterir.

İPUCU: Yakalamayı açmak ve kapatmak için Fiddler penceresinin sol alt köşesindeki simgesini tıklayın.

Fiddler, ağ bağlantılarını Fiddler'ı proxy olarak kullanacak şekilde yapılandırmak için .NET Framework'ü kullanır. Bu nedenle, Internet Explorer veya .NET koduyla yaptığınız tüm bağlantılar varsayılan olarak Fiddler'da görünür. Ancak Java'nın HTTP proxy'lerini ayarlama şekli farklı olduğundan yukarıdaki Java örneğinden gelen trafik gösterilmez.

Java'da, sistem özelliklerini kullanarak HTTP proxy'sini ayarlayabilirsiniz. Fiddler 8888 numaralı bağlantı noktasında çalışır. Bu nedenle, yerel bir yükleme için şu satırları ekleyerek Java kodunun HTTP ve HTTPS için Fiddler'ı proxy olarak kullanmasını sağlayabilirsiniz:

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

Örneği bu satırlarla çalıştırırsanız Java güvenlik paketinden kötü bir yığın izi alırsınız:

[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&#39;ın ekran görüntüsü
Fiddler, SSL trafiğinin şifresini çözüp görüntüleyebilir.

Bu hata, SSL bağlantısında sunucudan döndürülen sertifika doğrulanamadığında oluşur. Bu durumda, kötü sertifika, ortadaki adam olarak hareket eden Fiddler'dan gelmektedir. Fiddler, sertifikaları anında oluşturur ve Fiddler güvenilir bir yayıncı olmadığından bu sertifikalar, Java'nın SSL bağlantısı kurarken başarısız olmasına neden olur.

Not: Fiddler çalışırken Internet Explorer'da yaptığınız tüm SSL bağlantıları, şüpheli sertifikaya rağmen devam etmek isteyip istemediğinizi soran bir "Güvenlik Uyarısı" tetikler. Fiddler'ın oluşturduğu sertifikayı görmek için "Sertifikayı Görüntüle"yi tıklayabilirsiniz.

Peki bu güvenlik istisnasını nasıl aşabilirsiniz? Temel olarak, tüm sertifikalara güvenmek için Java'nın güvenlik çerçevesini yeniden yapılandırmanız gerekir. Neyse ki bu konuda sıfırdan başlamanız gerekmiyor. Francis Labrie'nin çözümüne göz atın ve yukarıdaki örneğe SSLUtilities.trustAllHttpsCertificates() yöntemini ekleyin.

Java'yı Fiddler'ı proxy olarak kullanacak şekilde yapılandırıp varsayılan sertifika doğrulamasını devre dışı bıraktıktan sonra örneği çalıştırabilir ve kablo üzerinden düz metin olarak gönderilen trafiğin tamamını görebilirsiniz. Şifremi çalma!

Bu kimlik doğrulama işleminin, SSL trafiğinin yalnızca küçük bir örneği olduğunu unutmayın. Bazı web uygulamaları yalnızca SSL bağlantılarını kullanır. Bu nedenle, verilerin şifresini çözmenin bir yolu olmadan HTTP trafiğinde hata ayıklamak mümkün değildir.

Sonuç

tcpdump, Linux, Mac OS X ve Windows'da kullanılabilir. Ne aradığınızı bildiğiniz ve yalnızca hızlı bir yakalama yapmanız gerektiğinde harika bir araçtır. Ancak, ağ trafiğini anlaşılması daha kolay biçimlerde sunan bazı grafik araçları vardır. tcpdump, burada ele alınanlardan çok daha fazla seçeneğe ve filtreleme özelliğine sahiptir. tcpdump'ın işlevselliğiyle ilgili ayrıntılı bilgi için "man tcpdump" yazın veya tcpdump man sayfasını online olarak ziyaret edin.

WireShark; Linux, Mac OS X ve Windows'da da kullanılabilir. Yüzlerce protokol için yerleşik destek sunan WireShark, yalnızca HTTP hata ayıklama için değil birçok uygulama için faydalı bir araçtır. Bu giriş, WireShark'ın birçok özelliğinin sadece yüzeyini çiziyor. Daha fazla bilgi için "man wireshark" yazın veya WireShark web sitesini ziyaret edin.

Fiddler'da da birçok harika özellik bulunur ancak onu diğerlerinden ayıran özelliği, SSL trafiğinin şifresini çözebilmesidir. Daha fazla bilgi için Fiddler2 web sitesini ziyaret edin.

Bu paket koklama uygulamaları, araç kutunuzda bulundurmanız gereken harika araçlardır. Dikkatli okuyucular, bu uygulamaların hepsinin ücretsiz olduğunu fark etmiştir. Google API'leriyle bir sonraki çalışmanızda şüpheli bir durumla karşılaşırsanız bu ağ analizörlerinden birini kullanarak kablodaki verilere daha yakından bakın. Sorunu bulamıyorsanız her zaman tartışma grubumuzda soru yayınlayabilirsiniz. İlgili ağ mesajlarını eklemeniz, diğer kullanıcıların sorununuzu anlamasına ve teşhis etmesine yardımcı olur.

İyi şanslar ve iyi koklama seansları!

Kaynaklar