Как перечислить все IP-адреса сервера

Вопрос или проблема

Когда я набираю 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 для упрощения доступа к вашему серверу. Это позволит вам эффективно управлять сетевыми адресами, обеспечивая стабильное и надежное функционирование вашего сервера.

Оцените материал
Добавить комментарий

Капча загружается...