Wire: כלים ללכידת רשתות למפתחי API

Lan LiaBraaten, צוות Google Data APIs
יוני 2007

מבוא

פיתוח אפליקציות שמקיימות אינטראקציה עם שירותי אינטרנט יוצרות קבוצה ייחודית של בעיות. מקור נפוץ לתסכול אינו ידוע במדויק איזו הודעה נשלחה לשרת או התקבלה תגובה. כמה מהבאגים הקשים ביותר למעקב הם על ידי ניתוק בין מה שלדעתנו אנחנו שולחים לשרת, לבין מה שקורה בפועל בחוט.

מאמר זה מציג מספר כלים שיכולים לעזור להגדיל את החשיפה של הנתונים בכבל ולהפוך אותם למועילים יותר. הכלים האלה, בדרך כלל מכונים "קובציות נתונים", שמתעדים את כל חבילות הרשת שמעבירות את ממשק הרשת שלכם. בדיקת התוכן של החבילות האלה והסדר שבו הן נשלחו והתקבלו יכולה להיות טכניקה שימושית לניפוי באגים.

דוגמה: אחזור של פיד ציבורי

הכנתי קבוצה לרכיבה על אופניים למתקן של עמותה, ויצרתי יומן לאירועים כמו פעילויות אינפורמטיביות, גיוס תרומות לקבוצות ואימונים. הגדרתי את היומן הזה כציבורי כדי שחברי צוות ונוסעים אחרים יוכלו להציג את היומן ולהשתתף באירועים. אני רוצה גם לשלוח ניוזלטר עם אירועים קרובים, כך שבמקום להעתיק את המידע מהאתר של יומן Google, אפשר להשתמש בממשק API של יומן Google כדי לשלוח שאילתות על היומן הזה ולאחזר אירועים.

במסמכי התיעוד של ה-Google Calendar API מוסבר איך להשתמש ב-RESTful Google Data API כדי לבצע פעולות פרוגרמטיות ביומן שלי. (הערה לעורך: החל מגרסה 3, ממשק ה-API של יומן Google כבר לא משתמש בפורמט של נתוני Google.) כדי לקבל את כתובת האתר של פיד האירועים ביומן, צריך ללחוץ על הלחצן בדף ההגדרות של היומן:

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

באמצעות התיעוד של יומן Google להתייחסות, יש לי אפשרות לאחזר ולהציג אירועים ביומן כמו בדוגמה הזו, כאשר PUBLIC_FEED_URL מכיל את כתובת ה-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 כדי ליצור בקלות פלט של פיד או של רשומה בתור XML, וגם אם הם תעשו זאת, ה-XML הוא לא כל הסיפור. מה בנוגע לכותרות ה-HTTP הנלוות לבקשה? האם השאילתה הועברה לשרת proxy או הועברה לכתובת אחרת? עם פעולות מורכבות יותר, השאלות האלה הופכות לחשובות יותר ויותר, במיוחד כאשר דברים משתבשים ואנחנו מקבלים שגיאות. תוכנת מרחץ חבילות יכולה לענות על השאלות האלה על ידי חשיפת התנועה ברשת.

tcpdump

tcpdump הוא כלי של שורת פקודה שפועל בפלטפורמות כמו Unix, אבל קיימת גם יציאת Windows שנקראת WinDump. כמו רוב פריטי המנה בחבילה, tcpdump מעבירה את כרטיס הרשת שלך למצב מוגזם המחייב הרשאות של משתמש-על. כדי להשתמש ב-tcpdump, יש לציין את ממשק הרשת שעליו רוצים להאזין והתנועה ברשת תישלח אל stdout:

sudo tcpdump -i eth0

אם תריצו את הפקודה הזו, תקבלו פגיעות מכל סוג של תנועה ברשת, שאת חלקן לא תזהו. אפשר פשוט להעביר את הפלט לקובץ אחר ולבצע גרפים מאוחר יותר, אבל זה יכול לגרום לקבצים גדולים מאוד. רוב התוכנות של תיעוד חבילות כוללות מנגנוני סינון מובנים, כך שאתם מתעדים רק את מה שנחוץ לכם.

tcpdump תומך בסינון המבוסס על מאפיינים שונים של התנועה ברשת. לדוגמה, אפשר להגדיר ל-tcpdump למשוך את התנועה אל השרת שלכם או ממנו ביציאה 80 (הודעות HTTP) באמצעות הוספת שם המארח של השרת בביטוי הבא:

dst or src host <hostname> and port 80

עבור כל חבילה התואמת לביטוי המסנן, tcpdump יציג חותמת זמן, המקור והיעד של החבילה ומספר דגלי TCP. המידע הזה יכול להיות בעל ערך, מאחר שהוא מציג את הסדר שבו נשלחו החבילות ונשלחו.

כדאי גם לראות את התוכן של החבילות. הדגל '-A' מורה ל-tcpdump להדפיס כל חבילה ב-ASCII, תוך חשיפת כותרות ה-HTTP וגוף ההודעה. הסימון '-s' משמש כדי לציין כמה בייטים להציג (כאשר '-s 0' פירושו שלא לחתוך את גוף ההודעה).

בסיכום כל השלבים, נקבל את הפקודה הבאה:

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

אם תריצו את הפקודה הזו ותפעילו את הדוגמה הקצרה של .Java שלמעלה, תראו את כל הודעות התקשורת הקשורות לפעולה הזו. תנועת הגולשים שתופיע היא בקשת ה-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

תוצג גם הודעת התשובה 200 OK שכוללת את פיד הנתונים של Google. הערה: הפיד מחולק ל-4 חבילות:

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>

הפלט הזה כולל את כל הכותרות והתוכן של HTTP, וגם כמה דגלי TCP מסתוריים. כל הנתונים נמצאים כאן, אבל די קשה לקרוא ולהבין. יש כמה כלים גרפיים שבעזרתם קל להציג את הנתונים האלה.

WireShark (לשעבר Ethereal)

צילום מסך של Wireshark
WireShark מציג את תנועת הרשת בכמה דרכים.

WireShark הוא כלי גרפי שנבנה עם libpcap, אותה ספרייה שעליה מבוססת tcpdump, וזמינה ב-Linux, ב-Mac OS X וב-Windows. ממשק ה-GUI של WireShark מאפשר מספר דרכים חדשות לפרשנות ולאינטראקציה עם נתוני תיעוד חבילות. לדוגמה, כשחבילות מתועדות בממשק הרשת, הן מוצגות בצבעים שונים בהתאם לפרוטוקול שבו הן משתמשות. אפשר גם למיין את תנועת הגולשים לפי חותמת זמן, מקור, יעד ופרוטוקול.

אם בוחרים שורה ברשימת החבילות, Wireshark יציג כתובות IP, TCP ומידע אחר ספציפי לפרוטוקולים בכותרות החבילות בעץ הקריא למשתמשים. הנתונים מוצגים גם ב-HEX וב-ASCII בתחתית המסך.

למרות שהאופי החזותי של WireShark מקל על הבנת התנועה ברשת, ברוב המקרים עדיין תרצה לסנן את התנועה ברשת. ל-WireShark יש יכולות סינון יעילות, כולל תמיכה למאות פרוטוקולים.

טיפ: כדי להציג את הפרוטוקולים הזמינים ולבנות מסננים מורכבים, לוחצים על הלחצן ליד החלק העליון של החלון WireShark.

כדי ליצור מחדש את המסנן בדוגמה שלמעלה של tcpdump, ניתן להוסיף את הביטוי הבא לתיבת המסנן WireShark:

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

או ניצול הידע של WireShark לגבי HTTP:

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

פעולה זו תסנן את תוצאות הצילום רק לחבילות הכלולות באינטראקציה זו עם שרת יומן Google. אפשר ללחוץ על כל חבילה כדי לראות את התוכן ולחלק את העסקה.

טיפ: אפשר ללחוץ לחיצה ימנית על אחת החבילות ולבחור באפשרות 'מעקב אחר TCP Stream' כדי להציג את הבקשות והתשובות ברצף בחלון יחיד.

WireShark מספק כמה דרכים לשמור את פרטי הצילום. אפשר לשמור חבילה אחת, חלק ממנה או את כל החבילות. אם צופים בסטרימינג ב-TCP, אפשר פשוט ללחוץ על הלחצן "שמירה בשם" כדי לשמור רק את החבילות הרלוונטיות. אפשר גם לייבא את הפלט מתיעוד tcpdump ולהציג אותו ב-WireShark.

בעיה: SSL והצפנה

חסר נפוץ בכלים של תיעוד חבילות הוא חוסר יכולת לראות נתונים שמוצפנים באמצעות חיבור SSL. הדוגמה שלמעלה ניגשת אל פיד ציבורי, לכן אין צורך ב-SSL. עם זאת, אם בוצעה גישה לדוגמה אל הפיד הפרטי, הלקוח יצטרך לבצע אימות באמצעות שירות האימות של Google, שבו כן נדרש חיבור SSL.

קטע הקוד הנפתח דומה לדוגמה הקודמת, אבל כאן CalendarService מבקש את המטא-נתונים של היומן של המשתמש, שהוא פיד פרטי שדורש אימות. כדי לאמת, צריך להתקשר לשיטה setUserCredentials. השיטה הזו מפעילה בקשת HTTPS בשירות ClientLogin ומוציאה את אסימון האימות מהתגובה. לאחר מכן, האובייקט 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
    • שולחים HTTP POST אל https://www.google.com/accounts/ClientLogin עם הפרמטרים הבאים בגוף ההודעה:
      • אימייל – כתובת האימייל של המשתמש.
      • Passwd – הסיסמה של המשתמש.
      • source - מזהה את אפליקציית הלקוח שלך. הטופס צריך להיות מסוג companyName-applicationName-versionID. בדוגמאות נעשה שימוש בשם exampleCo-FiddlerSSLExample-1.
      • service – שם השירות ביומן Google הוא 'cl'.
  2. קבלת אסימון ההרשאה
    • אם בקשת האימות תיכשל, יישלח אליכם קוד סטטוס HTTP 403 אסור.
    • אם התגובה תצליח, התשובה מהשירות היא קוד סטטוס HTTP 200 OK, ושלושה קודים אלפאנומריים ארוכים בגוף התגובה: SID, LSID ו-Auth. הערך של Auth הוא אסימון ההרשאה.
  3. בקשת מטא-נתונים של יומן פרטי
    • שלח HTTP GET אל http://www.google.com/calendar/feeds/default עם הכותרת הבאה:
    • Authorization: GoogleLogin auth=<yourAuthToken>
      

כדאי להריץ את קטע הקוד הזה ולצפות בתנועת הרשת ב-WireShark (באמצעות 'http || ssl' כמסנן). יופיעו חבילות SSL ו-TLS שמשויכות לעסקה, אבל חבילות ה-ClientLogin וחבילות התגובות מוצפנות בחבילות של "נתוני האפליקציה". אל דאגה, בשלב הבא נבחן כלי שיכול לחשוף את המידע המוצפן הזה.

Fiddler

Fiddler הוא כלי נוסף לרענון חבילות גרפי, אבל הוא פועל בצורה שונה מהכלים שהוצגו עד כה. Fiddler פועל כשרת proxy בין האפליקציה שלך לשירותים המרוחקים שאיתם יש לך אינטראקציה, וכתוצאה מכך הופך לאדם באמצע. Fiddler יוצר חיבור SSL עם האפליקציה ועם שירות האינטרנט המרוחק, תוך פענוח התנועה מנקודת קצה אחת, תיעוד הטקסט ללא הצפנה והצפנה מחדש של התנועה לפני השליחה. לצערנו, Fiddler זמין רק עבור Windows-sory לכל משתמשי Mac ו-Linux.

הערה: כדי לקבל תמיכה ב-SSL, עליך להתקין את Fiddler בגרסה 2 ובגרסה 2.0 של NET Framework.

את התנועה ברשת ב-Fiddler בדרך כלל מבצעים דרך הכרטיסייה 'בוחן ביקור'. כרטיסיות המשנה השימושיות ביותר לניפוי באגים בממשקי ה-API של Google Data הן:

  • כותרות - הצגת כותרות ה-HTTP בפורמט עץ שניתן לכיווץ.
  • Auth – מציג את כותרות האימות.
  • Raw – הצגת התוכן של חבילות רשת בטקסט ASCII

טיפ: לחץ על הסמל בפינה הימנית התחתונה של חלון הכינור כדי להפעיל או לכבות את הצילום.

Fiddler משתמש במסגרת NET .כדי להגדיר חיבורי רשת לשימוש ב-Fiddler בתור שרת proxy. כלומר, כל החיבורים עם Internet Explorer או עם קוד NET יופיעו כברירת מחדל ב-Fiddler. עם זאת, התנועה מהדגימה של Java שלמעלה לא תופיע מכיוון של-Java יש דרך שונה להגדיר שרתי proxy של HTTP.

ב-Java, אפשר להגדיר שרת proxy של HTTP באמצעות מאפייני מערכת. Fiddler פועל ביציאה 8888, כך שעבור התקנה מקומית ניתן לגרום ל-Java להשתמש ב-Fiddler בתור שרת proxy ל-HTTP ול-HTTPS על ידי הוספת השורות הבאות:

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
צילום מסך של הכינור
ה פידל יכול לפענח ולהציג תנועת SSL.

השגיאה הזו מופיעה כאשר לא ניתן לאמת את האישור שמוחזר מהשרת בחיבור SSL. במקרה כזה, האישור הגרוע מגיע מ-Fiddler, כאיש שבאמצע. Fiddler יוצר אישורים במהירות, ומכיוון שה-Fiddler אינו מנפיק מהימן, אישורים אלה יגרמו ל-Java להיכשל בהגדרת חיבור ה-SSL.

הערה: כאשר Fiddler פועל, כל חיבור SSL שאתה יוצר ב-Internet Explorer יפעיל 'התראת אבטחה' שתשאל אותך אם ברצונך להמשיך למרות האישור הסקוטי. ניתן ללחוץ על 'הצגת אישור' כדי לראות את האישור שנוצר על ידי Fiddler.

אז איך תוכל לעקוף את חריג האבטחה הזה? בעיקרון, עליך להגדיר מחדש את מסגרת האבטחה של Java כדי לסמוך על כל האישורים. למרבה המזל, לא צריך להמציא מחדש את הגלגל כאן. קראו את הפתרון של פרנסיס לארי והוסיפו את השיטה SSLUtilities.trustAllHttpsCertificates() לדוגמה שלמעלה.

לאחר שהגדרת ב-Java שימוש ב-Fiddler בתור שרת proxy והשבתת את אימות האישור המוגדר כברירת מחדל, תוכל להריץ את הדוגמה ולראות את כל התנועה שמועברת ברשת באמצעות טקסט פשוט. אל יגנו את הסיסמה שלי!

חשוב לזכור שעסקת האימות הזו היא רק דוגמה קטנה לתנועת SSL. חלק מיישומי האינטרנט משתמשים בחיבורי SSL בלבד, כך שניפוי באגים בתנועת HTTP לא מפריע לשאלה בלי שתהיה דרך לפענח את הנתונים.

סיכום

tcpdump זמין ב-Linux, ב-Mac OS X וב-Windows, והוא כלי נהדר כאשר יודעים מה מחפשים וצריכים צילום מהיר. עם זאת, יש כמה כלים גרפיים שמציגים את התנועה ברשת בפורמטים קלים להבנה. ב-tcpdump יש אפשרויות רבות יותר ויכולות סינון רבות יותר מאלה שצוינו כאן. לתיאור מלא של הפונקציונליות של tcpdump, מקלידים 'man tcpdump' או נכנסים לדף tcpdump man באינטרנט.

WireShark זמין גם ב-Linux, ב-Mac OS X וב-Windows. תמיכה מובנית במאות פרוטוקולים הופכת את WireShark לכלי שימושי עבור יישומים רבים, ולא רק לניפוי באגים ב-HTTP. המבוא הזה מגרד בקושי את היכולות הרבות של WireShark. למידע נוסף, הקלד "manshshark" או בקר באתר WireShark.

ל-Fiddler יש הרבה תכונות נהדרות, אבל מה שמבדיל אותו הוא היכולת לפענח את תנועת ה-SSL. מידע נוסף זמין באתר של Fiddler2.

אלו אפליקציות לעטיית חבילות הן כלי נהדר שיש בארגז הכלים שלכם, וקוראים נלהבים שמים לב שהן כולן בחינם! בפעם הבאה שעובדים עם ממשקי ה-API של Google ורואים משהו חשוד, שולפים את אחד ממנתחי הרשתות האלה ובוחנים לעומק את מה שקורה מחוץ לכבל. אם לא מצאתם את הבעיה, תמיד אפשר לפרסם שאלה בקבוצת הדיון שלנו. הכללת מסרים רלוונטיים ברשת תעזור לאחרים להבין ולאבחן את הבעיה הספציפית שלך.

בהצלחה ואחיזה נעימה!

משאבים