ฉันจะส่งคืนเฉพาะส่วนหัว Http จาก tshark ได้อย่างไร


12

ฉันใช้ tshark เพื่อดมกลิ่นแพ็คเก็ตของฉันและฉันกังวลเฉพาะกับส่วนหัวของ http (โดยเฉพาะในรูปแบบที่ส่ง แต่ฉันจะใช้สิ่งที่ฉันจะได้รับ)

ฉันพยายามใช้:

tshark tcp port 80 or tcp port 443 -V -R "http"

ซึ่งทำให้ฉันส่วนหัว แต่ยังเนื้อหา (ซึ่งฉันไม่ต้องการเป็นขยะจำนวนมากในการแยกวิเคราะห์) ฉันสนใจเฉพาะส่วนหัวจริงๆมีวิธีง่าย ๆ ที่จะได้รับเพียงแค่นั้น (นอกเหนือจากการแยกวิเคราะห์ข้อมูลด้วยตัวเอง)

แก้ไข: ฉันควรมีคุณสมบัติฉันยังใส่ใจเกี่ยวกับโฮสต์ / พอร์ตเพื่อให้ฉันสามารถติดตามการร้องขอข้ามหลายแพ็คเก็ต

คำตอบ:


18

คุณสามารถใช้ตัวกรองการแสดงส่วนหัว HTTP เฉพาะเพื่อแสดงเฉพาะส่วนหัวคำขอเพียงส่วนหัวการตอบสนองหรือทั้งสองอย่าง

สำหรับส่วนหัวของคำขอเท่านั้น:

tshark tcp port 80 or tcp port 443 -V -R "http.request"

สำหรับส่วนหัวการตอบกลับ:

tshark tcp port 80 or tcp port 443 -V -R "http.response"

และสำหรับทั้งส่วนหัวคำขอและคำตอบ:

tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"

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


เรายังคงพูดถึงข้อมูลมากมายราวกับว่าฉันมีคำขอ en.wikipedia.org ฉันจะได้รับคืน 750k เมื่อฉันต้องการเพียงส่วนหัวน้อยกว่า 1k เท่านั้น
tzenes

tshark เป็นเครื่องมือจับภาพแพ็คเก็ตคุณอาจต้องการค้นหาบางสิ่งเช่นFiddlerหรือเครื่องมือวิเคราะห์ HTTP อย่างเดียวเท่านั้น
หนัก

ฉันไม่คุ้นเคยกับพู้ทำเล่น แต่เป้าหมายของฉันคือการติดตามทรูพุตการเชื่อมต่อดังนั้นฉันจึงต้องการทราบ requesttime / firstbyte / lastbyte ขณะที่ยังคงส่วนหัว HTTP ไว้ tshark แก้ไขปัญหาส่วนใหญ่ไปแล้วฉันแค่ได้รับส่วนหัว
tzenes

3
มันสร้าง"tshark: ตัวกรองการจับภาพไม่ถูกต้อง" (Tshark 2.0.2) เพื่อเป็นวิธีแก้ปัญหาฉันใช้:tshark -V -Y http.request tcp port 80 or tcp port 443
jfs

5

ในความเป็นจริงคุณสามารถ! คำตอบก่อนหน้าทั้งหมดอยู่ใกล้มาก สิ่งที่คุณต้องมีคือ-Oตั้งค่าสถานะซึ่งกรองข้อมูลทั้งหมดยกเว้น HTTP

tshark -O http -R http.request tcp port 80 or tcp port 443

1
นี่คือคำตอบที่ถูกต้อง
Florin Andrei

3

ฉันสามารถรวมคำตอบจาก @heavyd และเรียกใช้ผ่านตัวกรอง sed ที่ฉันได้รับจากบทความ SO - (คำตอบของ FJ) เพื่อทำอาหารให้ลูกคนนี้ซึ่งกรองเฉพาะส่วนหัว :)

sudo tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" | sed -rn '/Hypertext Transfer Protocol/{:a;N;/    \\r\\n:?/{/.*/p;d};ba}' >> /tmp/filtered

1
สาเหตุที่น่ากลัวทำให้ฉันอ่านไม่ออก แต่ทำงานเหมือนจับใจ
Setheron

2

รุ่นตัวกรองของฉันเองเพื่อการอ่านง่าย:

tshark -V -R "tcp.port ==80 && (http.request || http.response)" | awk "/Hypertext Transfer Protocol/,/Frame/ { print };/Transmission Control Protocol/{print};/Internet Protocol/{print}" | grep -v Frame

วิธีนี้ฉันเห็นเฉพาะข้อมูล IP และ TCP ที่เกี่ยวข้องโดยไม่มีข้อมูลระดับต่ำทั้งหมดรวมถึงข้อมูล HTTP ที่สมบูรณ์


sudo tshark -V -s0 พอร์ต 80 -Y "(http.request || http.response)" | awk "/ Hypertext Transfer Protocol /, / ^ $ /"
Lmwangi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.