Jun. 14th, 2015

victor_sudakov: (Default)
"Meglio soli che mal accompagnati"

Лучше быть одному, чем в плохой компании.
victor_sudakov: (Default)
За значение CoS отвечают три старших бита из четырех байт 802.1q тэга. Как правильно матчить значение CoS в tcpdump?

Можно матчить байт по смещению 0x000e, например "tcpdump -v -s0 'ether[0x000e] == 0xA0'" будет ловить кадры с CoS=5. Соответственно

CoS=0 'ether[0x000e] == 0x00'
CoS=1 'ether[0x000e] == 0x20'
CoS=2 'ether[0x000e] == 0x40'
CoS=3 'ether[0x000e] == 0x60'
CoS=4 'ether[0x000e] == 0x80'
CoS=5 'ether[0x000e] == 0xa0'
CoS=6 'ether[0x000e] == 0xc0'
CoS=7 'ether[0x000e] == 0xe0'


Но эти выражения работают только при условии CFN=0 и номер vlan <= 255. С другой стороны, размер участка для сравнения в pcap-filter(7) может быть только кратным 1 байту (точнее 1, 2 или 4 байта).

Может с помощью битовых операторов можно сделать сравнение только по 3 старшим битам байта? Не могу сообразить как.

UPD спасибо [livejournal.com profile] filonov за подсказку:


Три старших бита можно либо выделить сдвигом
ether[0x000e] >> 5
либо обнулить остальные биты
ether[0x000e] & 0xe0

Со сдвигом проще потом работать с результатом. ибо старшие биты сдвигаются в младшие, и результат получается от 0 до 7.


Т.е. CoS=5 ловим выражением 'ether[0x000e] >> 5 == 0x05' либо 'ether[0x000e] & 0xe0 == 0xa0'

Profile

victor_sudakov: (Default)
Виктор Судаков

December 2024

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 19th, 2025 07:26 am
Powered by Dreamwidth Studios