แอปพลิเคชันของฉันกำลังส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์บางแห่งและฉันต้องการดูข้อมูลจริงที่กำลังส่งออกมา เฉพาะบางอย่างที่ฉันต้องการจะดู:
- วิธีการร้องขอ (GET / POST / PUT ฯลฯ )
- ชนิดของเนื้อหา
- ร่างกาย
อะไรคือวิธีที่ดีที่สุดและง่ายในการทำสิ่งนี้ให้สำเร็จ
แอปพลิเคชันของฉันกำลังส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์บางแห่งและฉันต้องการดูข้อมูลจริงที่กำลังส่งออกมา เฉพาะบางอย่างที่ฉันต้องการจะดู:
อะไรคือวิธีที่ดีที่สุดและง่ายในการทำสิ่งนี้ให้สำเร็จ
คำตอบ:
สำหรับแฟน ๆ tcpdump ทุกคน =)
เรียกใช้คำสั่งเหล่านี้ทั้งหมดที่รูท !!!
รับรูทในเทอร์มินัลด้วย
sudo -i
ในการจับแพ็คเก็ต RAW ...
sudo tcpdump -i any -w /tmp/http.log &
/tmp/http.log
นี้จะจับภาพทุกแพ็คเก็ตดิบในพอร์ตทั้งหมดในการเชื่อมต่อทั้งหมดและเขียนไปยังแฟ้ม
เรียกใช้แอปพลิเคชันของคุณ เห็นได้ชัดว่าช่วยถ้าคุณไม่เรียกใช้แอปพลิเคชันอื่น ๆ ที่ใช้ HTTP (เว็บเบราว์เซอร์)
ฆ่า tcpdump
killall tcpdump
หากต้องการอ่านบันทึกให้ใช้-A
แฟล็กและไพพ์เอาต์พุตไปที่less
:
tcpdump -A -r /tmp/http.log | less
-A
ธงพิมพ์ออก "แน่ะ" หรือข้อความ ASCII ในแพ็คเก็ต นี่จะส่งผลลัพธ์ไปที่less
คุณสามารถเลื่อนหน้าขึ้นและลง เพื่อออกจากพิมพ์less
Q
เมื่อฉันไปที่ Google ฉันเห็น (ในแพ็คเก็ตดิบ):
20:42:38.179759 IP ufbt.local.56852 > sea09s02-in-f3.1e100.net.www: Flags [P.], seq 1:587, ack 1, win 913, options [nop,nop,TS val 25523484 ecr 492333202], length 586
E..~.v@.@..q......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1
Host: clients1.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34
Referer: http://www.google.com/
Accept: */*
Accept-Encoding: gzip, deflate, x-gzip, x-deflate
Accept-Charset: utf-8,*;q=0.5
Accept-Language: en-US, en-US; q=0.8, en; q=0.6
Cookie: PREF=ID=dd958d4544461998:FF=0:TM=1323842648:LM=1360205486:S=Fg_QCDsLMr4ZepIo; NID=67=OQJWjIDHG-B8r4EuM19F3g-nkaMcbvYwoY_CsOjzvYTOAxwqAos5kfzsk6Q14E70gIfJjHat8d8PuQIloB12BE-JuSHgsKHR2QSpgN12qSWoxeqhdcSQgzw5CHKtbR_a
tcpdump
มีตัวเลือกจำนวนมากในการปรับแต่งการรวบรวมข้อมูลจากการระบุอินเทอร์เฟซเครือข่ายไปยังพอร์ตไปยังที่อยู่ IP ต้นทางและปลายทาง ไม่สามารถถอดรหัสได้ (ดังนั้นจะไม่ทำงานกับ HTTPS)
เมื่อคุณรู้ว่าคุณสนใจอะไรคุณสามารถใช้ตัวเลือกจำนวนมากtcpdump
เพื่อบันทึกเฉพาะข้อมูลที่น่าสนใจ กลยุทธ์ทั่วไปคือการบันทึกแพ็กเก็ตทั้งหมดก่อนตรวจสอบข้อมูลดิบแล้วจับเฉพาะแพ็กเก็ตที่น่าสนใจ
ธงที่เป็นประโยชน์ (ตัวเลือก):
-i Specify an interface
-i eth0
tcp port xx
tcp port 80
dst 1.2.3.4
specify a destination ip address
มีเส้นโค้งการเรียนรู้ทั้งการใช้tcpdump
และการเรียนรู้วิธีการวิเคราะห์ข้อมูลที่คุณรวบรวม สำหรับการอ่านต่อไปผมขอแนะนำให้แดเนียล Miessler ของtcpdump
ไพรเมอร์ที่มีตัวอย่าง
0 packets captured 0 packets received by filter 0 packets dropped by kernel
แต่ฉันได้เปิดไซต์มากมายในเบราว์เซอร์ Chrome เมื่อ tcpdump ตรวจสอบ
tcpdump -i any -w /tmp/http.log &
ทำงาน
ติดตั้งครั้งแรกtcpflow
จากที่เก็บอย่างเป็นทางการของ Ubuntu:
sudo apt-get install tcpflow
จากนั้นรันคำสั่งนี้เพื่อตรวจสอบคำร้องขอ HTTP ทั้งหมดบนพอร์ตมาตรฐาน:
sudo tcpflow -p -c port 80
ฉันอยากจะแนะนำให้คุณลองใช้Wireshark
โปรดทราบว่า Wireshark ค่อนข้างทันสมัยและอาจใช้เวลาเล็กน้อยในการทำความคุ้นเคย ฉันไม่ได้ใช้งานมาสองสามปีแล้ว แต่มันก็ควรจะสมบูรณ์แบบสำหรับสิ่งที่คุณเป็นหลังจากนั้น - ถ้าไม่เต็มไปด้วยฟีเจอร์
ข้อมูลเกี่ยวกับ Wireshark และวิธีการที่จะใช้มันสามารถพบได้ที่หน้าแรกของ Wireshark
บวกได้ด้วยคำสั่งซึ่งให้ผลลัพธ์ที่เป็นระเบียบแม้สำหรับ SSL:
sudo tcpdump dst port 80