मैं tshark से सिर्फ Http हेडर कैसे लौटाऊं?


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 एक पैकेट कैप्चर टूल है, आप फ़िडलर या किसी अन्य HTTP-ओनली एनालिसिस टूल की तरह देख सकते हैं ।
हैवीडेड

मैं फ़िडलर से परिचित नहीं हूं, लेकिन मेरा लक्ष्य कनेक्शन थ्रूपुट को ट्रैक करना है इसलिए मैं 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
यह सही जवाब है।
फ्लोरिन आंद्रेई

3

मैं @eavyd से उत्तर को संयोजित करने में सक्षम था और एक एसओ लेख से मिला एक सीड फिल्टर के माध्यम से इसे चला रहा था - (एफजे का जवाब) इस बच्चे को पकाने के लिए, जो सिर्फ हेडर को फ़िल्टर करता है :)

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
भयानक sed कारण मैं इसे नहीं पढ़ सकता, लेकिन एक आकर्षण की तरह काम किया।
सेडेरॉन

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

इस तरह से मैं केवल प्रासंगिक आईपी और टीसीपी जानकारी देखता हूं, सभी निम्न स्तर के सामान के बिना, संपूर्ण HTTP जानकारी।


sudo tshark -V -s0 port 80 -Y "(http.request || http.response)" | awk "/ Hypertext Transfer Protocol /, / ^ $ /"
लमवांगी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.