Например, пример фильтра захвата WireShark, который я нашел - tcp[13] & 8 == 8
представляет пакеты с флагами PSH.
Как мне посчитать 8
?
На основе изображения из Википедии,
PSH находится в середине сегмента флагов TCP. Считая 1 от флага NS, битовое представление PSH должно быть 6?
Любое руководство приветствуется.
Вы также начинаете считать не с того места. NS может быть первым флагом, но также и конечным битом 12. Байт 13 (как в tcp[13]
) начинается с бита 8 четвертой строки (помеченный как «октет 12») и продолжается до бита 15 в той же строке.
Пришло время изучить двоичную арифметику! Чтобы получить N-й крайний правый бит из байта, вы делаете byte & (1 << N)
, поэтому крайний правый бит byte & (n << 0)
а четвертый справа - byte & (n << 3)
, что совпадает с byte << 8
.
Ты должен посмотреть на страница руководства tcpdump, Раздел «Захват TCP-пакетов с определенными комбинациями флагов» - здесь много подробностей.