Я пытаюсь проверить, работает ли система. Для этого я могу использовать команду tcpdump, чтобы просмотреть захваченные пакеты и использовать ее для проверки того, что система в данный момент работает. Однако я пытаюсь включить это в сценарий и не знаю, как поместить эту логику в условное выражение.
Я пытался использовать netcat, но, похоже, это вообще не работает, поэтому в данный момент я пытаюсь использовать tcpdump только потому, что, по крайней мере, это работает.
Вот команда tcpdump, которая работает, но у меня возникли проблемы с включением в условное выражение if
tcpdump -i eth0 "udp port 69420"
Вот некоторый псевдокод того, что я пытаюсь выполнить:
if tcpdump captured any packets
echo "system is up"
в команде -c
присутствует флаг tcpdump
, который позволяет пользователю указать количество захваченных пакетов. установите его на 1 и поместите в состояние if
.
лайк if tcpdump -i eth0 "udp port 69420" -c 1 ;then echo "system is up" fi
Спасибо PS это было то, что я искал. Дэвид, я ценю ответ, но, к сожалению, это была одна из первых вещей, которые я попытался сделать, но я заметил, что файл записывается с вещами, даже когда получено 0 пакетов.
Рад, что -c 1
— это то, что вы искали (это то, что вам следует использовать, если вы просто отвечаете на вопрос «захватываются ли пакеты»). -w file
предполагает, что у вас есть желание сохранить захваченное, иначе оно не нужно.
Это блокирующий код, который будет прослушивать пакеты на порту до тех пор, пока не будет получен 1-й пакет.
if tcpdump -i eth0 "udp port 69420" -c 1 ;then
echo "system is up"
fi
Usage: tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -Z user ] [ expression ]
PS: tcpdump
обычно не используется таким образом (непрерывный мониторинг), это исчерпывающий ресурс, инструмент, и его следует использовать для целей отладки.
Он выводит на экран по умолчанию (так есть ли там что-нибудь?), или вы можете использовать
-w file
для записи захваченных пакетов вfile
(или любое другое имя, которое вы ему дадите). Затем просто проверьте, не равен ли размерfile
нулю. (что вы можете сделать с[ -s file ]
)