অন ​​দ্য ওয়্যার: API ডেভেলপারদের জন্য নেটওয়ার্ক ক্যাপচার টুল

Lane LiaBraaten, Google Data APIs টিম
জুন 2007

ভূমিকা

ওয়েব পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করে এমন অ্যাপ্লিকেশনগুলি বিকাশ করা সমস্যাগুলির একটি অনন্য সেট তৈরি করে৷ হতাশার একটি সাধারণ উৎস হল ঠিক কী বার্তা সার্ভারে পাঠানো হয়েছে বা কী প্রতিক্রিয়া পাওয়া গেছে তা না জানা। ট্র্যাক ডাউন করা সবচেয়ে কঠিন কিছু বাগ আমরা সার্ভারে কি পাঠাচ্ছি এবং আসলে তারের জুড়ে যা যাচ্ছে তার মধ্যে সংযোগ বিচ্ছিন্ন হওয়ার কারণে ঘটে।

এই নিবন্ধটি বেশ কয়েকটি সরঞ্জামের সাথে পরিচয় করিয়ে দেয় যা তারের ডেটাকে আরও দৃশ্যমান এবং দরকারী করতে সাহায্য করতে পারে। সাধারণত "প্যাকেট স্নিফার" বলা হয়, এই টুলগুলি আপনার নেটওয়ার্ক ইন্টারফেস জুড়ে চলা সমস্ত নেটওয়ার্ক প্যাকেট ক্যাপচার করে। এই প্যাকেটগুলির বিষয়বস্তু পরীক্ষা করা এবং যে ক্রমে সেগুলি পাঠানো এবং প্রাপ্ত করা হয়েছিল তা একটি কার্যকর ডিবাগিং কৌশল হতে পারে।

একটি উদাহরণ: একটি পাবলিক ফিড পুনরুদ্ধার করা

আমি একটি চ্যারিটি রাইডের জন্য একটি সাইক্লিং টিমকে একত্রিত করছি, এবং তথ্য সেশন, টিম ফান্ডরাইজার এবং ট্রেনিং রাইডের মতো ইভেন্টগুলির জন্য একটি ক্যালেন্ডার তৈরি করেছি৷ আমি এই ক্যালেন্ডারটি সর্বজনীন করেছি যাতে দলের সদস্যরা এবং অন্যান্য রাইডাররা ক্যালেন্ডারটি দেখতে এবং ইভেন্টগুলিতে অংশগ্রহণ করতে পারে৷ আমি আসন্ন ইভেন্টগুলির সাথে একটি নিউজলেটারও পাঠাতে চাই, তাই Google ক্যালেন্ডার ওয়েবসাইট থেকে তথ্য অনুলিপি করার পরিবর্তে, আমি এই ক্যালেন্ডারটি অনুসন্ধান করতে এবং ইভেন্টগুলি পুনরুদ্ধার করতে Google ক্যালেন্ডার ডেটা API ব্যবহার করতে পারি৷

Google ক্যালেন্ডার API ডকুমেন্টেশনে আমার ক্যালেন্ডারের সাথে প্রোগ্রামগতভাবে ইন্টারঅ্যাক্ট করার জন্য RESTful Google Data API কীভাবে ব্যবহার করতে হয় সে সম্পর্কে তথ্য রয়েছে। ( সম্পাদকের দ্রষ্টব্য: v3 থেকে, Google ক্যালেন্ডার API আর Google ডেটা বিন্যাস ব্যবহার করে না।) প্রথমে যা করতে হবে তা হল ক্যালেন্ডারের ইভেন্ট ফিড URL-এ ক্লিক করে ক্যালেন্ডার সেটিংস পৃষ্ঠায় বোতাম:

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

উপরের কোড স্নিপেট ক্যালেন্ডার ইভেন্টের শিরোনাম প্রদর্শন করে, কিন্তু সার্ভার থেকে আমরা প্রাপ্ত বাকি ডেটা সম্পর্কে কি? জাভা ক্লায়েন্ট লাইব্রেরি XML হিসাবে একটি ফিড বা এন্ট্রি আউটপুট করা সহজ করে না, এবং এমনকি যদি এটি করেও তবে XML পুরো গল্প নয়। অনুরোধ সহগামী HTTP শিরোনাম সম্পর্কে কি? ক্যোয়ারী প্রক্সি বা পুনঃনির্দেশিত ছিল? আরও জটিল ক্রিয়াকলাপের সাথে, এই প্রশ্নগুলি ক্রমশ গুরুত্বপূর্ণ হয়ে ওঠে, বিশেষ করে যখন জিনিসগুলি ভুল হয়ে যায় এবং আমরা ত্রুটি পাই। প্যাকেট স্নিফিং সফ্টওয়্যার নেটওয়ার্ক ট্র্যাফিক প্রকাশ করে এই প্রশ্নের উত্তর দিতে পারে।

tcpdump

tcpdump একটি কমান্ড লাইন টুল যা ইউনিক্স-এর মতো প্ল্যাটফর্মে কাজ করে, তবে WinDump নামে একটি উইন্ডোজ পোর্টও রয়েছে। বেশিরভাগ প্যাকেট স্নিফারের মতো, tcpdump আপনার নেটওয়ার্ক কার্ডকে প্রমিসকিউয়াস মোডে রাখে, যার জন্য সুপার ইউজারের বিশেষাধিকার প্রয়োজন। tcpdump ব্যবহার করতে, শুধুমাত্র শোনার জন্য নেটওয়ার্ক ইন্টারফেস নির্দিষ্ট করুন, এবং নেটওয়ার্ক ট্র্যাফিক stdout এ পাঠানো হবে:

sudo tcpdump -i eth0

আপনি যদি এই কমান্ডটি চালান, তাহলে আপনি সমস্ত ধরণের নেটওয়ার্ক ট্র্যাফিক দ্বারা বোমাবর্ষিত হবেন, যার মধ্যে কিছু আপনি ইভেন্ট চিনতে পারবেন না। আপনি কেবল একটি ফাইলে আউটপুট ফরোয়ার্ড করতে পারেন এবং পরে গ্রেপ করতে পারেন, তবে এটি কিছু খুব বড় ফাইলের দিকে নিয়ে যেতে পারে। বেশিরভাগ প্যাকেট ক্যাপচার সফ্টওয়্যারটিতে কিছু ফিল্টারিং মেকানিজম রয়েছে যাতে আপনি শুধুমাত্র আপনার যা প্রয়োজন তা ক্যাপচার করেন।

tcpdump নেটওয়ার্ক ট্র্যাফিকের বিভিন্ন বৈশিষ্ট্যের উপর ভিত্তি করে ফিল্টারিং সমর্থন করে। উদাহরণ স্বরূপ, আপনি tcpdump কে বলতে পারেন আপনার সার্ভারের পোর্ট 80 (HTTP মেসেজ) থেকে শুধুমাত্র ট্র্যাফিক ক্যাপচার করতে বা আপনার সার্ভারের হোস্টনাম নিম্নলিখিত এক্সপ্রেশনে প্রবেশ করান:

dst or src host <hostname> and port 80

ফিল্টার এক্সপ্রেশনের সাথে মেলে প্রতিটি প্যাকেটের জন্য, tcpdump একটি টাইমস্ট্যাম্প, প্যাকেটের উত্স এবং গন্তব্য এবং কয়েকটি TCP পতাকা প্রদর্শন করবে। এই তথ্যটি মূল্যবান হতে পারে কারণ এটি প্যাকেট পাঠানো এবং প্রাপ্ত করা অর্ডারটি দেখায়।

এটি প্রায়ই প্যাকেটের বিষয়বস্তু দেখতে দরকারী। '-A' পতাকা টিসিপিডাম্পকে ASCII-তে প্রতিটি প্যাকেট প্রিন্ট করতে বলে, HTTP শিরোনাম এবং বার্তা বডি প্রকাশ করে। '-s' পতাকাটি কতগুলি বাইট প্রদর্শন করতে হবে তা নির্দিষ্ট করতে ব্যবহৃত হয় (যেখানে '-s 0' মানে বার্তার মূল অংশটি মোটেও ছাঁটাই না করা)।

এটি সব একসাথে রাখলে আমরা নিম্নলিখিত কমান্ডটি পাই:

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

আপনি যদি এই কমান্ডটি চালান, তাহলে উপরের ছোট জাভা উদাহরণটি কার্যকর করুন, আপনি এই অপারেশনের সাথে জড়িত সমস্ত নেটওয়ার্ক যোগাযোগ দেখতে পাবেন। ট্রাফিকের মধ্যে আপনি 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

আপনি Google ডেটা ফিড ধারণকারী 200 OK প্রতিক্রিয়া বার্তাও দেখতে পাবেন। লক্ষ্য করুন যে ফিডটি চারটি প্যাকেটের মধ্যে বিভক্ত হয়েছে:

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 এর স্ক্রীন ক্যাপচার
ওয়্যারশার্ক বিভিন্ন উপায়ে নেটওয়ার্ক ট্রাফিক প্রদর্শন করে।

ওয়্যারশার্ক হল libpcap সহ নির্মিত একটি গ্রাফিকাল টুল, একই লাইব্রেরি যা tcpdump তৈরি করা হয়েছে এবং এটি Linux, Mac OS X এবং Windows এ উপলব্ধ। ওয়্যারশার্কের GUI প্যাকেট ক্যাপচার ডেটার সাথে ব্যাখ্যা এবং ইন্টারঅ্যাক্ট করার বিভিন্ন নতুন উপায় সক্ষম করে। উদাহরণস্বরূপ, আপনার নেটওয়ার্ক ইন্টারফেস থেকে প্যাকেটগুলি ক্যাপচার করা হলে, তারা যে প্রোটোকল ব্যবহার করছে তার উপর ভিত্তি করে সেগুলি বিভিন্ন রঙে প্রদর্শিত হয়৷ আপনি টাইমস্ট্যাম্প, উত্স, গন্তব্য এবং প্রোটোকল দ্বারা ট্র্যাফিক বাছাই করতে পারেন।

আপনি যদি প্যাকেটের তালিকায় একটি সারি নির্বাচন করেন, Wireshark একটি মানব-পাঠযোগ্য ট্রিতে প্যাকেট শিরোনামে IP, TCP এবং অন্যান্য প্রোটোকল-নির্দিষ্ট তথ্য প্রদর্শন করবে। স্ক্রীনের নীচে HEX এবং ASCII তেও ডেটা প্রদর্শিত হয়৷

যদিও ওয়্যারশার্কের চাক্ষুষ প্রকৃতি নেটওয়ার্ক ট্র্যাফিক বোঝা সহজ করে তোলে, আপনি এখনও বেশিরভাগ ক্ষেত্রে নেটওয়ার্ক ট্র্যাফিক ফিল্টার করতে চাইবেন। ওয়্যারশার্কের শত শত প্রোটোকলের সমর্থন সহ শক্তিশালী ফিল্টারিং ক্ষমতা রয়েছে।

টিপ: উপলব্ধ প্রোটোকল দেখতে এবং জটিল ফিল্টার তৈরি করতে, ক্লিক করুন ওয়্যারশার্ক উইন্ডোর উপরে বোতাম।

উপরের tcpdump উদাহরণে ব্যবহৃত ফিল্টারটি পুনরায় তৈরি করতে, আপনি WireShark ফিল্টার বাক্সে নিম্নলিখিত অভিব্যক্তিটি সন্নিবেশ করতে পারেন:

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

অথবা ওয়্যারশার্কের HTTP সম্পর্কে জ্ঞান লাভ করুন:

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

এটি Google ক্যালেন্ডার সার্ভারের সাথে এই মিথস্ক্রিয়ায় জড়িত প্যাকেটগুলিতে আপনার ক্যাপচারের ফলাফলগুলিকে ফিল্টার করবে৷ আপনি বিষয়বস্তু দেখতে প্রতিটি প্যাকেটে ক্লিক করতে পারেন এবং লেনদেনটি একসাথে করতে পারেন।

টিপ: আপনি প্যাকেটগুলির একটিতে ডান-ক্লিক করতে পারেন এবং একটি একক উইন্ডোতে ক্রমানুসারে অনুরোধ এবং প্রতিক্রিয়াগুলি প্রদর্শন করতে "টিসিপি স্ট্রীম অনুসরণ করুন" চয়ন করতে পারেন৷

ওয়্যারশার্ক আপনার ক্যাপচার তথ্য সংরক্ষণ করার বিভিন্ন উপায় প্রদান করে। আপনি একটি, কিছু বা সমস্ত প্যাকেট সংরক্ষণ করতে পারেন। আপনি যদি একটি TCP স্ট্রীম দেখছেন তবে আপনি কেবলমাত্র প্রাসঙ্গিক প্যাকেটগুলি সংরক্ষণ করতে "সংরক্ষণ করুন" বোতামে ক্লিক করতে পারেন৷ আপনি একটি tcpdump ক্যাপচার থেকে আউটপুট আমদানি করতে পারেন এবং WireShark এ দেখতে পারেন।

একটি সমস্যা: SSL এবং এনক্রিপশন

প্যাকেট ক্যাপচার সরঞ্জামগুলির একটি সাধারণ ত্রুটি হল SSL সংযোগের মাধ্যমে এনক্রিপ্ট করা ডেটা দেখতে অক্ষমতা। উপরের উদাহরণটি একটি পাবলিক ফিড অ্যাক্সেস করে, তাই SSL এর প্রয়োজন নেই। যাইহোক, যদি উদাহরণটি একটি ব্যক্তিগত ফিড অ্যাক্সেস করে, তাহলে ক্লায়েন্টকে Google প্রমাণীকরণ পরিষেবার সাথে প্রমাণীকরণ করতে হবে, যার জন্য একটি SSL সংযোগ প্রয়োজন।

নিচের স্নিপেটটি আগের উদাহরণের মতোই, কিন্তু এখানে CalendarService ব্যবহারকারীর ক্যালেন্ডার মেটাফিডের জন্য অনুরোধ করে, যা একটি ব্যক্তিগত ফিড যার জন্য প্রমাণীকরণ প্রয়োজন। প্রমাণীকরণ করতে, শুধু setUserCredentials পদ্ধতিতে কল করুন। এই পদ্ধতিতে একটি 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 ডেটা API ফিড প্রমাণীকরণ এবং অ্যাক্সেস করার জন্য প্রয়োজনীয় নেটওয়ার্ক ট্র্যাফিক বিবেচনা করুন:

  1. ClientLogin পরিষেবাতে ব্যবহারকারীর শংসাপত্র জমা দিন
    • https://www.google.com/accounts/ClientLogin-এ একটি HTTP POST পাঠান মেসেজের বডিতে নিম্নলিখিত প্যারামিটার সহ:
      • ইমেল - ব্যবহারকারীর ইমেল ঠিকানা।
      • Passwd - ব্যবহারকারীর পাসওয়ার্ড।
      • উত্স - আপনার ক্লায়েন্ট অ্যাপ্লিকেশন সনাক্ত করে। কোম্পানির নাম-অ্যাপ্লিকেশননাম-সংস্করণ আইডি ফর্ম নেওয়া উচিত। উদাহরণগুলো ExampleCo-FiddlerSSLEexample-1 নামটি ব্যবহার করে।
      • পরিষেবা - Google ক্যালেন্ডার পরিষেবার নাম 'cl'।
  2. অনুমোদন টোকেন গ্রহণ করুন
    • প্রমাণীকরণের অনুরোধ ব্যর্থ হলে, আপনি একটি HTTP 403 নিষিদ্ধ স্ট্যাটাস কোড পাবেন।
    • যদি এটি সফল হয়, তাহলে পরিষেবা থেকে প্রতিক্রিয়া হল একটি HTTP 200 ওকে স্ট্যাটাস কোড, সাথে প্রতিক্রিয়ার মূল অংশে তিনটি দীর্ঘ বর্ণসংকেত কোড: SID , LSID , এবং AuthAuth মান হল অনুমোদনের টোকেন।
  3. ব্যক্তিগত ক্যালেন্ডার মেটাফিডের জন্য অনুরোধ করুন
    • নিম্নলিখিত হেডার সহ http://www.google.com/calendar/feeds/default-এ একটি HTTP GET পাঠান:
    • Authorization: GoogleLogin auth=<yourAuthToken>
      

এই স্নিপেটটি চালানোর চেষ্টা করুন এবং WireShark-এ নেটওয়ার্ক ট্র্যাফিক দেখার চেষ্টা করুন ('http || ssl' ফিল্টার হিসাবে ব্যবহার করে)। আপনি লেনদেনের সাথে জড়িত SSL এবং TLS প্যাকেটগুলি দেখতে পাবেন, কিন্তু ClientLogin অনুরোধ এবং প্রতিক্রিয়া প্যাকেটগুলি "অ্যাপ্লিকেশন ডেটা" প্যাকেটগুলিতে এনক্রিপ্ট করা হয়েছে৷ চিন্তা করবেন না, পরবর্তীতে আমরা একটি টুল দেখব যা আসলে এই এনক্রিপ্ট করা তথ্য প্রকাশ করতে পারে।

ফিডলার

ফিডলার হল আরেকটি গ্রাফিকাল প্যাকেট স্নিফিং টুল, কিন্তু এটি এখন পর্যন্ত উপস্থাপিত টুলের তুলনায় বেশ ভিন্নভাবে আচরণ করে। ফিডলার আপনার অ্যাপ্লিকেশন এবং দূরবর্তী পরিষেবাগুলির মধ্যে একটি প্রক্সি হিসাবে কাজ করে যেগুলির সাথে আপনি ইন্টারঅ্যাক্ট করছেন, কার্যকরভাবে একজন মধ্যম পুরুষ হয়ে উঠছেন৷ ফিডলার আপনার অ্যাপ্লিকেশন এবং দূরবর্তী ওয়েব পরিষেবা উভয়ের সাথে SSL সংযোগ স্থাপন করে, একটি প্রান্ত থেকে ট্র্যাফিক ডিক্রিপ্ট করে, প্লেইনটেক্সট ক্যাপচার করে এবং ট্র্যাফিকটি পাঠানোর আগে পুনরায় এনক্রিপ্ট করে। দুর্ভাগ্যবশত, ফিডলার শুধুমাত্র উইন্ডোজের জন্য উপলব্ধ - আপনার সমস্ত ম্যাক এবং লিনাক্স ব্যবহারকারীদের জন্য দুঃখিত।

দ্রষ্টব্য: SSL সমর্থনের জন্য Fiddler সংস্করণ 2 এবং .NET ফ্রেমওয়ার্ক সংস্করণ 2.0 প্রয়োজন৷

ফিডলারে নেটওয়ার্ক ট্র্যাফিক দেখা বেশিরভাগ সেশন ইন্সপেক্টর ট্যাবের মাধ্যমে করা হয়। Google Data API-এর সাথে ডিবাগিং সমস্যার জন্য সবচেয়ে উপযোগী সাব-ট্যাবগুলি হল:

  • শিরোলেখ - একটি সংকোচনযোগ্য ট্রি বিন্যাসে HTTP শিরোনাম দেখায়।
  • প্রমাণ - প্রমাণীকরণ শিরোনাম দেখায়।
  • Raw - ASCII টেক্সটে নেটওয়ার্ক প্যাকেটের বিষয়বস্তু দেখায়

টিপ: ক্লিক করুন ফিডলার উইন্ডোর নীচের বাম কোণে আইকন ক্যাপচারিং চালু এবং বন্ধ করতে।

Fiddler একটি প্রক্সি হিসাবে Fiddler ব্যবহার করার জন্য নেটওয়ার্ক সংযোগ কনফিগার করতে .NET ফ্রেমওয়ার্ক ব্যবহার করে৷ এর মানে হল যে ইন্টারনেট এক্সপ্লোরার, বা .NET কোডের সাথে আপনার করা যেকোনো সংযোগ ডিফল্টরূপে ফিডলারে প্রদর্শিত হবে। যাইহোক, উপরের জাভা নমুনা থেকে ট্র্যাফিক দেখানো হবে না কারণ জাভা HTTP প্রক্সি সেট আপ করার একটি ভিন্ন উপায় আছে।

জাভাতে, আপনি সিস্টেম বৈশিষ্ট্য ব্যবহার করে HTTP প্রক্সি সেট করতে পারেন। ফিডলার 8888 পোর্টে চলে, তাই স্থানীয় ইনস্টলেশনের জন্য আপনি এই লাইনগুলি যোগ করে HTTP এবং HTTPS-এর জন্য একটি প্রক্সি হিসাবে Fiddler ব্যবহার করতে পারেন:

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

আপনি যদি এই লাইনগুলির সাথে নমুনাটি চালান, আপনি আসলে জাভা নিরাপত্তা প্যাকেজ থেকে একটি বাজে স্ট্যাক ট্রেস পাবেন:

[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 সংযোগে সার্ভার থেকে ফিরে আসা শংসাপত্রটি যাচাই করা যায় না৷ এই ক্ষেত্রে, খারাপ সার্টিফিকেট ফিডলারের কাছ থেকে আসছে, মধ্যম-মানুষ হিসাবে কাজ করছে। ফিডলার ফ্লাইতে শংসাপত্র তৈরি করে, এবং যেহেতু ফিডলার একজন বিশ্বস্ত ইস্যুকারী নয়, এই সার্টিফিকেটগুলি জাভাকে SSL সংযোগ সেট আপ করতে ব্যর্থ করবে৷

দ্রষ্টব্য: যখন ফিডলার চলছে, ইন্টারনেট এক্সপ্লোরারে আপনি যে কোনও SSL সংযোগ তৈরি করেন তা একটি 'নিরাপত্তা সতর্কতা' ট্রিগার করবে যা জিজ্ঞাসা করবে যে আপনি স্কেচি শংসাপত্র থাকা সত্ত্বেও এগিয়ে যেতে চান কিনা। ফিডলার যে শংসাপত্র তৈরি করেছে তা দেখতে আপনি 'শংসাপত্র দেখুন' ক্লিক করতে পারেন।

তাহলে কিভাবে আপনি এই নিরাপত্তা ব্যতিক্রম কাছাকাছি পেতে পারেন? মূলত আপনাকে সমস্ত সার্টিফিকেট বিশ্বাস করতে জাভা এর নিরাপত্তা কাঠামো পুনরায় কনফিগার করতে হবে। সৌভাগ্যবশত, আপনাকে এখানে চাকাটি পুনরায় উদ্ভাবন করতে হবে না- ফ্রান্সিস ল্যাব্রির সমাধানটি পরীক্ষা করে দেখুন এবং উপরের উদাহরণে SSLUtilities.trustAllHttpsCertificates() পদ্ধতি যোগ করুন।

একবার আপনি একটি প্রক্সি হিসাবে Fiddler ব্যবহার করার জন্য Java কনফিগার করেছেন এবং ডিফল্ট শংসাপত্র যাচাইকরণ নিষ্ক্রিয় করেছেন, আপনি উদাহরণটি চালাতে পারেন এবং প্লেইনটেক্সটে তারের উপর পাঠানো সমস্ত ট্র্যাফিক দেখতে পারেন। আমার পাসওয়ার্ড চুরি করবেন না!

মনে রাখবেন, এই প্রমাণীকরণ লেনদেনটি SSL ট্রাফিকের একটি ছোট উদাহরণ। কিছু ওয়েব অ্যাপ্লিকেশন একচেটিয়াভাবে SSL সংযোগ ব্যবহার করে, তাই ডেটা ডিক্রিপ্ট করার উপায় ছাড়াই HTTP ট্র্যাফিক ডিবাগ করা প্রশ্নের বাইরে।

উপসংহার

tcpdump Linux, Mac OS X, এবং Windows-এ উপলব্ধ, এবং যখন আপনি জানেন যে আপনি কী খুঁজছেন এবং একটি দ্রুত ক্যাপচার প্রয়োজন তখন এটি একটি দুর্দান্ত সরঞ্জাম। যাইহোক, কিছু গ্রাফিকাল টুল রয়েছে যা নেটওয়ার্ক ট্র্যাফিককে এমন ফর্ম্যাটে উপস্থাপন করে যা বোঝা সহজ। tcpdump-এ এখানে কভার করা বিকল্পগুলির চেয়ে অনেক বেশি বিকল্প এবং ফিল্টারিং ক্ষমতা রয়েছে। tcpdump এর কার্যকারিতার সম্পূর্ণ বিবরণের জন্য, 'man tcpdump' টাইপ করুন বা অনলাইনে tcpdump ম্যান পৃষ্ঠাটি দেখুন।

ওয়্যারশার্ক লিনাক্স, ম্যাক ওএস এক্স এবং উইন্ডোজেও উপলব্ধ। শত শত প্রোটোকলের জন্য অন্তর্নির্মিত সমর্থন ওয়্যারশার্ককে অনেক অ্যাপ্লিকেশনের জন্য একটি দরকারী টুল করে তোলে, শুধু HTTP ডিবাগিং নয়। এই ভূমিকাটি ওয়্যারশার্কের অনেক ক্ষমতার উপরিভাগে সবেমাত্র স্ক্র্যাচ করে। আরও তথ্যের জন্য "man wireshark" টাইপ করুন বা WireShark ওয়েবসাইট দেখুন।

ফিডলারেরও অনেকগুলি দুর্দান্ত বৈশিষ্ট্য রয়েছে, তবে যা এটিকে আলাদা করে তা হল SSL ট্র্যাফিক ডিক্রিপ্ট করার ক্ষমতা। আরও তথ্যের জন্য Fiddler2 ওয়েবসাইট দেখুন।

এই প্যাকেট স্নিফিং অ্যাপ্লিকেশানগুলি আপনার টুলবেল্টে থাকা দুর্দান্ত সরঞ্জাম, এবং পর্যবেক্ষক পাঠকরা লক্ষ্য করবেন যে সেগুলি বিনামূল্যে! পরের বার যখন আপনি Google API-এর সাথে কাজ করছেন এবং আপনি কিছু মন্দ দেখতে পাচ্ছেন, তখন এই নেটওয়ার্ক বিশ্লেষকগুলির মধ্যে একটি বের করে নিন এবং তারে কী আছে তা আরও ঘনিষ্ঠভাবে দেখুন। আপনি যদি সমস্যাটি খুঁজে না পান তবে আপনি সর্বদা আমাদের আলোচনা গোষ্ঠীতে একটি প্রশ্ন পোস্ট করতে পারেন৷ প্রাসঙ্গিক নেটওয়ার্ক বার্তাগুলি সহ অন্যদের আপনার নির্দিষ্ট সমস্যা বুঝতে এবং নির্ণয় করতে সহায়তা করবে৷

সৌভাগ্য এবং সুখী স্নিফিং!

সম্পদ