Tcpdump çıkış akışında arayüz nasıl görüntülenir?


20

Bu oldukça önemsiz bir sorun gibi görünüyor, ancak bazı aramalardan sonra cevabı bulamıyorum. Bir arabirim açıklaması olarak "herhangi" kullanarak tcpdump çalıştırabilirsiniz, yani:

 # tcpdump -i any -n host 192.168.0.1

Tcpdump'ı görüntülenen arabirimin hangi arabirimde yakalandığını göstermeye zorlamanın bir yolu var mı?

Güncelleme:

Daha fazla insan bunun vanilya tcpdump ile mümkün olmadığını doğruladığında, birisi söz konusu soruna bir çözüm önerebilir mi? Belki farklı dinleyici?

Genel sorun aşağıdaki gibidir: 50 arayüzlü bir sistemde, belirli bir IP adresinden gelen paketler için gelen arayüzün ne olduğunu belirler.

Yanıtlar:


19

Umarım birisi hala sorunun çözümü ile ilgilenir. ;) Şirketimizde de aynı sorunu yaşadık ve bunun için bir senaryo yazmaya başladım.

Kaynak kodu ve ekran görüntüsü ile ilgili bir blog yazısı yazdım .

Ben de aşağıda paylaştım ...

resim açıklamasını buraya girin

Ve kod: (Sitemi gelecekteki güncellemeler için kontrol ettiğinizden emin olun)

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

Ethernet başlıklarını yazdırmak için -e seçeneğini kullanabilirsiniz, daha sonra src / dst MAC adreslerini ağ arabirimlerinizle ilişkilendirebilirsiniz;).


Kullanıldığında -eher satıra yalnızca bir MAC adresi yazdırılır. Gelen paketler için, hangi arayüze geldiğini tanımlamak için çok yararlı olmayan kaynak MAC'dir.
kasperd

1

Ben de bunun cevabını bilmiyorum. Bunun için bir seçenek bulamıyorum, bir tanesini hiç göremiyorum ve tcpdump formatının bir arayüz tanımlayıcısı içermediğinden eminim. Her arabirim için bir tcpdump örneği başlatmanız ve ilgili dosyalara giriş yapmanız gerektiğini düşünüyorum.


Hemfikirim. Genellikle trafiği koklarken, trafiğin nereden geldiğini veya nereye gittiğini zaten biliyorum. Bunu
Corey S.

2
Bu işlevselliğe gerçekten çok sık ihtiyacım var. Bunun üzerine IGP ve BGP ile birlikte birkaç arayüzüm, çok sayıda vlan arayüzüm var. Paketlerin nasıl aktığını bulmak çok önemlidir. Geçerli yönlendirme tablosunu inceleyerek giden arayüzü manuel olarak kontrol edebilirim. Ancak, paketlerin internetten nasıl geldiğini bulmam gerekiyorsa, bazen en olası arayüzlerde tcpdump başlatarak kör kontrol yapmak zorunda kalırım. :(
mdrozdziel

1

Mac üzerinde çalışıyorsanız, arabirim adını diğer yararlı meta veriler arasında döküm yapan pktap arabirimi kullanıyorsanız -kseçeneğiniz vardır 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

Sebastian Haas'ın büyük bash senaryosuna eklemek için. Bu satırda başarısız olduğu için senaryosunu basitleştirmek zorunda kaldım tcpdump -l $@ | sed 's/^/[Interface:'"${BASH_REMATCH[0]:2}"'] /' &.

Orijinal komut dosyası kadar esnek olmasa da, soyulmuş linux sisteminde çalışma olasılığı daha yüksektir.

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

Ayrıca https://github.com/the-tcpdump-group/tcpdump/issues/296 adresindeki bu özellik ihmaliyle ilgili güncel github sayı biletiyle de ilgilenebilirsiniz .


0

Bunun Linux'ta olduğu varsayılarak, aradığınız pakete uyacak bir iptables kuralı ekleyebilir ve günlüğe kaydedebilirsiniz. Iptables günlüğü, diğer şeylerin yanı sıra giriş ve çıkış arayüzlerini içerir.


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

-C'yi gerektiği gibi ayarlayın.


0

arayüz algılama hattını değiştirerek, linux'daki takma ad adres arayüzlerini ortadan kaldırabilirsiniz. aşağıdaki örnek ..

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

olarak değişir

for interface in $(ifconfig | grep flags | sed s/': '/' ~ '/g | grep -v : | awk '{print $1}')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.