নেটওয়ার্ক প্যাকেট ক্যাপচার

নীচের উদাহরণে আমরা tcpdump ব্যবহার করে workerman-chat অ্যাপ্লিকেশনটি মাধ্যমে websocket এর মাধ্যমে স্থানান্তরিত তথ্য দেখছি। workerman-chat উদাহরণে সার্ভার 7272 পোর্টের মাধ্যমে websocket পরিষেবা প্রদান করে, তাই আমরা 7272 পোর্টের উপরে প্যাকেটগুলো ক্যাপচার করছি।

1、কমান্ড চালান tcpdump -Ans 4096 -iany port 7272

2、ব্রাউজারের ঠিকানা তুলতে লিখুন http://127.0.0.1:55151

3、 ডাকনাম প্রবেশ করুন mynick

4、লেখার বাক্সে লিখুন hi, all !

চূড়ান্ত ক্যাপচারকৃত তথ্য নিচে দেওয়া হলো:

/*
 * TCP প্রথম হাত মেলানো
 * ব্রাউজারের লোকাল পোর্ট 60653 দূরবর্তী পোর্ট 7272 এ SYN প্যাকেট পাঠাচ্ছে
 */
17:50:00.523910 IP 127.0.0.1.60653 > 127.0.0.1.7272: Flags [S], seq 3524290970, win 32768, options [mss 16396,sackOK,TS val 28679666 ecr 28679554,nop,wscale 7], length 0
E..<.h@.@.HQ...........h..i..........0....@....
............

/*
 * TCP দ্বিতীয় হাত মেলানো
 * দূরবর্তী পোর্ট 7272 ব্রাউজারের পোর্ট 60653 এ SYN+ACK প্যাকেট ফেরত পাঠাচ্ছে
 */
17:50:00.523935 IP 127.0.0.1.7272 > 127.0.0.1.60653: Flags [S.], seq 692696454, ack 3524290971, win 32768, options [mss 16396,sackOK,TS val 28679666 ecr 28679666,nop,wscale 7], length 0
E..<..@.@.<..........h..)I....i......0....@....
............

/*
 * TCP তৃতীয় হাত মেলানো, TCP সংযোগ সম্পন্ন
 * ব্রাউজারের লোকাল পোর্ট 60653 দূরবর্তী পোর্ট 7272 এ ACK প্যাকেট পাঠাচ্ছে
 */
17:50:00.523948 IP 127.0.0.1.60653 > 127.0.0.1.7272: Flags [.], ack 1, win 256, options [nop,nop,TS val 28679666 ecr 28679666], length 0
E..4.i@.@.HX...........h..i.)I.......(.....
........

/*
 * websocket হাত মেলানো
 * ব্রাউজারের লোকাল পোর্ট 60653 দূরবর্তী পোর্ট 7272 এ websocket হাত মেলানোর অনুরোধ পাঠাচ্ছে
 */
17:50:00.524412 IP 127.0.0.1.60653 > 127.0.0.1.7272: Flags [P.], seq 1:716, ack 1, win 256, options [nop,nop,TS val 28679666 ecr 28679666], length 715
E....j@.@.E............h..i.)I.............
........GET / HTTP/1.1
Host: 127.0.0.1:7272
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Sec-WebSocket-Version: 13
Origin: http://127.0.0.1:55151
Sec-WebSocket-Key: zPDr6m4czzUdOFnsxIUEAw==
Cookie: Hm_lvt_abcf9330bef79b4aba5b24fa373506d9=1402048017; Hm_lvt_5fedb3bdce89499492c079ab4a8a0323=1403063068,1403141761; Hm_lvt_7b1919221e89d2aa5711e4deb935debd=1407836536; Hm_lpvt_7b1919221e89d2aa5711e4deb935debd=1407837000
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket

/*
 * websocket হাত মেলানো
 * দূরবর্তী পোর্ট 7272 ব্রাউজারের পোর্ট 60653 এ ACK প্যাকেট পাঠাচ্ছে, যা দূরবর্তী 7272 পোর্টে websocket হাত মেলানোর অনুরোধ তথ্য প্রাপ্ত হয়েছে জানাচ্ছে
 */
17:50:00.524423 IP 127.0.0.1.7272 > 127.0.0.1.60653: Flags [.], ack 716, win 256, options [nop,nop,TS val 28679666 ecr 28679666], length 0
E..4(u@.@..M.........h..)I....lf.....(.....
........

/*
 * websocket হাত মেলানো
 * দূরবর্তী পোর্ট 7272 ব্রাউজারের পোর্ট 60653 এ websocket হাত মেলানোর প্রতিক্রিয়া পাঠায়, যা জানায় যে হাত মেলানো সফল হয়েছে
 */
17:50:00.535918 IP 127.0.0.1.7272 > 127.0.0.1.60653: Flags [P.], seq 1:157, ack 716, win 256, options [nop,nop,TS val 28679669 ecr 28679666], length 156
E...(v@.@............h..)I....lf...........
........HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Sec-WebSocket-Version: 13
Connection: Upgrade
Sec-WebSocket-Accept: nSsCeIBUsFnDJCRb/BNlFzBUDpM=

/*
 * websocket হাত মেলানো সফল
 * ব্রাউজারের লোকাল পোর্ট 60653 দূরবর্তী পোর্ট 7272 এ ACK পাঠাচ্ছে, যা জানাচ্ছে যে websocket হাত মেলানোর প্রতিক্রিয়া তথ্য প্রাপ্ত হয়েছে
 */
17:50:00.535932 IP 127.0.0.1.60653 > 127.0.0.1.7272: Flags [.], ack 157, win 256, options [nop,nop,TS val 28679669 ecr 28679669], length 0
E..4.k@.@.HV...........h..lf)I.#.....(.....
........

/*
 * ডাকনাম ইনপুট অনুরোধ
 * ব্রাউজার websocket প্রোটোকলের মাধ্যমে 7272 পোর্টে ডাকনাম অনুরোধ পাঠাচ্ছে {"type":"login","name":"mynick"}
 * যেহেতু ব্রাউজার সার্ভারে পাঠানো তথ্য websocket প্রোটোকল মাস্ক প্রক্রিয়াকৃত, তাই আসল তথ্য দেখা যাচ্ছে না {"type":"login","name":"mynick"}
 */
17:50:30.652680 IP 127.0.0.1.60653 > 127.0.0.1.7272: Flags [P.], seq 716:754, ack 157, win 256, options [nop,nop,TS val 28687198 ecr 28679669], length 38
E..Z.l@.@.H/...........h..lf)I.#.....N.....
...^.......&_...+..C}..J0..H}..H>...e.._1..M}.

/*
 * ডাকনাম ইনপুট অনুরোধ
 * 7272 পোর্ট ব্রাউজারে ACK ফেরত পাঠাচ্ছে, যা জানাচ্ছে যে ডাকনাম অনুরোধ গ্রহণ করা হয়েছে এবং ইউজার তালিকা ফেরত পাঠাচ্ছে{"type":"user_list" ...
 */
17:50:30.653546 IP 127.0.0.1.7272 > 127.0.0.1.60653: Flags [P.], seq 157:267, ack 754, win 256, options [nop,nop,TS val 28687198 ecr 28687198], length 110
E...(w@.@............h..)I.#..l............
...^...^.l{"type":"user_list","user_list":[{"uid":783654164,"name":"\u732a\u732a"},{"uid":783700053,"name":"mynick"}]}

/*
 * ডাকনাম ইনপুট অনুরোধ
 * ব্রাউজার ACK ফেরত পাঠাচ্ছে, যা জানাচ্ছে যে ইউজার তালিকার তথ্য প্রাপ্ত হয়েছে
 */
17:50:30.653559 IP 127.0.0.1.60653 > 127.0.0.1.7272: Flags [.], ack 267, win 256, options [nop,nop,TS val 28687198 ecr 28687198], length 0
E..4.m@.@.HT...........h..l.)I.......(.....
...^...^

/*
 * ডাকনাম ইনপুট অনুরোধ
 * 7272 পোর্ট ব্রাউজারের কাছে ACK ফেরত পাঠাচ্ছে, লগইন ফলাফল সহ {"type":"login",...
 */
17:50:30.653689 IP 127.0.0.1.7272 > 127.0.0.1.60653: Flags [P.], seq 267:346, ack 754, win 256, options [nop,nop,TS val 28687198 ecr 28687198], length 79
E...(x@.@............h..)I....l......w.....
...^...^.M{"type":"login","uid":783700053,"name":"mynick","time":"2014-08-12 17:50:30"}

/*
 * ডাকনাম ইনপুট অনুরোধ সম্পন্ন
 * ব্রাউজার ACK ফেরত পাঠাচ্ছে, যা জানাচ্ছে লগইন ফলাফল প্যাকেট প্রাপ্ত হয়েছে
 */
17:50:30.653695 IP 127.0.0.1.60653 > 127.0.0.1.7272: Flags [.], ack 346, win 256, options [nop,nop,TS val 28687198 ecr 28687198], length 0
E..4.n@.@.HS...........h..l.)I.......(.....
...^...^

/*
 * সার্ভার 7272 পোর্ট অন্যান্য ব্রাউজারকে নতুন ব্যবহারকারী লগইনের তথ্য জানাচ্ছে
 */
17:50:30.653749 IP 127.0.0.1.7272 > 127.0.0.1.60584: Flags [P.], seq 436:515, ack 816, win 256, options [nop,nop,TS val 28687198 ecr 28577913], length 79
E.....@.@.3..........h..f....G.......w.....
...^...y.M{"type":"login","uid":783700053,"name":"mynick","time":"2014-08-12 17:50:30"}

/*
 * অন্যান্য ব্রাউজার ACK ফেরত পাঠাচ্ছে, যা জানাচ্ছে নতুন ব্যবহারকারী লগইনের তথ্য প্রাপ্ত হয়েছে
 */
17:50:30.653755 IP 127.0.0.1.60584 > 127.0.0.1.7272: Flags [.], ack 515, win 256, options [nop,nop,TS val 28687198 ecr 28687198], length 0
E..4.X@.@.#j...........h.G..f..$.....(.....
...^...^

/*
 * mynick ব্যবহারকারী কথা বলছে hi, all !
 * ব্রাউজার সার্ভারে 7272 পোর্টে বক্তৃতার তথ্য পাঠাচ্ছে {"type":"say","to_uid":"all","content":"hi,  all !"}
 * যেহেতু ব্রাউজার সার্ভারে পাঠানো তথ্য websocket প্রোটোকলের মাধ্যমে মাস্ক করা, তাই আসল তথ্য দেখা যাচ্ছে না
 */
17:51:02.775205 IP 127.0.0.1.60653 > 127.0.0.1.7272: Flags [P.], seq 754:812, ack 346, win 256, options [nop,nop,TS val 28695228 ecr 28687198], length 58
E..n.o@.@.H............h..l.)I.......b.....
fTX.d.P[(...9H..C=LT.~.BV=...0SnB-X.

/*
 * mynick ব্যবহারকারী কথা বলছে hi, all !
 * 7272 পোর্ট সব ব্রাউজার ক্লায়েন্টের মধ্যে একটি ব্রাউজারে বক্তৃতার তথ্য স্থানান্তর করছে {"type":"say","from_uid":....
 */
17:51:02.776785 IP 127.0.0.1.7272 > 127.0.0.1.60653: Flags [P.], seq 346:448, ack 812, win 256, options [nop,nop,TS val 28695229 ecr 28695228], length 102
E...(y@.@............h..)I....l............
.........d{"type":"say","from_uid":783700053,"to_uid":"all","content":"hi,  all !","time":"2014-08-12 :51:02"}

/*
 * mynick ব্যবহারকারী কথা বলছে hi, all !
 * ব্রাউজার ACK ফেরত পাঠাচ্ছে, বক্তৃতার তথ্য প্রাপ্ত হয়েছে
 */
17:51:02.776808 IP 127.0.0.1.60653 > 127.0.0.1.7272: Flags [.], ack 448, win 256, options [nop,nop,TS val 28695229 ecr 28695229], length 0
E..4.p@.@.HQ...........h..l.)I.F.....(.....
........

/*
 * mynick ব্যবহারকারী কথা বলছে hi, all !
 * 7272 পোর্ট সব ব্রাউজার ক্লায়েন্টের মধ্যে একটি ব্রাউজারে বক্তৃতার তথ্য স্থানান্তর করছে {"type":"say","from_uid":....
 */
17:51:02.776827 IP 127.0.0.1.7272 > 127.0.0.1.60584: Flags [P.], seq 515:617, ack 816, win 256, options [nop,nop,TS val 28695229 ecr 28687198], length 102
E.....@.@.3g.........h..f..$.G.............
.......^.d{"type":"say","from_uid":783700053,"to_uid":"all","content":"hi,  all !","time":"2014-08-12 :51:02"}

/*
 * mynick ব্যবহারকারী কথা বলছে hi, all ! , সব ব্রাউজার স্থানান্তরিত বক্তৃতার তথ্য প্রাপ্ত করে, বক্তৃতার শেষ
 * ব্রাউজার ACK ফেরত পাঠাচ্ছে, বক্তৃতার তথ্য প্রাপ্ত হয়েছে
 */
17:51:02.776842 IP 127.0.0.1.60584 > 127.0.0.1.7272: Flags [.], ack 617, win 256, options [nop,nop,TS val 28695229 ecr 28695229], length 0
E..4.Y@.@.#i...........h.G..f........(.....
........

উপরে লগইন + বক্তৃতার সমস্ত অনুরোধ উল্লেখ করা হয়েছে, মোট দুটি ব্রাউজার ক্লায়েন্ট রয়েছে।

প্যাকেট ডাটায় [S] নির্দেশ করে SYN অনুরোধ (সংযোগের অনুরোধ শুরু); [.] নির্দেশ করে ACK প্রতিক্রিয়া, যা জানায় যে অনুরোধ পক্ষ পেয়েছে; [P] নির্দেশ করে তথ্য পাঠানো হচ্ছে; [P.] নির্দেশ করে P + [.]

যদি পোর্টে বিতরণ করা ডাটা বাইনারি হয়, তবে এটি ষোলমিক দেখা যেতে পারে tcpdump -XAns 4096 -iany port 7272