HTTP हेडर के लिए मानव पठनीय प्रारूप tcpdump के साथ


69

मैं अपाचे से भेजे गए HTTP हेडर (पोर्ट 80 पर सुनकर) को टॉमकैट (पोर्ट 4080 पर) एक लिनक्स मशीन में देखना चाहूंगा।

विकिपीडिया के अनुसार ,

हेडर फ़ील्ड स्पष्ट-पाठ स्ट्रिंग प्रारूप में बृहदान्त्र-पृथक नाम-मूल्य जोड़े हैं।

मैंने निम्नलिखित tcpdumpकमांड के कुछ बदलावों की कोशिश की है :

$ sudo tcpdump -lnX dst port 4080 -c 10

11:29:28.605894 IP SOME_IP.33273 > SOME_IP.4080: P 0:49(49) ack 1 win 23 <nop,nop,timestamp 1191760962 509391143>
    0x0000:  4500 0065 3a9f 4000 3f06 0084 628a 9ec4  E..e:.@.?...b...
    0x0010:  628a 9c97 81f9 0ff0 9e87 eee0 144b 90e1  b............K..
    0x0020:  8018 0017 fb43 0000 0101 080a 4708 d442  .....C......G..B
    0x0030:  1e5c b127 4845 4144 202f 6461 7070 6572  .\.'HEAD./dapper
    0x0040:  5f73 6572 7669 6e67 2f41 644d 6f6e 6b65  _serving/AdMonke
    0x0050:  793f                                     y?

परिणाम हमेशा एक ही था - अजीब और अंग्रेजी शब्दों (जैसे HEAD) का एक अजीब मिश्रण ।

मैं हेडर को मानव-पठनीय प्रारूप में कैसे देख सकता हूं?


Tcpdump पूरे पैकेट को दिखाता है। इसमें IP और TCP हेडर शामिल हैं। AFAIK, आप केवल टीसीपी पेलोड प्रदर्शित नहीं कर सकते।
Zoredache

जवाबों:


93

यहां एक-लाइनर का उपयोग करने के लिए अनुरोध और प्रतिक्रिया प्रदर्शित करने के लिए मैं आया हूं tcpdump(जो आपके मामले के लिए भी काम करना चाहिए):

sudo tcpdump -A -s 10240 'tcp port 4080 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | egrep --line-buffered "^........(GET |HTTP\/|POST |HEAD )|^[A-Za-z0-9-]+: " | sed -r 's/^........(GET |HTTP\/|POST |HEAD )/\n\1/g'

यह पैकेट को 10Kb पर सीमित कर देता है और केवल GET, POST और HEAD कमांड जानता है, लेकिन यह अधिकांश मामलों में पर्याप्त होना चाहिए।

संपादित करें : इसे और अधिक संवेदनशील बनाने के लिए हर कदम पर बफ़र्स से छुटकारा पाने के लिए इसे संशोधित किया। हालांकि अभी पर्ल और स्टडबफ की जरूरत है, इसलिए यदि आपके पास वो नहीं हैं तो मूल संस्करण का उपयोग करें : EDIT : परिवर्तित स्क्रिप्ट पोर्ट लक्ष्य 80 से 4080 तक, वास्तव में ट्रैफ़िक के बारे में सुनने के लिए जो पहले से ही अपाचे से गुजरा था, बजाय पोर्ट से आने वाले बाहरी ट्रैफ़िक के। 80:

sudo stdbuf -oL -eL /usr/sbin/tcpdump -A -s 10240 "tcp port 4080 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)" | egrep -a --line-buffered ".+(GET |HTTP\/|POST )|^[A-Za-z0-9-]+: " | perl -nle 'BEGIN{$|=1} { s/.*?(GET |HTTP\/[0-9.]* |POST )/\n$1/g; print }'

कुछ स्पष्टीकरण:

  • sudo stdbuf -oL -eL tcpdump रन लाइन-बफ़र्ड बनाता है
  • tcpdump मैजिक फिल्टर को यहां विस्तार से बताया गया है: https://stackoverflow.com/questions/11757477/understanding-tcpdump-filter-bit-masking
  • grep GET, HTTP / या POST के साथ किसी भी लाइन की तलाश में है; या कोई भी रेखाएँ जो हेडर की तरह दिखती हैं (अक्षर और संख्या जो कोलन द्वारा पीछा की जाती हैं)
  • BEGIN {$ | = 1} लाइन-बफ़र चलाने के लिए perl का कारण बनता है
  • s /.*। ((GET | HTTP / [0-9। * * | POST) / \ n $ 1 / g हर नए अनुरोध या प्रतिक्रिया की शुरुआत से पहले एक नई पंक्ति जोड़ता है

1
बहुत अच्छा काम करता है। क्या आप बता सकते हैं कि tcpdump अभिव्यक्ति कैसे काम करती है?
विवेक थॉमस

1
Parens में 'ip' भाग को यहाँ समझाया गया है, उदाहरण के लिए: stackoverflow.com/questions/11757477/…
किब्बर

आपने मुझे सिर्फ इतना सिरदर्द बचाया है। शर्म करो मैं केवल +1 कर सकता हूं।
हारून डबिंग

19

आप जो कुछ भी उपयोग कर चाहते हैं उसके करीब पा सकते हैं -A, जैसे

E....c@.@...
.....Ng.d.P..Ch.).....s.......
.A...u.BHEAD / HTTP/1.1
User-Agent: curl/7.29.0
Host: www.google.com
Accept: */*

-s 0यह सुनिश्चित करने के लिए उपयोग करें कि आपको पूरा पैकेट मिल जाए।

वैकल्पिक रूप से आप wiresharkहेडर को अंतःक्रियात्मक रूप से देखने के लिए उपयोग कर सकते हैं ।


1
कोशिश की -Aऔर -s 0, वही आउटपुट मिला।
एडम मटन

2
बिना कोशिश करें -X
Flup

tcpdump -s 0 -A dst port 4080देता है E..e..@.?.$bb...b....:......w........Q.....G..1.b..HEAD /dapper_serving/AdMonkey?ping=1 HTTP/1.0
एडम मटन

... जो आप चाहते हैं उसके करीब कुछ है। 'हेड' से पढ़ें - यह HTTP पेलोड है। यदि आपने निश्चित रूप से उपयोग किया है -s 0और इसके बाद कुछ भी नहीं है HTTP/1.0, तो अनुरोध में कोई HTTP हेडर नहीं हैं।
फ्लॉप'

धन्यवाद। क्या केवल पाठ हेडर को प्रिंट करने का एक तरीका है, बाइनरी पेलोड को सेंस करता है?
एडम मटन

-1

Http://justniffer.sourceforge.net/ का उपयोग करने का प्रयास करें। यह बेहतर टूल है या "फॉलो टीसीपी फ्लो" विकल्प के साथ विंडशार्क है, हेडर को देखने के लिए tcpdump की तुलना में कई बेहतर विकल्प हैं (अनुरोध / प्रतिक्रियाएं)


1
शायद इस काम को पाने के तरीके के रूप में एक उदाहरण जोड़ें
vikas027

शायद आप एक आदमी पृष्ठ पढ़ सकते हैं? justniffer.sourceforge.net/#//man_page
Danila Ladner
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.