सवाल Tcpdump के साथ http शीर्षलेख के लिए मानव पठनीय प्रारूप


मैं एक लिनक्स मशीन में अपाचे से भेजे गए 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)।

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


55
2018-05-02 11:41


मूल


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


जवाब:


यहां एक एक लाइनर है जिसे मैं अनुरोध प्रदर्शित करने और HTTP शीर्षलेखों का उपयोग करने के लिए आया था 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'

यह पैकेट को 10 केबी पर बंद कर देता है और केवल जीईटी, पोस्ट और हेड कमांड जानता है, लेकिन यह ज्यादातर मामलों में पर्याप्त होना चाहिए।

संपादित करें: इसे अधिक प्रतिक्रियाशील बनाने के लिए प्रत्येक चरण में बफर से छुटकारा पाने के लिए इसे संशोधित किया गया। हालांकि पर्ल और stdbuf की आवश्यकता है, तो मूल संस्करण का उपयोग करें यदि आपके पास नहीं है: संपादित करें: 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 }'

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

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

79
2017-10-03 22:37



बहुत अच्छा काम करता है। क्या आप कृपया इस बारे में अधिक जानकारी जोड़ सकते हैं कि टीसीपीडम्प अभिव्यक्ति कैसे काम करती है? - Vivek Thomas
माता-पिता में 'आईपी' भाग यहां समझाया गया है, उदाहरण के लिए: stackoverflow.com/questions/11757477/... - Kibber
तुमने मुझे इतना सिरदर्द बचाया। शर्म मैं केवल +1 कर सकते हैं। - Aaron Dobbing


आप जो कुछ भी आप चाहते हैं उसके करीब कुछ प्राप्त कर सकते हैं -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 हेडर को इंटरैक्टिव रूप से देखने के लिए।


15
2018-05-02 11:48



कोशिश की -A तथा -s 0, एक ही आउटपुट मिला। - Adam Matan
बिना कोशिश करो -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। - Adam Matan
... जो आप चाहते हैं उसके करीब कुछ है। 'हेड' से पढ़ें - यह HTTP पेलोड है। यदि आपने निश्चित रूप से उपयोग किया है -s 0 और उसके बाद कुछ भी नहीं है HTTP/1.0अनुरोध में कोई HTTP शीर्षलेख नहीं है। - Flup
धन्यवाद। क्या केवल पाठ शीर्षलेख मुद्रित करने का कोई तरीका है, बाइनरी पेलोड को सांस करता है? - Adam Matan


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


-1
2018-05-02 11:51



हो सकता है कि इस काम को कैसे प्राप्त किया जाए, इसके साथ-साथ एक उदाहरण भी जोड़ें - vikas027
शायद आप एक आदमी पेज पढ़ सकते हैं? justniffer.sourceforge.net/#!/man_page - Danila Ladner