लिनक्स पर टीसीपी ट्रैफिक डेटा को सूँघने का सबसे आसान तरीका क्या है?


79

मैं अपने लिनक्स बॉक्स पर किसी भी इंटरफ़ेस पर जा रहे सभी टीसीपी डेटा (टीसीपी हेडर या कुछ और नहीं) को दिखाने का एक सरल तरीका चाहता हूं।

उदाहरण के लिए, मैं एक जादुई कमांड चाहता हूं कि अगर मैं ऐसा करूं:

magic_commmand_I_want port=1234

अगर मेरी मशीन पर पोर्ट 1234 पर कोई सर्वर सुन रहा था, और किसी ने किया:

echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port

तब जादुई आदेश बस प्रिंट आउट होगा:

hello

मैंने "tcpdump", "ethereal", "tethereal", "tshark" और अन्य की कोशिश की है, लेकिन यह स्पष्ट नहीं है कि आप उन्हें कैसे प्राप्त करते हैं:

  • आईपी ​​पते या अन्य मेटाडेटा न दिखाएं
  • केवल "डेटा" भेजा जा रहा है, न कि अलग-अलग पैकेट और उनके हेडर
  • डेटा को प्रिंट के रूप में-हेक्स में नहीं, और पैकेट-ऑफसेट मार्कर के साथ नहीं
  • सूंघ सभी नेटवर्क यातायात (चाहे वह पर है eth0 या eth1 या लो , आदि ...)

हां, आप शायद ऐसा करने के लिए यूनिक्स कमांड के एक पाइप सेट को एक साथ स्ट्रिंग कर सकते हैं, लेकिन यह अगली बार के लिए याद रखना बहुत आसान नहीं है :)

यदि आपके पास एक सटीक कमांड-लाइन का एक सरल उदाहरण है जो ऐसा करता है, तो यही मैं चाहता हूं।


2
tcpdump मैजिक कमांड है जिसे आप चाहते हैं।
विर्सार्क

3
मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन मुझे यह जानने की उत्सुकता है कि "सर्वर साइड" के लिए nc का उपयोग करना एक विकल्प क्यों नहीं था? "nc -l 1234" एक सर्वर बनाता है जो पोर्ट 1234 पर सुनता है और जो भी इसे भेजा जाता है उसे प्रिंट करता है और कनेक्शन को बंद कर देता है। यदि आप कनेक्शन को जीवित रखना चाहते हैं और डिस्कनेक्ट नहीं करना चाहते हैं तो आप "-k" विकल्प जोड़ सकते हैं।
StFS

2
@StFS क्योंकि वह एक चालू बंदरगाह को सूँघना चाहता है और nc शिकायत करेगा।
23

जवाबों:


106

अपडेट करें:

जैसा कि माइकल ने टिप्पणियों में बताया है: tcpflow संस्करण से 1.3 -e विकल्प का उपयोग स्कैनर नाम को निर्दिष्ट करने के लिए किया जाता है। तो त्रुटि "अमान्य स्कैनर नाम '8983' मुद्रित है। सही कमांड है

sudo tcpflow -i any -C -J port 1234

( नवीनतम रिलीज में भी -Jबदल दिया गया है -g)


मुझे " tcpflow " की ओर इशारा करने के लिए yves का धन्यवाद । यहां कमोड-लाइन है:

tcpflow -i any -C -e port 1234  # as root, or with sudo

यह वह सब कुछ करता है जो मैं चाहता हूं

  • डेटा बाइट के लिए बाइट दिखाता है जैसे ही यह अंदर आता है
  • कोई अन्य मेटाडेटा प्रदर्शित नहीं करता है
  • सभी इंटरफेस पर सुनता है (इसलिए यह मशीन के भीतर और बाहर से आने वाले डेटा को कैप्चर करता है)

" -C" यह एक फ़ाइल के बजाय कंसोल को डंप करने के लिए कहता है। " -e" रंगों को क्लाइंट सक्षम करता है-> सर्वर और सर्वर-> क्लाइंट नेत्रहीन अलग हैं।

मैं बस कर tcpflow स्थापित किया है

sudo apt-get install tcpflow

2
वाह। tcpflow बहुत बढ़िया है, धन्यवाद! मुझे तारकोल के साथ होने वाले दर्द का एक टन बचा लिया। Wireshark, tcpdump, आदि के पास बहुत अधिक जानकारी है और वास्तव में वह नहीं करते हैं जो मूल प्रश्न पूछता है। tcpflow इसके लिए एकदम सही है।
रस

10
Tcpflow संस्करण 1.3 -eसे स्कैनर नाम निर्दिष्ट करने के लिए विकल्प का उपयोग किया जाता है। तो त्रुटि "अमान्य स्कैनर नाम '8983' मुद्रित है। सही कमांड हैsudo tcpflow -i any -C -J port 1234
मिशाल कोवेक

6
ध्यान दें कि नवीनतम रिलीज़ में -Jबदल दिया गया है -g
22

2
किसी को उपकरण के लेखकों को समझाने की आवश्यकता है कि "पिछड़ी संगतता" शब्द का क्या मतलब है!
श्रीधर सरनोबत

यह मेरे लिए "चीजों" को दो बार प्रिंट करता है। ऐसा क्यों है ? lpaste.net/3984129577801744384
user1198559

29

समाज वह उपकरण है जिसे आप पूछ रहे हैं। यह एक प्रॉक्सी के रूप में कार्य कर सकता है:

$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello

उसके बाद आपके आवेदन को सीधे 1234 से कनेक्ट करने के बजाय 4444 पोर्ट कनेक्ट करना होगा

-v विकल्प समाज के लिए मानक त्रुटि (स्टडर) पर प्राप्त होने वाली हर चीज को प्रिंट करने के लिए है।

अपडेट करें:

यदि सोसाइटी आपकी मशीन पर उपलब्ध नहीं है, तो आप अभी भी इसका उस तरह से अनुकरण कर सकते हैं जैसे netcat:

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

caveats: यह विकल्प यूनिडायरेक्शनल है। दूसरा नेटकैट उदाहरण आपके सर्वर से मानक आउटपुट पर किसी भी रिपॉंट को प्रिंट करेगा। आप तब भी कर सकते हैं:

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo

मान लीजिए कि मेरे पास क्लाइंट और सर्वर पर नियंत्रण नहीं है, (या मैं इसे रोकना नहीं चाहता), इसलिए मैं यह नहीं बदल सकता कि कौन से पोर्ट शामिल हैं या ट्रैफ़िक को रोकें। फिर क्या?

20

विरेचक का प्रयास करें । यह लिनक्स और विंडोज दोनों के लिए लक्षित एक उत्कृष्ट प्रोटोकॉल विश्लेषक है।


3
मेरा अनुभव है कि इंटरफ़ेस वास्तव में लिनक्स पर बेकार है।
जो फिलिप्स

धिक्कार है, तुम वहाँ मुझसे पहले, वायरशार्क पर +1

क्या आप एक उदाहरण कमांड-लाइन दे सकते हैं?

इस लिंक पर एक नज़र डालें wiki.wireshark.org/Tools यह वायरशार्क के लिए कमांड लाइन टूल की एक सूची देता है। डम्पर के लिए बाहर देखो।
केविन बोयद

13

tcpflow क्या आप चाहते हैं। मैन पेज से निकालें:

DESCRIPTION
tcpflow एक ऐसा प्रोग्राम है जो टीसीपी कनेक्शन (फ्लो) के हिस्से के रूप में प्रेषित डेटा को कैप्चर करता है, और डेटा को एक तरह से स्टोर करता है जो प्रोटोकॉल विश्लेषण या डीबगिंग के लिए सुविधाजनक है। Tcpdump (4) जैसा एक कार्यक्रम तार पर देखे गए पैकेटों का सारांश दिखाता है, लेकिन आमतौर पर उस डेटा को संग्रहीत नहीं करता है जिसे वास्तव में प्रसारित किया जा रहा है। इसके विपरीत, tcpflow वास्तविक डेटा स्ट्रीम को फिर से संगठित करता है और प्रत्येक प्रवाह को बाद के विश्लेषण के लिए एक अलग फाइल में संग्रहीत करता है। tcpflow टीसीपी अनुक्रम संख्याओं को समझती है और सही तरीके से रेट्रांस्मिशन या आउट-ऑफ-ऑर्डर डिलीवरी की परवाह किए बिना डेटा स्ट्रीम का पुनर्निर्माण करेगी।

tcpflow उन सभी कैप्चर किए गए डेटा को फाइलों में संग्रहीत करता है जिनमें फॉर्म के नाम हैं

192.168.101.102.02345-010.011.012.013.45103

जहाँ उपरोक्त फ़ाइल की सामग्री 192.168.101.102 पोर्ट 2345, 10.11.12.13 पोर्ट 45103 होस्ट करने के लिए होस्ट की गई डेटा से प्रसारित होगी।

अपने एप्लिकेशन ऐप से अपने सर्वर पर कनेक्शन सेट करें। जब कनेक्शन उठ रहा है और चल रहा है, tcpflow अभी भी इसमें से डेटा कैप्चर करने में सक्षम है।

$ sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo

प्रत्येक डेटा को 127.000.000.001.48842-127.000.000.001.05555 नामक फ़ाइल में संग्रहीत किया जाएगा।

आप अभी भी विकल्प -सी के साथ मानक आउटपुट पर इसे पुनर्निर्देशित कर सकते हैं। जिस पृष्ठ पर कब्जा करने के लिए tcpflow चाहते हैं, उसे ट्यून करने के लिए अभिव्यक्ति के साथ खेलने के लिए मैनुअल पेज पढ़ें।


2

ngrepइसके लिए बहुत अच्छा है। यह पैकेट के भीतर खोजने के लिए BPF स्ट्रिंग और एक वैकल्पिक स्ट्रिंग लेता है, और फिर पैकेट सामग्री को एक बहुत उपयोगी प्रारूप में स्क्रीन करने के लिए डंप करता है। यह वैकल्पिक रूप से एक pcap_dump फ़ाइल को भी डंप करता है जिसे आप बाद में Wireshark में अधिक बारीकी से जांच सकते हैं।


0

Chaosreader पर एक नज़र डालें । हालाँकि यह आपके द्वारा मांगने और थोड़ा अलग तरीके से थोड़ा अधिक करता है, शायद आप इसके कोड को संशोधित कर सकते हैं कि आप क्या चाहते हैं।


-1

उदाहरण के लिए, आप tcpdump के लिए एक आवरण लिख सकते हैं, जो सभी अनावश्यक जानकारी को हटा देगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.