2011-10-20 21 views
18

किसी को भी "Google क्रोम से/प्रत्येक इंटरनेट पैकेट को प्रदर्शित करने" या "पीआईडी ​​10275 के साथ टेलनेट प्रक्रिया से प्रत्येक इंटरनेट पैकेट को प्रदर्शित करने" के लिए लिनक्स से पूछने का एक आसान तरीका पता है?मैं प्रति पीआईडी ​​नेटवर्क पैकेट कैप्चर कैसे कर सकता हूं?

टेलनेट उदाहरण बहुत उपयोगी नहीं है, क्योंकि मैं पोर्ट 23 से जुड़े सभी टीसीपी वार्तालापों को देखने के लिए केवल वायरशर्क या टीसीपीडम्प का उपयोग कर सकता हूं। वह और कोई भी टेलनेट का उपयोग नहीं करता है। लेकिन जटिल पैकेजों से सभी पैकेटों को सूँघना जो कई बंदरगाहों का उपयोग करते हैं, उपयोगी चीज की तरह दिखते हैं।

मैं बंदरगाहों और PIDs (या प्रोग्राम नाम) की पुष्टि के लिए और इस तरह के अलग अलग तरीकों की खोज के कुछ संबंधित जवाब है, लेकिन पैकेट

के बारे में कुछ भी नहीं मिला ऐसा लगता है कि कोई इस जवाब के लिए थोड़ी देर पहले भुगतान करने को तैयार हो सकता है:

NetHogs जल्दी देखकर कार्यक्रमों एक अंतरफलक से अधिक यातायात पैदा कर रहे के लिए उपयोगी है, लेकिन यह पैकेट कैप्चर करने का तरीका नहीं है।

+0

एचआरएम, क्या मुझे इसके बजाय सर्वरफॉल्ट पर पूछना चाहिए? –

+0

यह वास्तव में सुपरयूसर पर है, वास्तव में। एक दिलचस्प सवाल है। आप HTTP अनुरोधों को फ़िल्टर करने के लिए वायरशर्क का उपयोग कर सकते हैं, लेकिन आपको पीआईडी ​​ – Bojangles

+1

के आधार पर पैकेट फ़िल्टर करने के लिए कर्नेल ड्राइवरों में हुक करना होगा। यह एक जटिल समस्या है - सॉकेट पीआईडी ​​के स्वामित्व में नहीं हैं; आप उन्हें एक प्रक्रिया से दूसरे प्रक्रिया में पारित कर सकते हैं। यदि प्रक्रिया ए एक सॉकेट खोलता है, तो यह बी को संसाधित करने के लिए इसे पार कर सकता है - अगर आप प्रक्रिया ए के पीआईडी ​​पर फ़िल्टर कर रहे हैं, तो अब क्या होता है? – bdonlan

उत्तर

1

मैं इच्छित आवेदन से जुड़े पोर्ट नंबर प्राप्त करने के लिए lsof -i का उपयोग करूंगा। कोड इस तरह होगा:

 
process=firefox 
for _port in `lsof -i | grep $process | cut -d' ' -f18 | cut -d: -f2 | cut -d'-' -f1` 
do 
    port=$_port 
    [[ "$_port" == +([a-zA-Z]) ]] && port=`cat /etc/services | grep '^$_port' | cut -d' ' -f12 | cut -d'/' -f1 | uniq | head -n 1` 

    echo "tcpdump -w ${port}.pcap port $port &" 
    tcpdump -w ${port}.pcap port $port & 
done 

ध्यान दें कि आदेशों के उत्पादन में विभिन्न संस्करणों/वितरण पर अलग हो सकता है। इसलिए, आप स्क्रिप्ट का उपयोग करने से पहले सही फाइलों को बेहतर ढंग से जांच लेंगे।

इसके अलावा, यह स्क्रिप्ट बाद में खोले गए बंदरगाहों की निगरानी नहीं करती है। इसके लिए, मैं एक और जटिल स्क्रिप्ट पर विचार करता हूं जो नियमित रूप से बंदरगाहों की जांच करता है (watch जैसे कुछ का उपयोग करके)

और बाद में सभी टीसीपीडम्प प्रक्रियाओं को मारना याद रखें।

2

टीसीपीडम्प आपको पीआईडी ​​/ प्रक्रिया बता सकता है कि एक पैकेट/से आता है।
अपने विकल्पों में '-के एनपी' फेंको।

संस्करण समर्थित: tcpdump संस्करण 4.3.0 - ऐप्पल संस्करण 56

+8

प्रश्न पूछा गया था। लिनक्स के टीसीपीडम्प में ऐसा कोई विकल्प नहीं है जो पीआईडी ​​जानकारी दिखाता है। – shivams

+0

यह मैक में काम करता है। –

संबंधित मुद्दे