वायर पर: API डेवलपर के लिए नेटवर्क कैप्चर टूल

लेन लियाब्रटन, Google डेटा एपीआई टीम
जून 2007

सुविधा के बारे में जानकारी

वेब सेवाओं से इंटरैक्ट करने वाले ऐप्लिकेशन डेवलप करने से, समस्याओं का एक खास सेट बनता है. निराशा का एक सामान्य स्रोत यह नहीं जानना है कि सर्वर पर सटीक रूप से क्या संदेश भेजा गया था या क्या प्रतिक्रिया मिली थी. हमारे अनुसार जिन्हें हम सर्वर पर भेज रहे हैं, और हमारे वायर में वास्तव में क्या हो रहा है, इनके बीच अंतर होने के कारण सबसे ज़्यादा कठिन बग का पता लगाना पड़ता है.

इस लेख में ऐसे कई टूल दिए गए हैं जो वायर पर मौजूद डेटा को ज़्यादा उपयोगी और उपयोगी बनाने में मदद कर सकते हैं. आम तौर पर, इन्हें "पैकेट स्निफ़र" कहा जाता है और ये टूल, आपके नेटवर्क इंटरफ़ेस में चलने वाले सभी नेटवर्क पैकेट को कैप्चर करते हैं. इन पैकेट के कॉन्टेंट और उन्हें भेजने और पाने के क्रम की जांच करना, डीबग करने की उपयोगी तकनीक हो सकती है.

उदाहरण के लिए: सार्वजनिक फ़ीड को फिर से पाना

मैंने साइकल की एक सवारी करने के लिए, साइकलिंग टीम बनाई है. साथ ही, इवेंट, जैसे कि जानकारी वाले सेशन, टीम फ़ंडरेज़र, और ट्रेनिंग राइड के लिए एक कैलेंडर बनाया है. मैंने इस कैलेंडर को सार्वजनिक कर दिया है, ताकि टीम के सदस्य और अन्य राइडर कैलेंडर को देख सकें और इवेंट में भाग ले सकें. मैं आने वाले इवेंट के साथ न्यूज़लेटर भी भेजना चाहता/चाहती हूं, इसलिए Google कैलेंडर वेबसाइट से जानकारी कॉपी करने के बजाय, मैं इस कैलेंडर की क्वेरी करने और इवेंट फिर से पाने के लिए Google कैलेंडर डेटा API का इस्तेमाल कर सकता/सकती हूं.

Google Calendar API दस्तावेज़ में, इस बात की जानकारी दी गई है कि प्रोग्राम के हिसाब से, अपने कैलेंडर से इंटरैक्ट करने के लिए RESTful Google Data API का इस्तेमाल कैसे किया जाए. (एडिटर की जानकारी: v3 के तहत, Google Calendar API अब Google डेटा फ़ॉर्मैट का इस्तेमाल नहीं करता.) सबसे पहले कैलेंडर सेटिंग पेज पर बटन पर क्लिक करके कैलेंडर के इवेंट फ़ीड का URL पाएं:

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

Google Calendar दस्तावेज़ को रेफ़रंस के तौर पर इस्तेमाल करके, मैं कैलेंडर इवेंट को वापस ला सकता हूं और उन्हें इस तरह से दिखा सकता हूं. जैसे, PUBLIC_FEED_URL में इवेंट फ़ीड का यूआरएल होता है.

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

इससे मेरे कैलेंडर पर इवेंट की बुनियादी सूची बनती है:

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

ऊपर दिए गए कोड स्निपेट में कैलेंडर इवेंट के शीर्षक दिखाए गए हैं. हालांकि, हमें सर्वर से मिलने वाले बाकी डेटा का क्या होगा? Java क्लाइंट लाइब्रेरी, किसी फ़ीड या एंट्री को एक्सएमएल के तौर पर आउटपुट करना आसान नहीं बनाती है. भले ही, एक्सएमएल पूरी तरह से काम न करता हो. अनुरोध के साथ दिखने वाले एचटीटीपी हेडर का क्या होगा? क्या क्वेरी प्रॉक्सी या रीडायरेक्ट की गई थी? ज़्यादा मुश्किल कार्रवाइयों की वजह से, ये सवाल लगातार ज़रूरी होते जा रहे हैं. ऐसा खास तौर पर तब हो रहा है, जब कुछ गलत हो जाता है और हमें गड़बड़ियां मिलती हैं. पैकेट स्निफ़िंग सॉफ़्टवेयर, नेटवर्क ट्रैफ़िक की जानकारी देकर इन सवालों के जवाब दे सकता है.

Tcpdump

tcpdump एक कमांड लाइन टूल है जो Unix जैसे प्लैटफ़ॉर्म पर काम करता है, लेकिन इसमें Windows Windows पोर्ट भी होता है जिसे WinDump कहते हैं. tcpdump, ज़्यादातर पैकेट स्निफ़र की तरह, आपके नेटवर्क कार्ड को नुकसान पहुंचाने वाले मोड में रखता है. इसके लिए, सुपर उपयोगकर्ता के खास अधिकारों की ज़रूरत होती है. tcpdump का उपयोग करने के लिए, नेटवर्क नेटवर्क सेट करें जिस पर उसे सुनना है, और नेटवर्क ट्रैफ़िक को stdout पर भेजा जाएगा:

sudo tcpdump -i eth0

अगर आप इस निर्देश को चलाते हैं, तो आप पर हर तरह के नेटवर्क ट्रैफ़िक से हमला कर दिया जाएगा, जिनमें से कुछ की पहचान आप नहीं कर पाएंगे. आप आउटपुट को बाद में किसी फ़ाइल और grep में फ़ॉरवर्ड कर सकते हैं. हालांकि, ऐसा करने से कई फ़ाइलें बड़ी हो सकती हैं. ज़्यादातर पैकेट कैप्चर सॉफ़्टवेयर में कुछ फ़िल्टर करने की सुविधा होती है. इससे, आपको सिर्फ़ वह डेटा मिलता है जो आपको चाहिए.

tcpdump, नेटवर्क ट्रैफ़िक की अलग-अलग विशेषताओं के आधार पर फ़िल्टर करने की सुविधा देता है. उदाहरण के लिए, आप tcpdump को पोर्ट 80 (एचटीटीपी मैसेज) पर आने वाले या उससे आने वाले ट्रैफ़िक को सिर्फ़ अपने एक्सप्रेशन के ज़रिए, नीचे दिए गए एक्सप्रेशन में डालकर बता सकते हैं:

dst or src host <hostname> and port 80

फ़िल्टर एक्सप्रेशन से मेल खाने वाले हर पैकेट के लिए, tcpdump टाइमस्टैंप, स्रोत का डेस्टिनेशन और डेस्टिनेशन, और कई टीसीपी फ़्लैग दिखाएगा. यह जानकारी अहम हो सकती है, क्योंकि इसमें पैकेट भेजने और पाने का क्रम दिखता है.

अक्सर पैकेट की सामग्री को देखना भी उपयोगी होता है. '-A' फ़्लैग, tcpdump को ASCII में हर पैकेट को प्रिंट करने के लिए कहता है, जिससे एचटीटीपी हेडर और मैसेज के मुख्य भाग का पता चलता है. '-s' फ़्लैग का इस्तेमाल यह बताने के लिए किया जाता है कि कितने बाइट दिखाने हैं (जहां '-s 0' का मतलब है, मैसेज के मुख्य हिस्से को छोटा न करना).

इन सभी को मिलाकर, हमें यह निर्देश मिलता है:

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

अगर आप इस निर्देश को चलाते हैं, तो ऊपर दिया गया छोटा .Java उदाहरण चलाएं, आपको इस कार्रवाई में शामिल सभी नेटवर्क कम्यूनिकेशन दिखेंगे. ट्रैफ़िक में आपको एचटीटीपी 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

आपको 200 OK का रिस्पॉन्स मैसेज भी दिखेगा, जिसमें Google डेटा फ़ीड होगा. ध्यान दें कि फ़ीड को चार पैकेट में बांटा गया है:

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>

इस आउटपुट में सभी एचटीटीपी हेडर और कॉन्टेंट शामिल होते हैं. साथ ही, इसमें टीसीपी के कई फ़्लैग भी मौजूद होते हैं. यहां सारा डेटा मौजूद है, लेकिन इसे पढ़ना और समझना मुश्किल है. ऐसे कई ग्राफ़िकल टूल हैं जो इस डेटा को देखना आसान बनाते हैं.

वायर शार्क (पहले इसे ईथरियल कहा जाता था)

Wireshark का स्क्रीन कैप्चर
Wireशाख, नेटवर्क ट्रैफ़िक को कई तरीकों से दिखाता है.

Wireशार्क एक ग्राफ़िकल टूल है, जिसे libpcap से बनाया गया है, यह वही लाइब्रेरी है जिस पर tcpdump बनाया गया है और वह Linux, Mac OS X और Windows पर उपलब्ध है. वायर शार्क के GUI से पैकेट कैप्चर डेटा की व्याख्या और उसके साथ इंटरैक्ट करने के कई नए तरीके मिलते हैं. उदाहरण के लिए, जब आपके नेटवर्क इंटरफ़ेस से पैकेट कैप्चर किए जाते हैं, तो वे इस्तेमाल किए जा रहे प्रोटोकॉल के आधार पर अलग-अलग रंगों में दिखते हैं. ट्रैफ़िक को टाइमस्टैंप, सोर्स, डेस्टिनेशन, और प्रोटोकॉल के हिसाब से भी क्रम में लगाया जा सकता है.

अगर पैकेट की सूची में कोई पंक्ति चुनी जाती है, तो Wireshark एक ऐसा ट्रीट ट्री में पैकेट हेडर में आईपी, टीसीपी और प्रोटोकॉल से जुड़ी खास जानकारी दिखाएगा. डेटा को स्क्रीन के नीचे HEX और ASCII में भी दिखाया जाता है.

हालांकि, वायर शार्क की विज़ुअल प्रकृति की वजह से नेटवर्क ट्रैफ़िक को समझना आसान हो जाता है, फिर भी आप ज़्यादातर मामलों में नेटवर्क ट्रैफ़िक को फ़िल्टर करना चाहेंगे. वायर शार्क में फ़िल्टर करने की बेहतरीन सुविधाएं हैं, जिनमें सैकड़ों प्रोटोकॉल की सुविधा शामिल है.

सलाह: उपलब्ध प्रोटोकॉल देखने और मुश्किल फ़िल्टर बनाने के लिए, वायर शार्क की विंडो के सबसे ऊपरी हिस्से पर मौजूद बटन पर क्लिक करें.

ऊपर दिए गए tcpdump उदाहरण में इस्तेमाल किए गए फ़िल्टर को फिर से बनाने के लिए, आप वायर शार्क फ़िल्टर बॉक्स में ये एक्सप्रेशन डाल सकते हैं:

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

इसके अलावा, HTTP के बारे में Wire जानते हैं,

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

इससे, Google Calendar सर्वर के साथ किए गए इस इंटरैक्शन में शामिल पैकेट के लिए नतीजे कैप्चर हो जाएंगे. लेन-देन और कॉन्टेंट देखने के लिए, हर पैकेट पर क्लिक किया जा सकता है.

सलाह: किसी एक पैकेट पर दायां क्लिक करके, उसके अनुरोध और जवाब को एक ही विंडो में दिखाने के लिए, "टीसीपी स्ट्रीम को फ़ॉलो करें" को चुनें.

वायर कैप्चर से कैप्चर की जानकारी को सेव किया जा सकता है. आपके पास एक, कुछ या सभी पैकेट सेव करने का विकल्प है. अगर आप TCP स्ट्रीम देख रहे हैं, तो आप केवल प्रासंगिक पैकेट सहेजने के लिए बस "इस रूप में सेव करें" बटन क्लिक कर सकते हैं. इसके अलावा, tcpdump कैप्चर से आउटपुट इंपोर्ट करके, उसे वायर शार्क पर देखा जा सकता है.

समस्या: एसएसएल और एन्क्रिप्ट (सुरक्षित) करने का तरीका

आम तौर पर, पैकेट कैप्चर टूल में, एसएसएल कनेक्शन के ज़रिए एन्क्रिप्ट (सुरक्षित) किए गए डेटा को ऐक्सेस नहीं किया जा सकता. ऊपर दिया गया उदाहरण सार्वजनिक फ़ीड को ऐक्सेस करता है, इसलिए एसएसएल की ज़रूरत नहीं है. हालांकि, अगर उदाहरण के ज़रिए निजी फ़ीड को ऐक्सेस किया जाता है, तो क्लाइंट को Google की पुष्टि करने वाली सेवा की मदद से पुष्टि करनी होगी. इसके लिए, एसएसएल कनेक्शन की ज़रूरत होती है.

फ़ॉलो करने वाला स्निपेट पिछले उदाहरण की तरह है, लेकिन यहां CalendarService उपयोगकर्ता के कैलेंडर मेटाफ़ीड का अनुरोध किया जाता है, जो एक निजी फ़ीड है जिसके लिए पुष्टि करना ज़रूरी है. पुष्टि करने के लिए, setUserCredentials तरीके पर कॉल करें. यह तरीका ClientLogin सेवा के लिए HTTPS अनुरोध ट्रिगर करता है और प्रतिक्रिया से प्रमाणीकरण टोकन लेता है. इसके बाद, CalendarService ऑब्जेक्ट, पुष्टि करने वाले टोकन को बाद के सभी अनुरोधों में शामिल करेगा.

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

किसी निजी Google Data API फ़ीड की पुष्टि करने और उसे ऐक्सेस करने के लिए ज़रूरी नेटवर्क ट्रैफ़िक को ध्यान में रखें:

  1. ClientLogin सेवा पर उपयोगकर्ता क्रेडेंशियल सबमिट करें
    • मैसेज के मुख्य हिस्से में इन पैरामीटर के साथ https://www.google.com/accounts/ClientLogin पर एचटीटीपी POST भेजें:
      • ईमेल - उपयोगकर्ता का ईमेल पता.
      • Passwd - उपयोगकर्ता का पासवर्ड.
      • source - आपके क्लाइंट ऐप्लिकेशन की पहचान करता है. companyName-applicationName-versionID के तौर पर, फ़ॉर्म भरना चाहिए. उदाहरणों में ExampleCo-FiddlerSSLExample-1 नाम का इस्तेमाल किया गया है.
      • सेवा - Google कैलेंडर सेवा का नाम 'cl' है.
  2. ऑथराइज़ेशन टोकन पाएं
    • अगर पुष्टि करने का अनुरोध पूरा नहीं होता है, तो आपको एचटीटीपी 403 अनुमति का स्टेटस कोड मिलेगा.
    • अगर यह सफल होता है, तो इस सेवा से जवाब एक एचटीटीपी 200 OK स्थिति कोड के साथ जवाब के मुख्य भाग में तीन लंबे अक्षर और अंक वाला कोड होता है: SID, LSID, और Auth. Auth वैल्यू, ऑथराइज़ेशन टोकन है.
  3. निजी कैलेंडर का मेटाफ़ीड भेजने का अनुरोध करें
    • http://www.google.com/calendar/feeds/default पर निम्न शीर्षलेख वाला GET HTTP भेजें:
    • Authorization: GoogleLogin auth=<yourAuthToken>
      

इस स्निपेट को चलाने और Wire शार्क में नेटवर्क ट्रैफ़िक को देखने की कोशिश करें (फ़िल्टर के रूप में 'http || ssl' का इस्तेमाल करके). आपको लेन-देन में शामिल SSL और TLS पैकेट दिखेंगे, लेकिन ClientLogin अनुरोध और जवाब पैकेट "ऐप्लिकेशन डेटा" पैकेट में एन्क्रिप्ट किए गए हैं. चिंता न करें, इसके बाद हम एक टूल देखेंगे जो वास्तव में एन्क्रिप्ट की गई इस जानकारी को उजागर कर सकता है.

Fiddler

फ़िडलर ग्राफ़िक स्निफ़िंग का एक और टूल है, लेकिन यह अब तक दिखाए गए टूल से काफ़ी अलग तरीके से काम करता है. Fiddler आपके ऐप्लिकेशन और उन रिमोट सेवाओं के बीच प्रॉक्सी के रूप में काम करता है जिनके साथ आप इंटरैक्ट कर रहे हैं. यह सेटिंग, प्रभावी रूप से मिडल-इन-द-मिडल (आम तौर पर लोगों के लिए उपलब्ध) में बदल जाती है. Fiddler आपके ऐप्लिकेशन और रिमोट वेब सेवा, दोनों के साथ एसएसएल कनेक्शन जोड़ता है. यह एक एंडपॉइंट से ट्रैफ़िक को डिक्रिप्ट करता है, सादे टेक्स्ट को कैप्चर करता है, और ट्रैफ़िक को भेजने से पहले उसे फिर से एन्क्रिप्ट (सुरक्षित) करता है. हमें खेद है कि Fiddler, आपके Windows और Mac उपयोगकर्ताओं के लिए केवल Windows-सॉरी के लिए उपलब्ध है.

ध्यान दें: एसएसएल सहायता के लिए Fiddler वर्शन 2 और .NET फ़्रेमवर्क वर्शन 2.0 की ज़रूरत होती है.

Fiddler में ज़्यादातर नेटवर्क ट्रैफ़िक देखने के लिए, सेशन इंस्पेक्टर टैब का इस्तेमाल किया जाता है. Google Data API की समस्याओं को डीबग करने के लिए, इन सब-टैब का इस्तेमाल किया जाता है:

  • हेडर - छोटे किए जा सकने वाले ट्री फ़ॉर्मैट में एचटीटीपी हेडर दिखाता है.
  • पुष्टि करें - पुष्टि करने से जुड़े हेडर दिखाता है.
  • रॉ - ASCII टेक्स्ट में नेटवर्क पैकेट के कॉन्टेंट दिखाता है

सलाह: कैप्चर करना को चालू और बंद करने के लिए, फ़िडलर विंडो के निचले बाएं कोने में आइकॉन पर क्लिक करें.

Fiddler, नेटवर्क कनेक्शन को कॉन्फ़िगर करने के लिए, .NET फ़्रेमवर्क का इस्तेमाल करता है, ताकि Fiddler को प्रॉक्सी के तौर पर इस्तेमाल किया जा सके. इसका मतलब है कि Internet Explorer या .NET कोड से किया गया कोई भी कनेक्शन, डिफ़ॉल्ट रूप से Fiddler में दिखेगा. हालांकि, ऊपर दिए गए Java नमूने से आने वाला ट्रैफ़िक नहीं दिखेगा, क्योंकि Java में एचटीटीपी प्रॉक्सी सेट अप करने का तरीका अलग है.

Java में, आप सिस्टम प्रॉपर्टी का इस्तेमाल करके एचटीटीपी प्रॉक्सी को सेट कर सकते हैं. Fiddler पोर्ट 8888 पर चलता है, इसलिए किसी लोकल इंस्टॉलेशन के लिए, Java कोड को Fiddler को एचटीटीपी और एचटीटीपीएस के प्रॉक्सी के तौर पर इस्तेमाल करने के लिए, इन लाइनों को जोड़ें:

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

अगर आप इन पंक्तियों में नमूना चलाते हैं, तो आपको 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, तेज़ी से सर्टिफ़िकेट जनरेट करता है, क्योंकि Fiddler भरोसेमंद नहीं है. इसलिए, इन सर्टिफ़िकेट की वजह से Java कनेक्शन सेट अप नहीं कर पाएगा.

ध्यान दें: Fiddler के चालू होने पर, Internet Explorer में बनाया जाने वाला कोई भी SSL कनेक्शन, 'सुरक्षा चेतावनी' ट्रिगर करेगा और पूछेगा कि आप स्केचिंग प्रमाणपत्र के बावजूद आगे बढ़ना चाहते हैं या नहीं. फ़िडलर ने जो सर्टिफ़िकेट जनरेट किया है उसे देखने के लिए, 'सर्टिफ़िकेट देखें' पर क्लिक करें.

ऐसे में, सुरक्षा से जुड़े इस अपवाद के बारे में कैसे जाना जा सकता है? मूल रूप से, आपको सभी सर्टिफ़िकेट पर भरोसा करने के लिए, Java के सुरक्षा फ़्रेमवर्क को फिर से कॉन्फ़िगर करना होगा. अच्छी बात यह है कि आपको व्हील को दोबारा बनाने की ज़रूरत नहीं है. Francis Labrie का समाधान देखें और ऊपर दिए गए उदाहरण में SSLUtilities.trustAllHttpsCertificates() विधि जोड़ें.

जावा को प्रॉक्सी के तौर पर इस्तेमाल करने और डिफ़ॉल्ट सर्टिफ़िकेट की पुष्टि को बंद करने के बाद, आप यह उदाहरण चला सकते हैं और वायर में भेजे गए सभी ट्रैफ़िक को सादे टेक्स्ट में देख सकते हैं. मेरा पासवर्ड न चुराएं!

याद रखें, यह प्रमाणीकरण लेन-देन SSL ट्रैफ़िक का बस एक छोटा सा उदाहरण है. कुछ वेब ऐप्लिकेशन, खास तौर पर एसएसएल कनेक्शन का इस्तेमाल करते हैं. इसलिए, डेटा को डिक्रिप्ट करने के तरीके के बिना ही एचटीटीपी ट्रैफ़िक को डीबग करना मुमकिन नहीं है.

नतीजा

tcpdump, Linux, Mac OS X, और Windows पर उपलब्ध है और यह उस समय एक शानदार टूल है जब आपको पता है कि आप क्या खोज रहे हैं और बस एक छोटे से कैप्चर की आवश्यकता है. हालांकि, कुछ ऐसे ग्राफ़िकल टूल हैं जो नेटवर्क ट्रैफ़िक को ऐसे फ़ॉर्मैट में पेश करते हैं जिसे समझना आसान होता है. tcpdump में यहां बताए गए टूल से ज़्यादा विकल्प और फ़िल्टर करने की क्षमताएं हैं. tcpdump की काम की क्षमता की पूरी जानकारी के लिए, 'man tcpdump' लिखें या ऑनलाइन tcpdump man page पर जाएं.

Wire शार्क, Linux, Mac OS X, और Windows पर भी उपलब्ध है. सैकड़ों प्रोटोकॉल के लिए बिल्ट-इन सहायता, वायर डीबग को सिर्फ़ एचटीटीपी डीबग करने के लिए ही नहीं, बल्कि कई ऐप्लिकेशन के लिए काम का टूल बनाती है. यह जानकारी, Wire शार्क की कई क्षमताओं को शायद स्क्रैच कर चुकी है. ज़्यादा जानकारी के लिए, "man वायर शार्क" टाइप करें या Wire शार्क की वेबसाइट पर जाएं.

फ़िडलर में बहुत-सी बेहतरीन सुविधाएं हैं, लेकिन जो चीज़ इसे दूसरों से अलग बनाती है, वह है एसएसएल ट्रैफ़िक को डिक्रिप्ट करना. ज़्यादा जानकारी के लिए, Fiddler2 की वेबसाइट पर जाएं.

इन स्निफ़िंग ऐप्लिकेशन को, आपके टूलबेल्ट में रखने के लिए बेहतरीन टूल हैं और निगरानी करने वाले पाठकों ने देखा होगा कि वे मुफ़्त हैं! अगली बार जब आप Google API पर काम कर रहे हों और आपको कुछ गड़बड़ी नज़र आती है, तो इनमें से किसी एक नेटवर्क विश्लेषक को निकाल लें और वायर पर क्या है, इस पर गौर करें. अगर आपको समस्या हल करने में समस्या आ रही है, तो आप हमारे चर्चा वाले ग्रुप में अपना सवाल कभी भी पोस्ट कर सकते हैं. प्रासंगिक नेटवर्क मैसेज शामिल करने से दूसरों को आपकी खास समस्या समझने और उसका विश्लेषण करने में मदद मिलेगी.

हमारी शुभकामनाएं आपके पास हैं!

रिसॉर्स