Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Как в bash скрипте расчитать попадание IP в подсеть по её адресу и маске  (Прочитано 2009 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Measurer

  • Автор темы
  • Участник
  • *
  • Сообщений: 101
  • Измеритель верёвочками
    • Просмотр профиля
Есть сервер. Много тоннелей. Несколько таблиц маршрутизаций. Скажем так: некий связующий пункт группы компаний.
Тоннелей много и разных (спасибо любимому РосКомПозору).

Хочется написать скрипт, для быстрой диагностики остальными админами.
На входе был бы IP адрес для проверки.
Данный скрипт выдавал бы, на каких интерфейсах и в какие подсети маршрутизируется трафик.

Но дело в том, что в правилах Policy Based Routing и таблицах маршрутизаций, заданы подсети.

Например:
ip route show
default via *.*.80.1 dev eth0
10.8.1.0/24 dev awg0 scope link
10.8.2.0/24 dev tun0 scope link
10.66.66.0/24 dev awg1 scope link
10.66.67.0/24 dev wg0 scope link
...

Хотелось бы в bash скрипте понять, входит ли запрашиваемый IP в подсеть?

Самостоятельно пока ниасилил.

Подскажите.
IBM ThinkPad T60/ Intel Core  Duo T7200 2,00 GHz/ 4 Gb DDR2 SDRAM/ ATI Mobility Radeon X1400/ SSD Kingston 512 Gb/ DVD/CD-RW/ Wi-Fi, Bluetooth + Ubuntu Desktop 20.04

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7804
  • We were here
    • Просмотр профиля
#!/bin/bash

[ -z $1 ] && {
  echo "Usage: $0 ip/netmask ip"
  exit 1
  }

NET=$1
IP=$2

if nmap -sL -n $NET | grep -q $IP; then
    echo "$IP in range $NET"
  else
    echo "$IP NOT in range $NET"
fi
Нужен установленный nmap

Пользователь добавил сообщение 19 Марта 2025, 17:13:17:
для быстрой диагностики остальными админами.
Гг. Я на взгляд определяю адреса по маске. Хоть и сисадмином не являюсь.   :)
PS С маской /24 вообще всё просто - смотрите на три первых числа.
« Последнее редактирование: 19 Марта 2025, 17:57:31 от ALiEN »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Measurer

  • Автор темы
  • Участник
  • *
  • Сообщений: 101
  • Измеритель верёвочками
    • Просмотр профиля
Принцип скрипта пока не понял... завтра буду разбираться и доки читать...

Цитировать
Гг. Я на взгляд определяю адреса по маске. Хоть и сисадмином не являюсь.   :)
PS С маской /24 вообще всё просто - смотрите на три первых числа.

А вы думаете, я не понимаю принцип маски /24 ?

Смысл в том, что когда у вас под 50 строк не только с маской /24... то вычленять нужное глазами уже трудновато.
Я же тут  далеко не всю таблицу маршрутизации выложил.
Плюс, там ещё несколько таблиц на сервере. И далеко не все с маской /24

Вот и хочется автоматизации диагностики.
Ибо, каждая секунда денег стоит.
IBM ThinkPad T60/ Intel Core  Duo T7200 2,00 GHz/ 4 Gb DDR2 SDRAM/ ATI Mobility Radeon X1400/ SSD Kingston 512 Gb/ DVD/CD-RW/ Wi-Fi, Bluetooth + Ubuntu Desktop 20.04

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7804
  • We were here
    • Просмотр профиля
Смысл в том, что когда у вас под 50 строк не только с маской /24... то вычленять нужное глазами уже трудновато.
роутить 50 подсетей не то что трудновато, а бездумно и вообще незачем. Не стоит ли пересмотреть топологию сети?

Пользователь добавил сообщение 20 Марта 2025, 04:25:22:
нужное глазами уже трудновато.
Хосты:
/0 - вообще всё #2564 = 4294967296 хостов
/8 - только первое число 2563 = 16777216
/16 - два числа 2562 = 65536
/24 - три числа 2561 = 256
/32 - только один адрес 2560 = 1

промежуточные делим или умножаем на два - откуда удобнее вести счет

/24 - 256 хостов # 1*256
/25 - 128 #пополам
...
/30 - 4 хоста # 256/2/2/2/2/2/2 (24-25-26-27-28-29-30), или 1*2*2 (32-31-30).
/31 - 2
/32 - 1

-----
Идем к меньшей маске. Умножаем на 256.
/16 #два числа - 65536 хостов (10.0.0.0-10.0.255.255) # 256*256
/17 #пополам - 32768 хостов (10.0.0.0-10.0.127.255) - операция на третьем числе. 256*128
..
/23 # 10.0.0.0 - 10.0.1.255 # 256*2
/24 # 10.0.0.0 - 10.0.0.255 # а это выше разъяснил) #256*1

-----
Идем к меньшей маске. Умножаем на 256 еще раз.
/8 #три числа - 16777216 хостов (10.0.0.0-10.255.255.255) #256*256*256
/9 #делим на 2 - 8388608 хостов (10.0.0.0-10.127.255.255) - операция на втором числе. 256*256*128
..
/15 # 10.0.0.0-10.1.255.255 # 256*256*2
/16 # 10.0.0.0-10.0.255.255 # 256*256*1

---
Дальше так же
/0 # четыре числа (0.0.0.0-255.255.255.255) #256*256*256*256
/1 # 0.0.0.0-127.255.255.255 (ну или 128.0.0.0-255.255.255.255)
/2 # 0.0.0.0-63.255.255.255
..
/7 # 0.0.0.0-1.255.255.255
/8 # 0.0.0.0-0.255.255.255

Степени двойки выучите и все станет прозрачно =)
« Последнее редактирование: 20 Марта 2025, 05:43:09 от ALiEN »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Measurer

  • Автор темы
  • Участник
  • *
  • Сообщений: 101
  • Измеритель верёвочками
    • Просмотр профиля
роутить 50 подсетей не то что трудновато, а бездумно и вообще незачем. Не стоит ли пересмотреть топологию сети?
Т.е. точки из всех городов свезти в один офис? Боюсь, заказчик меня не поймёт.
IBM ThinkPad T60/ Intel Core  Duo T7200 2,00 GHz/ 4 Gb DDR2 SDRAM/ ATI Mobility Radeon X1400/ SSD Kingston 512 Gb/ DVD/CD-RW/ Wi-Fi, Bluetooth + Ubuntu Desktop 20.04

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7804
  • We were here
    • Просмотр профиля
если хотите, чтобы клиенты не видели друг-друга, достаточно запретить пересылку пакетов на интерфейсе, а не городить 100500 подсетей.
iptables -I FORWARD -i wg0 -o wg0 -j REJECT --reject-with icmp-adm-prohibited
Или 16 миллионов айпишнинков вам не хватает?
« Последнее редактирование: 20 Марта 2025, 23:46:12 от ALiEN »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн serg7777

  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Посмотри/покопай команду netmask

 

Страница сгенерирована за 0.038 секунд. Запросов: 25.