Làm thế nào để hiển thị giao diện trong luồng đầu ra tcpdump?


20

Đây có vẻ là một vấn đề khá nhỏ, nhưng sau khi tìm kiếm, tôi không thể tìm ra câu trả lời. Người ta có thể chạy tcpdump bằng cách sử dụng "any" làm mô tả giao diện, nghĩa là:

 # tcpdump -i any -n host 192.168.0.1

Có cách nào để buộc tcpdump hiển thị trên giao diện nào gói tin được hiển thị không?

Cập nhật:

Khi nhiều người xác nhận điều này có lẽ là không thể với vanilla tcpdump, ai đó có thể đề xuất một giải pháp cho vấn đề được đề cập không? Có lẽ khác sniffer?

Vấn đề chung như sau: Trên một hệ thống có 50 giao diện xác định giao diện gửi đến cho các gói đến từ địa chỉ IP cụ thể.

Câu trả lời:


19

Tôi hy vọng ai đó vẫn quan tâm đến giải pháp cho vấn đề. ;) Chúng tôi có cùng một vấn đề trong công ty của chúng tôi và tôi bắt đầu viết một kịch bản cho việc này.

Tôi đã viết một bài đăng trên blog về nó với mã nguồn và ảnh chụp màn hình .

Tôi cũng đã chia sẻ nó bên dưới ...

nhập mô tả hình ảnh ở đây

Và mã: (Hãy chắc chắn kiểm tra trang web của tôi để cập nhật trong tương lai)

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

Bạn có thể sử dụng tùy chọn -e để in các tiêu đề ethernet, sau đó bạn có thể tương quan các địa chỉ MAC src / dst với các giao diện mạng của bạn;).


-eChỉ sử dụng in một địa chỉ MAC trên mỗi dòng. Đối với các gói đến, MAC nguồn không hữu ích trong việc xác định giao diện mà nó đến.
kasperd

1

Tôi cũng không biết câu trả lời nào cho điều đó. Tôi thấy không có tùy chọn nào cho nó, không thể nhớ là đã từng thấy một cái, và khá chắc chắn rằng định dạng tcpdump không bao gồm định danh giao diện. Tôi nghĩ bạn sẽ phải bắt đầu một ví dụ tcpdump cho mỗi giao diện và đăng nhập vào các tệp tương ứng.


Tôi đồng tình. Thông thường khi tôi đánh hơi lưu lượng truy cập, tôi đã biết lưu lượng truy cập đến từ đâu hoặc đi đâu. Nếu tôi phải tìm ra điều đó, tôi sẽ có con cá lớn hơn để chiên trước ...
Corey S.

2
Tôi thực sự cần chức năng này rất thường xuyên. Tôi có một số giao diện, rất nhiều giao diện vlan, với IGP và BGP ở trên này. Tìm hiểu làm thế nào các gói đang chảy là rất cần thiết rất thường xuyên. Tôi có thể tự kiểm tra giao diện gửi đi bằng cách kiểm tra bảng định tuyến hiện tại. Nhưng nếu tôi phải tìm cách các gói tin đến từ internet, đôi khi tôi phải kiểm tra một cách mù quáng, chỉ bằng cách bắt đầu tcpdump trên hầu hết các giao diện có thể xảy ra. :(
mdrozdziel

1

Nếu bạn đang chạy trên Mac, có một -ktùy chọn tcpdumpnếu bạn đang sử dụng giao diện pktap, loại bỏ tên giao diện trong số các siêu dữ liệu hữu ích khác.

   -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

Để thêm vào kịch bản bash tuyệt vời của Sebastian Haas. Tôi đã phải đơn giản hóa kịch bản của anh ấy vì nó thất bại trong dòng này tcpdump -l $@ | sed 's/^/[Interface:'"${BASH_REMATCH[0]:2}"'] /' &.

Mặc dù nó không linh hoạt như tập lệnh gốc, nhưng nó có nhiều khả năng chạy trong hệ thống linux bị tước bỏ.

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

Bạn cũng có thể quan tâm đến vé phát hành github hiện tại liên quan đến thiếu sót tính năng này trong https://github.com/the-tcpdump-group/tcpdump/issues/296 .


0

Giả sử đây là trên Linux, bạn có thể thêm quy tắc iptables để khớp với gói bạn đang tìm và ghi nhật ký. Nhật ký Iptables bao gồm các giao diện xâm nhập và đi ra, trong số những thứ khác.


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

Điều chỉnh -c khi cần thiết.


0

bằng cách sửa đổi dòng phát hiện giao diện, bạn có thể loại bỏ các giao diện địa chỉ bí danh trong linux. mẫu dưới đây ..

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

thay đổi

for interface in $(ifconfig | grep flags | sed s/': '/' ~ '/g | grep -v : | awk '{print $1}')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.