वहाँ एक आसान कमांड लाइन उपकरण है जो लिनक्स पर एकल कमांड को सूँघता है?


11

मुझे अच्छा लगेगा अगर लिनक्स में किसी एक कमांड को पैकेट सूँघने के लिए एक ही कमांड लाइन टूल था। कुछ sniff dumpfile commandऐसा है कि आप बस उस कमांड को चला सकते हैं जिसे आप टर्मिनल में सूँघना चाहते हैं और पैकेट को कहीं और मिला सकते हैं।

मैं केवल एक ही कमांड के नेटवर्क ट्रैफ़िक को डंप / सेव / सेव करना / देखना चाहता हूं, जो मैं दर्ज करता हूं, मेरे एकल नेटवर्क इंटरफ़ेस पर सभी टीसीपी ट्रैफ़िक नहीं। इसलिए अगर मैं अपने कंप्यूटर में लॉग इन था और बैकग्राउंड में IRC चल रहा था sniff somefile wget http://www.google.com, और मैंने किया , तो मैं सभी नेटवर्क ट्रैफ़िक देखना चाहता हूँ जो कि wget कमांड ने http://www.google.com को डाउनलोड करने के लिए किया था । मैं 'somefile' नहीं चाहता कि IRC नेटवर्क ट्रैफ़िक को भ्रमित करने वाला हो।

बहुत सारे लिनक्स / यूनिक्स कमांड हैं जो एक अलग कमांड को स्वीकार करते हैं और कुछ अलग करते हैं। से sudo(सुपरयुजर के रूप में चलाएं), niceअच्छा स्तर बदलें, trickle(कमांड की बैंडविड्थ को सीमित करें)


1
यह वास्तव में क्या है, जो आप करना चाहते हैं? क्या आप जाँचना चाहते हैं कि क्या एक निश्चित कमांड चलाया जाता है? क्या आप नेटवर्क ट्रैफ़िक को सूँघना चाहते हैं? क्योंकि वाक्यांश 'पैकेट एक कमांड सूँघने' का उपयोग कर सब पर मेरे लिए कोई मतलब नहीं है ...
wzzrd

wzzrd, विस्तारित प्रश्न देखें
Rory

जवाबों:


10

ऐसा कोई भी नहीं है जिसे मैं जानता हूं, लेकिन यह सैद्धांतिक रूप से कुछ समान पाने के लिए कठिन नहीं होना चाहिए। नेटवर्किंग syscalls को इंटरसेप्ट करने के लिए स्ट्रेस का इस्तेमाल किया जा सकता है।

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

यह आपको कर्नेल और प्रक्रिया के बीच भेजे गए डेटा के बारे में जानकारी देगा। स्ट्रेस का आउटपुट वास्तव में वही नहीं है जो आप चाहते हैं। हालांकि, स्ट्रेस सिस्टम कॉल को इंटरसेप्ट करने के लिए ptrace syscall का उपयोग करता है। डेटा को थोड़ा और उपयोगी तरीके से आउटपुट करने के लिए एक प्रोग्राम लिखना संभव हो सकता है।

वैकल्पिक रूप से, आप अच्छे उपयोगी सॉकेट को भी रोक सकते हैं, बाँध सकते हैं और syscalls सुन सकते हैं। हो सकता है कि इन कॉल्स पर ptrace का इस्तेमाल करने वाले एक छोटे प्रोग्राम को लिखना संभव हो और नए सॉकेट को खोलने पर हर बार कैप्चर फ़िल्टर को गतिशील रूप से बदलने के लिए libpcap हो।


यह बहुत अच्छा होगा अगर यह कुछ ऐसा उत्पादन करता है जो विरेचक पढ़ सकता है।
ब्रैड गिल्बर्ट

ध्यान रखें कि ऊपर वर्णित धारा सोलारिस (और संभवतः अन्य वाणिज्यिक यूनियनों) के लिए सटीक है। लिनक्स पर, स्ट्रेस एक सिस्टम कॉल ट्रेसर है, जो ऑपरेशन के समान है और एचपी-यूएक्स पर सोलारिस या टस्क पर ट्रस करने के लिए आउटपुट है।
जेम्स एफ

1
मैंने लिनक्स पर स्ट्रेस का वर्णन किया है।
डेविड पशले

8

Tracedump

Tracedump एक एकल अनुप्रयोग IP पैकेट स्निफ़र है, जो एक ही लिनक्स प्रक्रिया के सभी TCP और UDP पैकेटों को कैप्चर करता है।

यहाँ डाउनलोड करें और वर्णन करें: http://mutrics.iitis.pl/tracedump


1
यह अब सही उत्तर होना चाहिए।
h0tw1r3

4

Wireshark की कोशिश करें - कमांड होगा tshark

  • tshark आपको इंटरफ़ेस से कैप्चर किए गए ट्रैफ़िक पर फ़िल्टर का चयन करने की अनुमति देता है
  • अन्य उपयोगिताओं जैसे कि डेबियन एलएसओफ़ का उपयोग करें ताकि आपके आवेदन के ब्याज के प्रकार की पहचान हो सके।

या, क्या आप वास्तव में सिर्फ LSOF चाहते हैं?


मुझे नहीं लगता कि एक उपकरण है जो गतिशील रूप से एक प्रक्रिया से जुड़े सभी संचार के लिए फ़िल्टरिंग रखेगा। हालाँकि, आप प्रक्रिया संचार को उपकरण के साथ ट्रैक करने का प्रयास कर सकते हैं जैसे lsofऔर एक बार आपके पास एक अच्छा फ़िल्टर होता है जो आपके सिस्टम पर चल रहे अन्य सभी ट्रैफ़िक से उस प्रक्रिया के संचार को अलग कर सकता है, आपको सही कैप्चर मिल सकता है।

उदाहरण के लिए, wgetआमतौर पर गंतव्य आईपी पता अन्य प्रक्रिया से संबंधित यातायात से अलग होता है। यहां तक ​​कि अगर आप कुछ लेते हैं जैसे skypeकि गंतव्य बंदरगाह रेंज आमतौर पर एक उदाहरण के लिए तय की जाती है।


यह अनिश्चितता के सिद्धांत जैसा है। आप आमतौर पर जान सकते हैं कि संचार पथों के एक सेट के माध्यम से क्या हो रहा है (प्रवाह के पहचाने गए समूह पर एक स्निफ़र फ़िल्टरिंग के साथ), या जहां विभिन्न संचार लिंक (lsof के साथ) किए जा रहे हैं।

मैं वास्तव में जानना चाहूंगा कि क्या किसी आवेदन के लिए दोनों किया जा सकता है। मुझे लगता है कि यह संभव होना चाहिए। लेकिन, अभी तक ऐसा कोई टूल नहीं देखा है।


lsof कमाल है, लेकिन मैं यह देखना चाहूंगा कि यह क्या कर रहा है / भेज रहा है / फिर से बता रहा है।
रोरी

4

फ़िल्टर अभिव्यक्तियों का उपयोग करना सीखें।

जब तक यह फैंसी ट्रेस सामान नहीं करेगा जो आप पूछ रहे हैं।

यह आपको कैप्चर से लगभग सभी "भ्रामक सामान जैसे आईआरसी" को हटाने की अनुमति देगा।

इसके अतिरिक्त भविष्य में त्वरित संदर्भ के लिए फ़िल्टर सिंटैक्स जानना बहुत उपयोगी है।


2

विशेष रूप से वेब ब्राउज़र / वेब पेज के लिए फायरबग प्लग-इन फ़ायरफ़ॉक्स जैसी कोई चीज़ आपको कुछ ऐसी जानकारी दे सकती है जिसकी आप तलाश कर रहे हैं: http://getfirebug.com/net.html

अधिक सामान्य अनुप्रयोगों के लिए, आपको बस उस ट्रैफ़िक को कैप्चर करने के लिए एक फ़िल्टर के साथ अनुप्रयोग द्वारा उपयोग किए जाने वाले पोर्ट (ओं) की पहचान करने के लिए नेटस्टैट का उपयोग करना पड़ सकता है। नहीं एक लाइन जवाब आप के लिए देख रहे थे ...


1

एक विचार, VMWare का प्रयास करें

-सेटअप vm -configure
कि vm को एक विशेष इंटरफ़ेस का उपयोग करने के लिए
होस्ट से उस इंटरफ़ेस पर -sniff (मध्यम हमले में एक आदमी की तरह)

यदि आप अलग करते हैं कि उस वीएम पर कौन से नेटवर्क एप्लिकेशन चल रहे हैं तो आपके पास आपका जवाब हो सकता है

एक अधिक आदर्श समाधान, मुझे लगता है, यह करना है कि VMWare के संदर्भ में क्या करना है यह निर्दिष्ट करता है कि यह कैसे बात करने के लिए एक इंटरफ़ेस चुनता है। मुझे लगता है कि इसका जादू कर्नेल मॉड्यूल से आता है, इस मामले में, संभवतः vmnet कर्नेल मॉड्यूल।

मेरे ज्ञान के लिए अनुप्रयोगों को पता नहीं है कि वे किस इंटरफ़ेस पर बात करते हैं और मेरा मानना ​​है कि यह डिज़ाइन द्वारा है; उन्हें ऐसी चीजों के बारे में चिंता नहीं करनी चाहिए।

इसके अलावा,
शायद एक कार्यक्रम पहले से ही मौजूद है, मुझे नहीं पता। लेकिन अगर एक लिखा गया था तो आप इसे नेटट्रेस कह सकते हैं (उदाहरण के लिए) और उपयोग की तरह हो सकता है

nettrace प्रोग्राम इंटरफ़ेस

इसके बाद इसका उपयोग करने वाले इंटरफ़ेस को सूँघें और अपने वास्तविक इंटरफ़ेस में मार्गों को जोड़ें (हो सकता है कि यह स्वचालित रूप से हो)


हाँ यह संभव होगा। हालांकि यह बहुत अच्छा होगा यदि ऐसा करने के लिए एक सरल और त्वरित उपकरण था।
रोरी

शायद यह इस सरल उपकरण का समय है? मुझे आश्चर्य है कि अगर यह इतना मुश्किल होगा, तो शायद vmnet मॉड एक अच्छा शुरुआती बिंदु हो सकता है (हालांकि मुझे नहीं पता कि लाइसेंस के मुद्दे होंगे)। शायद (एक हैक) सिर्फ vmnet मॉड का उपयोग करें। मुझे पता है कि मुझे इस तरह के सवालों में दिलचस्पी है।
संशोधित करें

1

यह मानते हुए कि आप समय पर Google से जुड़ने का प्रयास करने वाले बॉक्स के एकमात्र व्यक्ति हैं, मुझे लगता है कि इस तरह से कुछ करना चाहिए:

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

यदि आप बॉक्स पर Google से कनेक्ट करने का प्रयास करने वाले एकमात्र कनेक्शन नहीं हैं, तो यदि आप जिस IP / पोर्ट को आप से कनेक्ट कर रहे हैं, उसकी पहचान कर सकते हैं तो आप src port / src ip भी निर्दिष्ट कर सकते हैं।

Src पोर्ट की पहचान एक समस्या हो सकती है जब तक कि आप इसे जो भी क्लाइंट इस्तेमाल करते हैं उस पर निर्दिष्ट नहीं कर सकते। मुझे यकीन नहीं है कि अगर आप wget के साथ कर सकते हैं।

मुझे दृढ़ता से संदेह है कि आप src और dst दोनों पोर्ट निर्दिष्ट कर सकते हैं netcatयदि यह वास्तव में Google था जिसमें आप रुचि रखते थे, तो आप netcat के माध्यम से अपना GET (मैन्युअल रूप से) कर सकते थे।

बेशक मैन पेज आपको विशेष जानकारी देगा


1

Tcpdump मैन पेज और कई वेब साइटें फिल्टर की गहराई से उदाहरण देती हैं, और tcpdump फ़िल्टर अभिव्यक्तियों के कुछ ऑनलाइन रिपॉजिटरी भी हैं। यह लगभग कुछ भी करने में सक्षम हो सकता है जिसका आप सपना देख सकते हैं, यह मानते हुए कि आप नेटवर्क ट्रैफ़िक (स्रोत, गंतव्य, पोर्ट, प्रोटोकॉल, इत्यादि) के बारे में कुछ जानते हैं, बस उससे आगे क्या कार्यक्रम इसे उत्पन्न कर रहा है।

यदि आप एक सर्वर या हेडलेस बॉक्स पर काम कर रहे हैं, तो आप हमेशा tcpdump को एक डंप फ़ाइल लिख सकते हैं और फिर इसे अपने वर्कस्टेशन पर Wireshark में खोल सकते हैं और उन्नत फ़िल्टरिंग और एक ग्राफिकल इंटरफ़ेस प्राप्त कर सकते हैं।


एर्म, जो tcpdump कमांड पर स्विच करता है, उसे ट्रैफ़िक उत्पन्न करने वाले एकल अनुप्रयोग तक सीमित कर देगा?
मिलान बाबूसकोव

1

हो सकता है कि यह स्क्रिप्ट वही करे जो आप उचित संशोधनों के साथ tshark कमांड में करना चाहते हैं:

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

बाद में डंप फ़ाइल पढ़ें:

tshark -r dump

आप पोर्ट 8080 पर कब्जा कर रहे हैं, लेकिन पोर्ट 80 पर ट्रैफ़िक उत्पन्न कर रहे हैं; यह वह नहीं है जो आप इरादा कर रहे हैं।
जेम्स एफ

जेम्स: मेरा प्रॉक्सी 8080 से जुड़ता है, यानी मैंने स्क्रिप्ट कैसे चलाई। मुझे इस पद के उद्देश्य से इसे 80० बदलना चाहिए था।
नहीं

0

Dtrace को इसकी अनुमति देनी चाहिए, हालाँकि मुझे नहीं पता कि यह लिनक्स में अभी तक बना है या नहीं।

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