tcpdump: tangkap salah satu dari beberapa vlan

11

Saya ingin tcpdump untuk menangkap VLAN 1000 atau VLAN 501. man pcap-filtermengatakan:

Ekspresi vlan [vlan_id] dapat digunakan lebih dari sekali, untuk memfilter hierarki VLAN. Setiap penggunaan ekspresi itu menambah offset filter sebanyak 4.

Ketika saya melakukannya:

tcpdump -vv -i eth1 \( vlan 1000 \) and \( ip host 10.1.1.98 or ip host 10.1.1.99 \)

Saya mendapatkan paket yang diambil.

Tetapi ketika saya melakukannya:

tcpdump -vv -i eth1 \( vlan 1000 or vlan 501 \) and \( ip host 10.1.1.98 or ip host 10.1.1.99 \)

Saya tidak mendapatkan paket apa pun - saya berasumsi karena perilaku "kenaikan berdasarkan 4" yang dijelaskan dalam halaman manual.

Bagaimana saya bisa menangkap lalu lintas di lebih dari satu VLAN sekaligus?

bstpierre
sumber

Jawaban:

15

Saya ingat bahwa Anda dapat memeriksa paket byte secara langsung. Jadi melihat langsung ke karya header ethernet:

tcpdump -vv -i eth1 '( vlan and ( ether[14:2] & 0xfff == 1000 or ether[14:2] & 0xfff == 501 ) ) and ( ip host 10.1.1.98 or ip host 10.1.1.99 )'

Jangan lupa :2, ini adalah bidang 2 byte - saya terjebak pada ini untuk sementara waktu.

bstpierre
sumber
6

Ini dapat dilakukan dengan cara yang lebih sederhana daripada menggunakan ujian paket mendalam, cukup gunakan grep:

tcpdump -n -i eth1 -e | grep "vlan 1000" 

-e: Cetak tajuk level tautan pada setiap saluran pembuangan.

itu akan mencetak garis seperti

ethertype 802.1Q (0x8100), length 60: vlan 1000, p 0, ethertype ARP

yang bisa dengan mudah ditangkap oleh grep

Jika Anda ingin mendapatkan lebih dari satu ID VLAN, Anda dapat menggunakan perintah seperti:

tcpdump -n -i eth1 -e | grep "vlan 1000\|vlan 501"
SchwarzW01f
sumber