การมอนิเตอร์ทราฟฟิก HTTP โดยใช้ tcpdump


42

ในการตรวจสอบปริมาณข้อมูล HTTP ระหว่างเซิร์ฟเวอร์และเว็บเซิร์ฟเวอร์ฉันกำลังใช้งานtcpdumpอยู่ ใช้งานได้ดี แต่ฉันต้องการกำจัดข้อมูลที่ไม่จำเป็นบางอย่างในผลลัพธ์ (ฉันรู้tcpflowและwiresharkแต่พวกเขาไม่พร้อมใช้งานในสภาพแวดล้อมของฉัน)

จากtcpdumpหน้าคน:

หากต้องการพิมพ์แพ็กเก็ต IPv4 HTTP ทั้งหมดไปยังและจากพอร์ต 80 เช่นพิมพ์เฉพาะแพ็กเก็ตที่มีข้อมูลไม่ใช่ตัวอย่างเช่นแพ็คเก็ต SYN และ FIN และแพ็คเก็ต ACK เท่านั้น

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

คำสั่งนี้

sudo tcpdump -A 'src example.com และ tcp พอร์ต 80 และ (((ip [2: 2] - ((ip [0] & 0xf) << 2))) ((tcp [12] & 0xf0) >> 2) )! = 0) '

ให้ผลลัพธ์ต่อไปนี้:

19: 44: 03.529413 IP 192.0.32.10.http> 10.0.1.6.52369: Flags [P. ], seq 918827135: 918827862, ack 351213824, ชนะ 4316, ตัวเลือก [nop, nop, TS val 4093273405 ecr 869959372], ความยาว 727

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 เซิร์ฟเวอร์ 200 OK: Apache / 2.2.3 (Red Hat) ประเภทเนื้อหา: text / html; charset = UTF-8 วันที่: เสาร์, 14 พ.ย. 2009 18:35:22 GMT อายุ: 7149
ความยาวเนื้อหา: 438

<HTML> <HEAD> <TITLE> ตัวอย่างหน้าเว็บ </TITLE> </HEAD> <body>
<p> คุณได้มาถึงหน้าเว็บนี้ ... </p> </BODY> </HTML>

มันเกือบจะสมบูรณ์แบบยกเว้นส่วนที่ไฮไลต์ นี่คือจุดจบ - สำคัญกว่า - ฉันจะกำจัดมันได้อย่างไร อาจจะเป็นเพียงแค่ปรับแต่งเล็กน้อยในการแสดงออกในตอนท้ายของคำสั่ง?

คำตอบ:


39

tcpdump พิมพ์แพ็คเก็ตที่สมบูรณ์ "ขยะ" ที่คุณเห็นเป็นส่วนหัวแพคเกจ TCP

แน่นอนคุณสามารถนวดผลลัพธ์ด้วยเช่นสคริปต์ Perl แต่ทำไมไม่ใช้ tshark, รุ่นต้นฉบับของ wireshark แทน?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

ใช้อาร์กิวเมนต์เดียวกับ tcpdump (ไลบรารีเดียวกัน) แต่เนื่องจากตัววิเคราะห์มันสามารถทำการตรวจสอบแพ็กเก็ตลึกเพื่อให้คุณสามารถปรับแต่งตัวกรองของคุณได้มากขึ้นเช่น

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R'http.request.method == "GET" || http.request.method == "HEAD"'


1
ขอบคุณ - หลังจากลองทำตามคำแนะนำทั้งหมด tshark ดูเหมือนจะเป็นเครื่องมือที่ดีที่สุดสำหรับงาน ขณะนี้ฉันใช้ "tshark -d tcp.port == 8070, http -R 'http.request หรือ http.response'" ตอนนี้ถ้าเพียง แต่ฉันจะได้รับ tshark เพื่อ "ติดตามกระแส TCP" เช่นเดียวกับ wireshark สามารถ (นี้จะได้รับการถามมาก แต่ฉันยังไม่พบคำตอบ) "-V" แสดงข้อมูลเกี่ยวกับแพ็คเก็ต TCP และ IP และอื่น ๆ ซึ่งฉันไม่สนใจ แต่ฉันคิดว่าฉันสามารถลบได้โดยใช้สคริปต์
otto.poellath

4
นอกจากนี้คุณยังสามารถค้นหา "รับ" ในกรองการจับภาพโดยการจับคู่ค่า ASCII tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420สำหรับตัวละครแต่ละตัว: ฉันเพิ่มหน้าไปยังเว็บไซต์ Wireshark สักครู่เพื่อช่วยให้คุณสร้างตัวกรองการจับคู่สตริง: wireshark.org/tools/string-cf.html
Gerald Combs

18

ลองดูที่ngrep - มันอาจเป็นประโยชน์กับคุณบ้าง

เป็นข้อมูลอ้างอิงสำหรับผู้อื่นhttpry [เซิร์ฟเวอร์ดูเหมือนจะไม่ทำงานในตอนนี้ แต่ฉันหวังว่ามันจะชั่วคราว] และtsharkยังมีประโยชน์สำหรับการวิเคราะห์โปรโตคอลแบบพาสซีฟ - อันแรกเป็นเพียงแค่ http, วินาที - มากยิ่งขึ้น


2
+1 สำหรับ ngrep เครื่องมือที่มีประโยชน์มาก
tylerl

ngrep และ httpry ดูมีประโยชน์อย่างแน่นอน แต่ ngrep ไม่รู้จัก HTTP และ AFAIK httpry จะทำงานกับส่วนหัว HTTP เท่านั้นและไม่สามารถแสดงข้อมูลส่วนของข้อมูลได้
otto.poellath

@sapporo - แน่ใจว่า - ngrep เป็นผู้ไม่เชื่อเรื่องโปรโตคอล แต่คุณสามารถเพิ่มตัวกรอง pcap "พอร์ต 80" และรับ .. ใน [กรณีส่วนใหญ่] ปริมาณการใช้งาน http เท่านั้น
pQd

Imo, ngrep นั้นดีกว่า 100000x tcpdump
Daniel W.

5

ลองhttpryหรือjustniffer

Justniffer ทำงานได้ดีกับ tcp แพ็กเก็ตที่เรียงลำดับการกำหนดค่าใหม่และการกระจายตัวของ ip


1
ขอบคุณ! justniffer คือสิ่งที่ฉันกำลังมองหา (ฉันคิดว่ามันเป็นเครื่องมือเดียวที่กล่าวถึงซึ่งง่ายมากและวัดระยะเวลาการร้องขอ)
gkop

1

ฉันอยากจะแนะนำให้ใช้บรรทัดคำสั่ง tcpdump ที่เก็บข้อมูลทุกอย่างไว้ในไฟล์ pcap สำหรับกระบวนการโพสต์ ขึ้นอยู่กับสิ่งที่คุณกำลังดูที่การวินิจฉัย tcpflow ใช้งานได้ดีสำหรับการสื่อสารกลับเข้าด้วยกันในลักษณะที่สอดคล้องกันสำหรับการวิเคราะห์

ข้อมูลที่ดีอื่น ๆ รวมถึงประเพณีบางอย่างสำหรับ httpry สามารถดูได้ที่: http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html


0

เว็บเซิร์ฟเวอร์ที่คุณใช้ไม่ได้สร้างบันทึกหรือไม่ แน่นอนว่าจะเป็นวิธีที่ดีกว่ามากในการตรวจสอบปริมาณการใช้งาน HTTP มีเครื่องมือมากมายในการวิเคราะห์ข้อมูลและเว็บเซิร์ฟเวอร์ที่มีความสามารถควรสร้างบันทึกที่เชื่อถือได้


4
เห็นได้ชัดว่า ฉันคิดว่าเขาคิดถึงสิ่งนั้นอยู่แล้ว บางครั้งก็มีประโยชน์ในการตรวจสอบข้อมูลจริงที่ถูกส่งระหว่างจุด A และจุด B
tylerl

0

มีเครื่องมือมากมายในตลาดที่ออกแบบมาเป็นพิเศษสำหรับการตรวจสอบ HTTP Traffic Fiddler2 ( http://www.fiddler2.org ) และHTTP Debugger Proเป็นตัวอย่างของเครื่องมือดังกล่าว


4
ขอบคุณสำหรับคำแนะนำของคุณ น่าเสียดายที่เครื่องมือทั้งสองดูเหมือนจะใช้งานได้กับ Windows เท่านั้น ฉันไม่ได้พูดถึงมัน แต่ฉันกำลังมองหาบางอย่างที่ทำงานบน Linux
otto.poellath
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.