powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / BASH проверить содержится ли текущий IP подсети (/N)
6 сообщений из 6, страница 1 из 1
BASH проверить содержится ли текущий IP подсети (/N)
    #39403716
linki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как проверить в BASH (без вызовов внешних скриптов) содержится ли текущий IP подсети /N:
IP: 8.8.8.8
Подсеть: 8.8.8.0/25
...
Рейтинг: 0 / 0
BASH проверить содержится ли текущий IP подсети (/N)
    #39404512
linki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решил вопрос сам, может кому пригодится.

#!/bin/bash

ipinnet(){
read NET WIDTH <<< `tr / ' ' <<< "$1"`
read IP1 IP2 IP3 IP4 <<< `tr . ' ' <<< "$NET"`
read sIP1 sIP2 sIP3 sIP4 <<< `tr . ' ' <<< "$2"`
MASK=$(( (0xffffffff << $((32 - WIDTH))) & 0xffffffff ))
sMINADDR=$(( ((sIP1 << 24) | (sIP2 << 16) | (sIP3 << 8) | sIP4) ))
MINADDR=$(( ((IP1 << 24) | (IP2 << 16) | (IP3 << 8) | IP4) & MASK ))
MAXADDR=$(( MINADDR | (0xffffffff ^ MASK) ))
return $(( ( ${sMINADDR} | (0xffffffff ^ MASK)) == ${MAXADDR} ))
}


ipinnet "10.0.0.252/20" "10.0.0.25"
echo $?

# 1 - IP in subnet
# 0 - no
...
Рейтинг: 0 / 0
BASH проверить содержится ли текущий IP подсети (/N)
    #39404547
shscrip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если версия баша поддерживает массивы, то быстрее будет так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function ipinnet() {
  local nw=$1
  local ip=$2
  local net=${nw%%/*}
  local len=${nw##*/}
  local mask=$(( 0x100000000 - (1<<(32-$len)) ))
  local a=(${ip//./ })
  local ii=$(( (${a[0]}<<24)|(${a[1]}<<16)|(${a[2]}<<8)|${a[3]} ))
  local a=(${net//./ })
  local ni=$(( (${a[0]}<<24)|(${a[1]}<<16)|(${a[2]}<<8)|${a[3]} ))
  return $(( ($ii&$mask) == ($ni&$mask) ))
}
...
Рейтинг: 0 / 0
BASH проверить содержится ли текущий IP подсети (/N)
    #39404710
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на всякий случай версия без баша , может кому пригодится .
...
Рейтинг: 0 / 0
BASH проверить содержится ли текущий IP подсети (/N)
    #39404836
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
74-я причина учить питон. Я последнее время пишу скрипты на смеси баша с питоном - намного удобнее.
...
Рейтинг: 0 / 0
BASH проверить содержится ли текущий IP подсети (/N)
    #39404998
linki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shscripЕсли версия баша поддерживает массивы, то быстрее будет так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function ipinnet() {
  local nw=$1
  local ip=$2
  local net=${nw%%/*}
  local len=${nw##*/}
  local mask=$(( 0x100000000 - (1<<(32-$len)) ))
  local a=(${ip//./ })
  local ii=$(( (${a[0]}<<24)|(${a[1]}<<16)|(${a[2]}<<8)|${a[3]} ))
  local a=(${net//./ })
  local ni=$(( (${a[0]}<<24)|(${a[1]}<<16)|(${a[2]}<<8)|${a[3]} ))
  return $(( ($ii&$mask) == ($ni&$mask) ))
}


Реально быстро. Эта версия в 60 раз быстрее моей.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / BASH проверить содержится ли текущий IP подсети (/N)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]