URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9222
[ Назад ]

Исходное сообщение
"Как определить IP по домену!?"

Отправлено Tozix , 17-Авг-11 17:50 
Помогите пожалуйста, гуглил но ничего подходящего не нашел.
Как определить IP по домену? А потом проверить принадлежит ли он к той или иной сети. Список сетей у меня есть.
По пингу ип определять не подходит. Вообще желательно максимально простое решение, что бы не пришлось пользоваться ни grep, ни sed, ни cut при получении IP. Т.к. мне нужно будет проверить более 4000 адресов на принадлежность к списку сетей.

Содержание

Сообщения в этом обсуждении
"Как определить IP по домену!?"
Отправлено allez , 17-Авг-11 18:37 
> Помогите пожалуйста, гуглил но ничего подходящего не нашел.
> Как определить IP по домену?

Например, утилитами host, nslookup, dig.

> А потом проверить принадлежит ли он к той или иной сети. Список сетей у меня есть.
> [...] Вообще желательно максимально простое решение, что
> бы не пришлось пользоваться ни grep, ни sed, ни cut при
> получении IP. Т.к. мне нужно будет проверить более 4000 адресов на
> принадлежность к списку сетей.

И как вы себе представляете поиск по списку без grep, sed или, скажем, awk?
"Узким местом" в вашей задаче являются вовсе не они, а сетевые утилиты, которые будут
ожидать ответ от серверов, находящихся в интернете.

К слову сказать, "более четырех тысяч адресов" - это, извините, тьфу и растереть. Около часа
работы даже не при самом быстром и отзывчивом канале.


"Как определить IP по домену!?"
Отправлено Tozix , 17-Авг-11 19:08 
Без заморочек именно само определение IP адреса, а сравнение на принадлежность к списку сетям уже выполнил с помощью AWK. Нарыл в интернете может кому полезно будет:
#!/bin/bash
IP=$1
MASK_FILENAME="ip_tasix" #файл со списком подсетей
while read line ; do
   ip=$(echo $line | awk -F '/' '{ print $1 }')
   mask_digit=$(echo $line | awk -F '/' '{ print $2 }' )
   mask_seg1=$(echo $ip | awk -F '.' '{ print $1 }' )
   mask_seg2=$(echo $ip | awk -F '.' '{ print $2 }' )
   mask_seg3=$(echo $ip | awk -F '.' '{ print $3 }' )
   mask_seg4=$(echo $ip | awk -F '.' '{ print $4 }' )

   ip_seg1=$(echo $IP | awk -F '.' '{ print $1 }' )
   ip_seg2=$(echo $IP | awk -F '.' '{ print $2 }' )
   ip_seg3=$(echo $IP | awk -F '.' '{ print $3 }' )
   ip_seg4=$(echo $IP | awk -F '.' '{ print $4 }' )

   mask_val=$(( ( ($mask_seg1 << 24) + ($mask_seg2 << 16) + ($mask_seg3 << 8) + $mask_seg4 ) & ~(((1 << (32-$mask_digit)) -1)) ))
   ip_val=$(( ( ($ip_seg1   << 24) + ($ip_seg2   << 16) + ($ip_seg3   << 8) + $ip_seg4   ) & ~(((1 << (32-$mask_digit)) -1)) ))
   if [ $mask_val -eq $ip_val ] ;then
      exit 0
   fi
done < $MASK_FILENAME
exit 1


Работает не шибко быстро, но лучше пока ничего нет.

Вот к сожалению на bash нет аналога PHP функции gethostbyname(); , пришлось делать костыли через ПЫХ. Работает конечно быстро, но хотелось найти подобное решение но без php.


"Как определить IP по домену!?"
Отправлено allez , 17-Авг-11 19:24 
> Вот к сожалению на bash нет аналога PHP функции gethostbyname();

А host, nslookup чем-то не устроили?
Ну и на всякий случай: man 3 gethostbyname. ;)


"Как определить IP по домену!?"
Отправлено Tozix , 17-Авг-11 20:46 
>> Вот к сожалению на bash нет аналога PHP функции gethostbyname();
> А host, nslookup чем-то не устроили?
> Ну и на всякий случай: man 3 gethostbyname. ;)

В это трудно поверить, но почему-то emerge на моём Gentoo отказывается искать данные пакеты, по этому и приходится изобретать велосипед )


"Как определить IP по домену!?"
Отправлено андрей , 18-Авг-11 00:41 
>>> Вот к сожалению на bash нет аналога PHP функции gethostbyname();
>> А host, nslookup чем-то не устроили?
>> Ну и на всякий случай: man 3 gethostbyname. ;)
> В это трудно поверить, но почему-то emerge на моём Gentoo отказывается искать
> данные пакеты, по этому и приходится изобретать велосипед )

данные программы принадлежать пакету net-dns/bind-tools

чтобы узнать кто кому принадлежит используйте

http://packages.gentoo.org/


"Как определить IP по домену!?"
Отправлено ImPressed , 18-Авг-11 11:36 
>>> Вот к сожалению на bash нет аналога PHP функции gethostbyname();
>> А host, nslookup чем-то не устроили?
>> Ну и на всякий случай: man 3 gethostbyname. ;)
> В это трудно поверить, но почему-то emerge на моём Gentoo отказывается искать
> данные пакеты, по этому и приходится изобретать велосипед )

открой для себя esearch, eix, equery


"Как определить IP по домену!?"
Отправлено Xaionaro , 18-Авг-11 12:21 
>[оверквотинг удален]
> $ip_seg4   ) & ~(((1 << (32-$mask_digit)) -1)) ))
>    if [ $mask_val -eq $ip_val ] ;then
>       exit 0
>    fi
> done < $MASK_FILENAME
> exit 1
> Работает не шибко быстро, но лучше пока ничего нет.
> Вот к сожалению на bash нет аналога PHP функции gethostbyname(); , пришлось
> делать костыли через ПЫХ. Работает конечно быстро, но хотелось найти подобное
> решение но без php.

Ну, возможно сильно тормозит из-за слишком большого кол-ва запусков awk. В bash есть такая клёвая переменная, как "IFS", советую попробовать разбить на октеты через неё:

xaionaro@imperium:~$ cat >t.sh
oldIFS="$IFS"
a='1.2.3.4'
IFS='.'
b=($a)
IFS="$oldIFS"

echo "${b[0]}-${b[1]}-${b[2]}-${b[3]}"

xaionaro@imperium:~$ chmod +x ./t.sh
xaionaro@imperium:~$ ./t.sh
1-2-3-4