Tcpdump आउटपुट प्रवाह में इंटरफ़ेस कैसे प्रदर्शित करें?


20

यह काफी तुच्छ समस्या लगती है, लेकिन कुछ खोज के बाद मैं इसका जवाब नहीं दे सकता। इंटरफ़ेस विवरण के रूप में "किसी भी" का उपयोग करके कोई भी tcpdump चला सकता है:

 # tcpdump -i any -n host 192.168.0.1

क्या tcpdump को यह दिखाने का कोई तरीका है कि किस इंटरफ़ेस पर प्रदर्शित पैकेट को पकड़ा गया था?

अपडेट करें:

जैसा कि अधिक लोगों ने पुष्टि की कि यह संभवतः वैनिला टीसीपीडम्प के साथ संभव नहीं है, क्या कोई उल्लेखित समस्या के समाधान का प्रस्ताव कर सकता है? शायद अलग-अलग स्निफर?

सामान्य समस्या निम्नानुसार है: 50 इंटरफेस वाले सिस्टम पर यह निर्धारित किया जाता है कि विशिष्ट आईपी पते से आने वाले पैकेट के लिए इनबाउंड इंटरफ़ेस क्या है।

जवाबों:


19

मुझे आशा है कि कोई व्यक्ति अभी भी समस्या के समाधान में रुचि रखता है। ;) हमारी कंपनी में एक ही मुद्दा था और मैंने इसके लिए एक स्क्रिप्ट लिखना शुरू किया।

मैंने स्रोत कोड और स्क्रीनशॉट के साथ इसके बारे में एक ब्लॉग पोस्ट लिखा था

मैंने इसे नीचे भी साझा किया है ...

यहाँ छवि विवरण दर्ज करें

और कोड: (भविष्य के अपडेट के लिए मेरी साइट की जांच करना सुनिश्चित करें)

#!/bin/bash
#===================================================================================
#
# FILE: dump.sh
# USAGE: dump.sh [-i interface] [tcpdump-parameters]
# DESCRIPTION: tcpdump on any interface and add the prefix [Interace:xy] in front of the dump data.
# OPTIONS: same as tcpdump
# REQUIREMENTS: tcpdump, sed, ifconfig, kill, awk, grep, posix regex matching
# BUGS:  ---
# FIXED: - In 1.0 The parameter -w would not work without -i parameter as multiple tcpdumps are started.
#        - In 1.1 VLAN's would not be shown if a single interface was dumped.
# NOTES: ---
#        - 1.2 git initial
# AUTHOR: Sebastian Haas
# COMPANY: pharma mall
# VERSION: 1.2
# CREATED: 16.09.2014
# REVISION: 22.09.2014
#
#===================================================================================

# When this exits, exit all background processes:
trap 'kill $(jobs -p) &> /dev/null && sleep 0.2 &&  echo ' EXIT
# Create one tcpdump output per interface and add an identifier to the beginning of each line:
if [[ $@ =~ -i[[:space:]]?[^[:space:]]+ ]]; then
    tcpdump -l $@ | sed 's/^/[Interface:'"${BASH_REMATCH[0]:2}"'] /' &
else
    for interface in $(ifconfig | grep '^[a-z0-9]' | awk '{print $1}')
    do
       tcpdump -l -i $interface -nn $@ | sed 's/^/[Interface:'"$interface"']    /' &
    done
fi
# wait .. until CTRL+C
wait

6

आप ईथरनेट हेडर को प्रिंट करने के लिए -e विकल्प का उपयोग कर सकते हैं, फिर आप अपने नेटवर्क इंटरफेस के साथ src / dst MAC एड्रेस को सहसंबंधित कर सकते हैं;)।


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

1

मुझे इसका कोई जवाब नहीं पता है। मुझे इसके लिए कोई विकल्प नहीं मिला, कभी भी एक को देखकर याद नहीं किया जा सकता है, और यह निश्चित है कि tcpdump प्रारूप में एक इंटरफ़ेस पहचानकर्ता शामिल नहीं है। मुझे लगता है कि आपको प्रत्येक इंटरफ़ेस के लिए एक tcpdump उदाहरण शुरू करना होगा और संबंधित फ़ाइलों में लॉग इन करना होगा।


मैं सहमत हूँ। आमतौर पर जब मैं ट्रैफ़िक को सूँघ रहा होता हूँ, तो मुझे पहले से ही पता होता है कि ट्रैफ़िक कहाँ से आ रहा है या कहाँ जा रहा है। अगर मुझे यह पता लगाना है कि मेरे पास पहले तलने के लिए बड़ी मछली है ...
कोरी एस।

2
मुझे वास्तव में इस कार्यक्षमता की बहुत आवश्यकता है। मेरे पास कई इंटरफेस हैं, बहुत सारे व्लान इंटरफेस हैं, इसके ऊपर IGP और BGP हैं। यह पता लगाना कि पैकेट कैसे बह रहे हैं, बहुत बार जरूरी है। मैं वर्तमान राउटिंग टेबल की जांच करके मैन्युअल रूप से आउटबाउंड इंटरफ़ेस की जांच कर सकता हूं। लेकिन अगर मुझे इंटरनेट से पैकेट्स को ढूंढना है, तो कभी-कभी मुझे सबसे अधिक संभावित इंटरफेस पर tcpdump शुरू करके अंधा परीक्षण करना पड़ता है। :(
mdrozdziel

1

यदि आप मैक पर चल रहे हैं, तो यदि आप pktap इंटरफ़ेस का उपयोग कर रहे हैं, तो एक -kविकल्प है tcpdump, जो अन्य उपयोगी मेटाडेटा के बीच इंटरफ़ेस नाम को डंप करता है।

   -k     Control the display of packet metadata via an optional metadata_arg argument. This is useful when displaying packet saved in the
          pcap-ng file format or with interfaces that support the PKTAP data link type.

          By default, when the metadata_arg optional argument is not specified, any available packet metadata information is printed  out.

          The  metadata_arg  argument controls the display of specific packet metadata information using a flag word, where each character
          corresponds to a type of packet metadata as follows:

                 I     interface name (or interface ID)
                 N     process name
                 P     process ID
                 S     service class
                 D     direction
                 C     comment
                 U     process UUID (not shown by default)
                 A     display all types of metadata

          This is an Apple modification.

1

सेबस्टियन हास के महान बैश स्क्रिप्ट में जोड़ने के लिए। मुझे इस लाइन में असफल होने के बाद से उनकी स्क्रिप्ट को सरल बनाना पड़ा tcpdump -l $@ | sed 's/^/[Interface:'"${BASH_REMATCH[0]:2}"'] /' &

हालांकि यह मूल लिपि की तरह लचीला नहीं है, लेकिन यह नीचे छीन लिनेक्स प्रणाली में चलने की अधिक संभावना है।

#!/bin/sh
interfaces="eth0 ip6tnl1" # Interfaces list separated by whitespace
#===================================================================================
#
# FILE: dump-stripped.sh
# USAGE: dump.sh [tcpdump-parameters]
# DESCRIPTION: tcpdump on any interface and add the prefix [Interace:xy] in 
#               front of the dump data. Simplified to work in more limited env.
# OPTIONS: similar to tcpdump
# REQUIREMENTS: tcpdump, sed, ifconfig, kill, awk, grep, posix regex matching
# AUTHOR: Sebastian Haas (Stripped down By Brian Khuu)
#
#===================================================================================

# When this exits, exit all background processes:
trap 'kill $(jobs -p) &> /dev/null && sleep 0.2 &&  echo ' EXIT

# Create one tcpdump output per interface and add an identifier to the beginning of each line:
for interface in $interfaces;
do tcpdump -l -i $interface -nn $@ | sed 's/^/[Interface:'"$interface"'] /' 2>/dev/null & done;

# wait .. until CTRL+C
wait;

Https://github.com/the-tcpdump-group/tcpdump/issues/296 में इस सुविधा की छूट के बारे में आप वर्तमान github जारी टिकट में भी रुचि हो सकते हैं ।


0

यह मानते हुए कि यह लिनक्स पर है, आप जिस पैकेट की तलाश कर रहे हैं उससे मिलान करने और उसे लॉग इन करने के लिए एक iptables नियम जोड़ सकते हैं। Iptables लॉग में अन्य चीजों के अलावा इंग्रेस और इगोर इंटरफेस शामिल हैं।


0
for interface in `ifconfig | grep '^[a-z0-9]' | awk '{print $1}'`;do echo $interface;tcpdump -i $interface -nn -c 25;done

एडजस्ट -c आवश्यकतानुसार।


0

इंटरफ़ेस डिटेक्शन लाइन को संशोधित करके, आप लिनक्स में उपनाम-पता इंटरफेस को समाप्त कर सकते हैं। नीचे नमूना ..

for interface in $(ifconfig | grep '^[a-z0-9]' | awk '{print $1}')

में परिवर्तन

for interface in $(ifconfig | grep flags | sed s/': '/' ~ '/g | grep -v : | awk '{print $1}')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.