Вопрос или проблема
Когда я набираю ifconfig, я вижу, что у моего сервера каждый день новый ip-адрес. Эти ip-адреса принадлежат набору ip-адресов.
Как мне узнать все ip-адреса моего сервера?
Или
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:cc:ae:67 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.123/24 brd 192.168.0.255 scope global eth0
inet6 fe80::20c:29ff:fecc:ae67/64 scope link
valid_lft forever preferred_lft forever
Я предполагаю, что вы имеете в виду, что ip-адрес вашего сервера назначается динамически каждый день, и вы хотите знать пул возможных адресов, которые может иметь ваш сервер. В этом случае вы можете связаться с теми, кто управляет DHCP-сервером, который назначает адреса в вашей сети (или с вашим провайдером, если сервер напрямую подключен к интернету). Если вы хотите узнать все ip-адреса, которые имел ваш сервер в прошлом, вы можете поставить ответ Леннарта в cronjob.
ifconfig | grep inet | awk '{print $2}' >> .iplog
Или что-то в этом роде.
Спросите людей, которые администрируют DHCP-сервер, который назначает адреса вашему серверу, это единственный способ узнать это точно.
Вы можете с относительной безопасностью предположить, что ваш ip-адрес всегда будет в пределах двоичного ip-адреса и маски сети, однако гарантии такого поведения нет, и есть шансы, что пул адресов DHCP-сервера будет подмножеством ip-адреса и маски сети.
Теперь, экстраполируя, если вы хотите узнать все возможные ip-адреса для вашего сервера, потому что хотите иметь возможность находить его даже после изменения ip-адреса, я бы предложил обратить внимание на одного из поставщиков динамического DNS в интернете.
Очень простой способ вывести все ваши IPv4 и IPv6 адреса:
ifconfig | grep inet | awk '{print $2}'
или:
#!/usr/bin/env bash
OS=`uname`
case $OS in
Linux) IP=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`;;
Darwin|FreeBSD|OpenBSD) IP=`ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}'` ;;
SunOS) IP=`ifconfig -a | grep inet | grep -v '127.0.0.1' | awk '{ print $2} '` ;;
*) IP="Unknown";;
esac
echo "$IP"
найдено здесь.
Это выведет все ip, кроме 127.0.0.1 для локального хоста.
ifconfig | awk -F "[: ]+" '/inet addr:/ { if ($4 != "127.0.0.1") print $4 }'
выполняя iproute2-5.9.0, ip -br a
— это простой способ перечислить просто интерфейсы, статус и ip. Вот как собрать только ipv4 адреса:
ip -br a | awk '{print$3}' | sed '/^$/d' | cut -f1 -d"/"
Это работает для моих целей:
#!/bin/bash
# создает два файла и перекрестно ссылается на них, чтобы получить
# в настоящее время действительные адреса ip соседей
echo
echo "В настоящее время назначенные ip-адреса:"
echo
ip -r neigh > neighborhood.tmp
iw dev wlan0 station dump | grep Station > stations.tmp
while read station; do
mac=$(echo $station | awk '{print $2}')
while read neighbor; do
testmac=$(echo $neighbor | awk '{print $5}')
if [ $testmac == $mac ]; then
echo -e "\t$(echo $neighbor | awk '{print $1}')"
fi
done < neighborhood.tmp
done < stations.tmp
rm neighborhood.tmp; rm stations.tmp
echo
Ваш результат может отличаться.
Ответ или решение
Чтобы получить список всех IP-адресов сервера, необходимо учитывать, что ваша ситуация связана с динамическим назначением IP-адресов, что обычно происходит через DHCP-сервер. В этом случае ваш сервер может получать различные адреса каждый день. Вот несколько методов, которые помогут вам получить информацию о текущих и возможных IP-адресах сервера.
1. Используйте команду ifconfig
или ip addr show
Эти команды позволяют отобразить информацию о сетевых интерфейсах и их IP-адресах.
-
ifconfig:
ifconfig | grep inet | awk '{print $2}'
Эта команда фильтрует вывод
ifconfig
, оставляя только строки с IP-адресами и выводя только адреса, без127.0.0.1
(localhost). -
ip addr show:
ip addr show
Эта команда предоставляет более подробную информацию о сетевых интерфейсах, включая IPv4 и IPv6 адреса. Для более упрощенного вида используйте:
ip -br a | awk '{print $3}' | sed '/^$/d' | cut -f1 -d"/"
2. Автоматизация с помощью cron
Если вам нужно вести учет всех IP-адресов, которые ваш сервер получал в прошлом, вы можете настроить cron
, чтобы записывать текущие IP-адреса в файл. Пример команды, которую можно добавить в cron:
*/24 * * * * ifconfig | grep inet | awk '{print $2}' >> /path/to/.iplog
Это будет добавлять текущий IP-адрес в файл .iplog
каждый день.
3. Узнайте возможные IP-адреса
Для получения информации о диапазоне возможных IP-адресов, используемых DHCP-сервером, вам следует обратиться к администратору сети или в вашем провайдеру интернета. DHCP-сервер регулирует адресацию в сети, и вам нужно знать, какой диапазон адресов выделен для вашего сервера.
4. Используйте динамическую DNS
Если ваш сервер каждый раз получает разные IP-адреса, вы можете рассмотреть возможность использования услуги динамического DNS (DDNS). Это позволит вам связать доменное имя с изменяющимся IP-адресом, обеспечивая стабильный доступ к вашему серверу независимо от изменений IP-адресов.
Выводы
Подводя итоги, можно использовать комбинированный подход, чтобы обеспечить максимальный контроль над IP-адресами вашего сервера. Используйте команды ifconfig
или ip addr show
для проверки текущих IP, настройте cron
для отслеживания изменений, и не забудьте проконсультироваться с администратором сети для получения информации о DHCP-пуле. Рассмотрите также использование динамической DNS для упрощения доступа к вашему серверу. Это позволит вам эффективно управлять сетевыми адресами, обеспечивая стабильное и надежное функционирование вашего сервера.