จะตรวจสอบคำขอ HTTP ขาออกของแอปพลิเคชันเดียวได้อย่างไร


70

แอปพลิเคชันของฉันกำลังส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์บางแห่งและฉันต้องการดูข้อมูลจริงที่กำลังส่งออกมา เฉพาะบางอย่างที่ฉันต้องการจะดู:

  • วิธีการร้องขอ (GET / POST / PUT ฯลฯ )
  • ชนิดของเนื้อหา
  • ร่างกาย

อะไรคือวิธีที่ดีที่สุดและง่ายในการทำสิ่งนี้ให้สำเร็จ


"วิธีการร้องขอประเภทเนื้อหาเนื้อหาและอื่น ๆ " คุณกำลังพูดถึงการตรวจสอบเฉพาะ HTTP? HTTPS (ปลอดภัย) โดยบังเอิญหรือไม่?
gertvdijk

ใช่คุณพูดถูก แต่มันไม่ได้ส่งผ่านเบราว์เซอร์
megas

ขออภัยเป็นเพียงคำขอ HTTP
megas

3
โอเคไม่เป็นไรแล้ว มันเป็นเพียงหนึ่งหรือเซิร์ฟเวอร์ชุดเล็ก ๆ ที่มันกำลังพูดถึง? และไม่มีแอปพลิเคชันอื่น ๆ ที่พูดคุยกับเซิร์ฟเวอร์เหล่านั้นหรือ ถ้าใช่ทั้งคู่คำตอบเกี่ยวกับ Wireshark คือสิ่งที่ฉันต้องการ เรียนรู้วิธีการใช้งาน มันไม่ยากเลย
gertvdijk

คำตอบ:


71

สำหรับแฟน ๆ 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คุณสามารถเลื่อนหน้าขึ้นและลง เพื่อออกจากพิมพ์lessQ

เมื่อฉันไปที่ 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ไพรเมอร์ที่มีตัวอย่าง


1
นี่ไม่ได้บันทึกอะไรเลยบน Ubuntu 14.04 ของฉัน แล็ปท็อปของฉันเชื่อมต่ออินเทอร์เน็ตผ่านเราเตอร์ไร้สาย นั่นจะสร้างความแตกต่างให้กับการใช้ tcpdump หรือไม่? เมื่อฉันฆ่ามันเพียงแค่พูดว่า0 packets captured 0 packets received by filter 0 packets dropped by kernel แต่ฉันได้เปิดไซต์มากมายในเบราว์เซอร์ Chrome เมื่อ tcpdump ตรวจสอบ
faizal

1
อ่าบทความที่ลิงก์ช่วย tcpdump -i any -w /tmp/http.log &ทำงาน
faizal

22

ติดตั้งครั้งแรกtcpflowจากที่เก็บอย่างเป็นทางการของ Ubuntu:

sudo apt-get install tcpflow

จากนั้นรันคำสั่งนี้เพื่อตรวจสอบคำร้องขอ HTTP ทั้งหมดบนพอร์ตมาตรฐาน:

sudo tcpflow -p -c port 80

1
และจะดูผลลัพธ์ได้ที่ไหน ขอขอบคุณ!
Gediminas

2
@Gediminas คุณสามารถเห็นผลลัพธ์ในเทอร์มินัล โปรดทราบว่าปริมาณการใช้ HTTPS จะไม่ปรากฏขึ้น ลองไปที่ HTTP หนึ่งรายการเช่นhttpvshttps.com
Vanni Totaro

1
มากสะดวกสบายกว่า tcpdump ถ้าคุณเพียงแค่สนใจในการดูการร้องขอและไม่ได้มีการจัดการกับทุกรายละเอียดของ TCP (SYN, แอ๊ ... )
Herm

13

ฉันอยากจะแนะนำให้คุณลองใช้Wiresharkติดตั้ง Wireshark

โปรดทราบว่า Wireshark ค่อนข้างทันสมัยและอาจใช้เวลาเล็กน้อยในการทำความคุ้นเคย ฉันไม่ได้ใช้งานมาสองสามปีแล้ว แต่มันก็ควรจะสมบูรณ์แบบสำหรับสิ่งที่คุณเป็นหลังจากนั้น - ถ้าไม่เต็มไปด้วยฟีเจอร์

ข้อมูลเกี่ยวกับ Wireshark และวิธีการที่จะใช้มันสามารถพบได้ที่หน้าแรกของ Wireshark


1
สิ่งนี้ใช้ไม่ได้ในกระบวนการเดียว คุณจะได้รับปริมาณการใช้งานทั้งหมดบนอินเทอร์เฟซและคุณจะต้องกรองผ่าน IP / โปรโตคอล ฯลฯwireshark - กรองตามกระบวนการ / pid
gertvdijk

ใช่ แต่สามารถทำได้อย่างง่ายดายด้วยส่วนต่อประสาน wireshark
Panther

2
ฉันเคยลองใช้ wireshark มาก่อนและมันล้ำหน้าเกินไปสำหรับฉันฉันกำลังมองหาตัวเลือกอื่น
megas

4
ตัวเลือกอื่น ๆ คือ tcpdump tcpdump เป็นเครื่องมือบรรทัดคำสั่งจะทำงานได้อย่างง่ายดาย แต่มีเส้นโค้งการเรียนรู้ที่สูงชัน danielmiessler.com/study/tcpdump
Panther

1
@gertvdijk - ตามที่คุณต้องการ;) รู้สึกฟรีเพื่อเพิ่มพื้นฐาน
Panther

5

บวกได้ด้วยคำสั่งซึ่งให้ผลลัพธ์ที่เป็นระเบียบแม้สำหรับ SSL:

sudo tcpdump dst port 80
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.