Проверка IP-адресов (IPv4 и IPv6)

Решение для команды 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.)

Если вы просто рассылаете письма, то, вероятно, вам следует их дросселировать.

5
10.12.2015, 19:03
3 ответа

bash, вероятно, не имеет прямого доступа к соответствующему системному вызову inet_pton(3), так что вам, вероятно, придется вызывать что-то подобное, например, sipcalc (который должен быть в порте или дереве пакетов для различных unix). Языки более высокого уровня, вероятно, также могут получить вызов inet_pton(3) или эквивалентный, но детали будут зависеть от языка, например, я использовал NetAddr::IP для кода, связанного с подсетями в Perl.

1
27.01.2020, 20:43

Как насчет использования команды ip;

ip route get <ip-address>

Если оно неверно, возвращаемое значение будет равно 1.

3
19.04.2020, 10:06

Основываясь на ответе @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. целей.

2
29.09.2021, 09:16

Теги

Похожие вопросы