Простой способ проверить действительный фильтр BPF
Какой самый простой способ проверить фильтр BPF как обычный пользователь?
Я обнаружил, что проще всего запустить tcpdump с небольшим файлом pcap в качестве входных данных для -r
вариант.
$ tcpdump -r one_packet.pcap -F invalid_bpf.conf 2> /dev/null ; echo $?
1
$ tcpdump -r one_packet.pcap -F valid_bpf.conf 2> /dev/null ; echo $?
0
Возвращает стандартные коды ошибок для недопустимых или действительных фильтров BPF. Это требует, чтобы у меня был файл PCAP для предоставления в качестве входных данных.
Есть ли способ сделать этот простой тест без файла PCAP или специальных привилегий?
1 ответ
Если у вас есть оболочка со встроенной командой "echo", которая поддерживает escape-последовательности, один из несколько извращенных способов сделать это -
echo -en "\0324\0303\0262\0241\02\0\04\0\0\0\0\0\0\0\0\0\0377\0377\0\0\01\0\0\0"|\
./tcpdump -r - -F bpf.conf 2>/dev/null; echo $?
Это сработало для меня на OS X 10.8, которая имеет bash 3.2.48(1)-релиз (x86_64-apple-darwin12).
Эта команда "echo" записывает короткий файл pcap без пакетов в нем и с типом заголовка канального уровня DLT_EN10MB
, Это проверит, является ли фильтр действительным для Ethernet; Существуют фильтры, которые действительны для некоторых типов заголовков канального уровня, но не действительны для других, например, "не транслируются", которые действительны для Ethernet, но не для PPP, поэтому вам нужно будет выбрать тип заголовка канального уровня, чтобы использовать при тестировании.