Мне необходимо отсеивать пакеты по определенному шаблону (например, с определенными начальными двумя байтами данных). Погуглив, ничего не нашел по поводу отсеивания трафика по шаблонам данных в tcpdump.
Посмотрите
здесь, 11 страница. Вкратце, релевантный синтаксис Berkeley packet filter таков:
protocol[start:count]=0xHEXTEMPLATE
пример для "GET " в начале HTTP-сообщения (точнее, в начале поля данных TCP):
tcp[20:4] = 0x47455420
Если в tcpdump нет такой возможности, подскажите, пожалуйста, альтернативные снифферы, желательно не тяжелые и без гуя (для использования на сервере с CentOS).
В tcpdump такая возможность (если я правильно понял вашу проблему) есть, но рекомендую обратить внимание на tshark, консольный вариант wireshark. Для захвата трафика они используют bpf-фильтры, фильтры для отображения трафика у них можно настроить более гибко, на мой взгляд.
Еще один вариант решения вашей проблемы - захватить весь трафик (или с грубой фильтрацией), если это возможно (т.е. интенсивность трафика невелика) при помощи tcpdump и отфильтровать при помощи фильтров отображения (display filters) в wireshark/tshark.