The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как определить IP по домену!?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

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

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

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

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как определить IP по домену!?"  +/
Сообщение от Tozix (ok) on 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.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

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

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

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

http://packages.gentoo.org/

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Как определить IP по домену!?"  +/
Сообщение от Xaionaro (ok) on 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


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру