web-dev-qa-db-fra.com

Comment afficher l'interface dans le flux de sortie TCPDump?

Cela semble être un problème tout à fait trivial, mais après une recherche, je ne peux pas accueillir la réponse. On peut exécuter TCPDummp en utilisant "n'importe quel" comme description de l'interface, c'est-à-dire:

 # tcpdump -i any -n Host 192.168.0.1

Y a-t-il un moyen de forcer TCPDump à montrer sur quelle interface affichée le paquet a été capturé?

Mettre à jour:

Comme plus de personnes ont confirmé que cela n'est probablement pas possible avec Vanilla Tcpdump, quelqu'un peut-il proposer une solution au problème mentionné? Peut-être différencié différent?

La question générale est la suivante: sur un système avec 50 interfaces déterminer ce qui est une interface entrante pour les paquets provenant d'une adresse IP spécifique.

20
mdrozdziel

J'espère que quelqu'un est toujours intéressé par la solution au problème. ;) Nous avons eu le même problème dans notre entreprise et j'ai commencé à écrire un script pour cela.

J'ai écrit un article de blog à ce sujet avec le code source et une capture d'écran .

Je l'ai aussi parlé ci-dessous ...

enter image description here

Et le code: (assurez-vous de vérifier mon site pour les futures mises à jour)

#!/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
20
Sebastian Haas

Pour ajouter au grand script Bash de Sebastian Haas. J'ai dû simplifier son script puisqu'il a échoué dans cette ligne tcpdump -l $@ | sed 's/^/[Interface:'"${BASH_REMATCH[0]:2}"'] /' &.

Bien que ce ne soit pas aussi flexible que le script d'origine, il est plus susceptible de courir dans le système Down Down Down.

#!/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;

Vous pouvez également être intéressé par le ticket actuel GitHub Problème concernant cette fonctionnalité omission dans https://github.com/the-tcpdump-group/tcpdump/issues/296 .

1
Brian

Je ne sais aucune réponse à cela non plus. Je ne trouve aucune option pour cela, je ne peux jamais me rappeler de voir un, et je suis plutôt certain que le format TCPDump n'inclut pas d'identifiant d'interface. Je pense que vous devrez commencer une instance TCPDummp pour chaque interface et votre journal dans des fichiers respectifs.

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

Ajustez -c au besoin.

0
Nathan

en modifiant la ligne de détection d'interface, vous pouvez éliminer les interfaces d'adresse d'alias sous Linux. Échantillon ci-dessous ..

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

changements à

for interface in $(ifconfig | grep flags | sed s/': '/' ~ '/g | grep -v : | awk '{print $1}')
0
LTK-Tog

En supposant que cela se trouve sur Linux, vous pouvez ajouter une règle d'IPTABLES pour correspondre au paquet que vous recherchez et connectez-la. Le journal IPTABLES comprend des interfaces d'entrée et de sortie, entre autres choses.

0
vadimk