Решение для команды sendmail - посмотреть на свой файл "/etc/mail/sendmail.mc":
dnl #
dnl # The following limits the number of processes sendmail can fork to accept
dnl # incoming messages or process its message queues to 20.) sendmail refuses
dnl # to accept connections once it has reached its quota of child processes.
dnl #
dnl define(`confMAX_DAEMON_CHILDREN', `20')dnl
dnl #
dnl # Limits the number of new connections per second. This caps the overhead
dnl # incurred due to forking new sendmail processes. May be useful against
dnl # DoS attacks or barrages of spam. (As mentioned below, a per-IP address
dnl # limit would be useful but is not available as an option at this writing.)
dnl #
dnl define(`confCONNECTION_RATE_THROTTLE', `3')dnl
(Treat "dnl" as a comment leadin string.)
Если вы просто рассылаете письма, то, вероятно, вам следует их дросселировать.
bash
, вероятно, не имеет прямого доступа к соответствующему системному вызову inet_pton(3)
, так что вам, вероятно, придется вызывать что-то подобное, например, sipcalc
(который должен быть в порте или дереве пакетов для различных unix). Языки более высокого уровня, вероятно, также могут получить вызов inet_pton(3)
или эквивалентный, но детали будут зависеть от языка, например, я использовал NetAddr::IP
для кода, связанного с подсетями в Perl.
Как насчет использования команды ip;
ip route get <ip-address>
Если оно неверно, возвращаемое значение будет равно 1.
Основываясь на ответе @ktaka, я не рекомендую использовать ip route get
для проверки IP-адресов, если только ваш скрипт сильно не зависит от сетевого подключения. Причина в том, что если ваша система не имеет хорошего подключения к Интернету или полностью отключена от Интернета, то при использовании ip route get
ваш скрипт всегда будет возвращать 1, даже если IP-адрес определен правильно.
Решение:
Я просмотрел ссылку на руководство, предоставленную @Rolf Rander, и был сбит с толку, почему мой двоичный файл ipcalc
в Debian 11 не имеет опции -c
, а также мой предыдущий двоичный файл ipcalc
не поддерживает ipv6
. Итак, я искал в Google имя автора, взятое со страницы руководства с этим ключевым словом dcantrell ipcalc
, и получил официальную ссылку здесь:
https://gitlab.com/ipcalc/ipcalc
Таким образом, приведенный выше официальный ipcalc
поддерживает IP-адреса как IPv4, так и IPv6. Чтобы установить это, они рекомендуют использовать современную сборку с мезоном (, но они также предоставили старую сборку make, если вы не хотите использовать мезон )
Итак, вот как я устанавливаю ipcalc
наDebian 11
:
Удалить существующий ipcalc (существующая версия не подходит)
apt-get -y remove ipcalc
rm -rf "/usr/bin/ipcalc"
Теперь установите ipcalc из официального репозитория здесь:
apt -y install meson
git clone https://gitlab.com/ipcalc/ipcalc.git
cd ipcalc
meson setup build --buildtype=release
ninja -C build
cp build/ipcalc /usr/bin
apt -y remove meson
ipcalc --version
1.0.1
Теперь вы можете использовать это ipcalc
для проверки как IPv4, так и IPv6:
#!/bin/bash
IP="1.1.1.1"
if ipcalc -s -c $IP; then
echo "valid IPv4 or IPv6"
else
echo "Invalid IPv4 or Ipv6"
fi
-s
для игнорирования сообщения об ошибке, -c
для проверки без вывода
Если вы хотите проверить определенный IPv4, используйте -4
или используйте -6
для проверки IPv6. Пример:
#!/bin/bash
# IP is a valid IPv6
IP="::1"
# But we want to check only IPv4
if ipcalc -s -4 -c $IP; then
echo "valid IPv4"
else
echo "Invalid IPv4"
fi
Выход:
Invalid IPv4
Я давно использую sipcalc
и ipv6calc
, и они могут выполнять проверку как IPv4, так и IPv6, но мне больше нравится ipcalc
, потому что большая часть вывода проста, а для других есть вывод json. целей.