Mam nadzieję, że ktoś nadal jest zainteresowany rozwiązaniem problemu. ;) W naszej firmie mieliśmy ten sam problem i zacząłem pisać scenariusz.
Napisałem o tym post na blogu z kodem źródłowym i zrzutem ekranu .
Udostępniłem to również poniżej ...
I kod: (Pamiętaj, aby sprawdzić moją witrynę pod kątem przyszłych aktualizacji)
#!/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
-e
powoduje wydrukowanie tylko jednego adresu MAC w każdej linii. W przypadku pakietów przychodzących jest to źródłowy adres MAC, który nie jest bardzo przydatny w identyfikowaniu interfejsu, do którego przyszedł.Nie znam też na to żadnej odpowiedzi. Nie znajduję dla niego żadnej opcji, nie mogę sobie przypomnieć, że kiedykolwiek ją widziałem, i jestem raczej pewien, że format tcpdump nie zawiera identyfikatora interfejsu. Myślę, że będziesz musiał uruchomić jedną instancję tcpdump dla każdego interfejsu i zalogować się do odpowiednich plików.
źródło
Jeśli korzystasz z komputera Mac, istnieje
-k
opcja,tcpdump
jeśli korzystasz z interfejsu pktap, który zrzuca nazwę interfejsu wśród innych przydatnych metadanych.źródło
Aby dodać do świetnego skryptu bash Sebastiana Haasa. Musiałem uprościć jego skrypt, ponieważ zawiódł w tej linii
tcpdump -l $@ | sed 's/^/[Interface:'"${BASH_REMATCH[0]:2}"'] /' &
.Chociaż nie jest tak elastyczny jak oryginalny skrypt, jest bardziej prawdopodobne, że będzie działał w uproszczonym systemie Linux.
Być może interesuje Cię bieżący bilet wydania github dotyczący pominięcia tej funkcji na https://github.com/the-tcpdump-group/tcpdump/issues/296 .
źródło
Zakładając, że tak jest w Linuksie, możesz dodać regułę iptables, aby dopasować pakiet, którego szukasz, i zalogować go. Dziennik Iptables zawiera między innymi interfejsy wejściowe i wyjściowe.
źródło
Dostosuj -c w razie potrzeby.
źródło
modyfikując linię detekcji interfejsu, możesz wyeliminować interfejsy alias-adres w Linuksie. próbka poniżej ..
zmiany w
źródło