LINUX.ORG.RU
ФорумAdmin

как скриптом узнать IP адрес зная hostname?


0

0

Всем привет.

Провайдер дает бесплатный доступ к некоторым ресурсам. Есть список таких ресурсов (200-300 хостов):
$ cat xalava.lst
...
hostX.ru
hostY.com
...
Этот список постоянно обновляется. Допустим я его сам буду обновлять ручками. Нужно написать скрипт, который из этого списка сделает список IP адресов. После чего прописать для этих хостов отдельный маршрут.

ВОПРОСЫ:

1. Какой командой можно узнать IP зная hostname?
2. Как в sh можно сделать что-то типа forfile или foreach (пробежаться по этому файлу)?
3. Не страшно ли, если в таблице маршрутизации будет много записей (200-300)?
4. Если для каждого хоста написать правило iptables-ом в таблицах nat и filter, это сильно нагрузит систему при работе?

ps: узнать IP можно конечно же командой ping, но не считаю это правильным решение, т.к. для того, что бы узнать IP по хосту достаточно только обратиться к DNS а не пинговать этот хост.

pps: решаем задачу, аналогичную этой: http://www.linux.org.ru/jump-message.jsp?msgid=1596678

ppps: сильнее всего интересуют вопросы 1, 3 и 4. 2 - если не трудно заодно ответить.

всем заранее спасибо.

★★

Re: как скриптом узнать IP адрес зная hostname?

Есть волшебная команда host

gibbon ()

Re: как скриптом узнать IP адрес зная hostname?

насчет маршрутизации страшного ничего не будет, у нас слабенькие машинки по 100 мегагерц тянут намано несколько клиентов и ip r больше 1000 запией. А так вообщем добавь все в таблицы и псмотри загрузку системы, так проще всего узнать.

Spank ()

Re: как скриптом узнать IP адрес зная hostname?

===
#!/bin/sh

NAME=$1

host $NAME | grep "has address" | awk '{ print $4 }'
===

Вернет ip

ManJak ★★★★★ ()

Re: как скриптом узнать IP адрес зная hostname?

2. cat file.txt | while read name; do
   for ip in `host -t a $name | grep ...`; do
      route add -host $ip ...
   done
done

spirit ★★★★★ ()

Re: как скриптом узнать IP адрес зная hostname?

route add -host hostX.ru gw ...
route add -host hostY.com gw ...
....


cat xalava.lst | xargs -i route add -host {} gw ....

sdio ★★★★★ ()

Re: как скриптом узнать IP адрес зная hostname?

сасиб огромное за скрипт. работает.

> насчет маршрутизации страшного ничего не будет, у нас слабенькие машинки по 100 мегагерц тянут намано несколько клиентов и ip r больше 1000 запией. А так вообщем добавь все в таблицы и псмотри загрузку системы, так проще всего узнать.

на счет маршрутизации, тоже думал, что особо не страшно будет. Машина, на которой вертеться все будет pI-150Mhz.

А вот самое интересное - это если для кажного IPа nat сделать? Тут сильно будет тормозить? Надо будет попробывать...

samson ★★ ()

Re: как скриптом узнать IP адрес зная hostname?

Еще можно попробовать использовать ipset (по идее NAT на все адреса одним правилом):
http://netfilter.org/projects/ipset/index.html
Возможно это будет работать еще быстрее.
(если будет тормозить маршрутизация - можно будет и ее делать одним правилом через iptables -j ROUTE или подключить -j MARK)

spirit ★★★★★ ()

Re: как скриптом узнать IP адрес зная hostname?

скрипты сделал, может и коряво, но работают:

$ cat hosts2ips
#!/bin/sh
echo -n > ips_all.lst
i=1
cat hosts.lst | while read name; do
  for ip in `host -t a $name | grep "has address" | awk '{ print $4 }'` ; do
    echo $ip >> ips_all.lst
    echo "$i: $ip $name "
    i=`expr $i + 1`
  done
done

##############

$ cat compare
#!/bin/sh

echo -n > ips.lst
i=1
for ip in `cat ips_all.lst`
do
  ok=1
  for ip1 in `cat ips.lst`
  do
    if [ $ip = $ip1 ];then
       ok=0
       echo "  DUP: i = $i"
       i=`expr $i + 1`
       break
    fi
  done
  if [ $ok = 1 ]; then
    echo $ip >> ips.lst
    echo "  OK: $ip"
  else
    echo "  COPY: $ip"
  fi
done
echo "$i duplicate IPs."

##############

hosts2ips - делает список IPов (ips_all.lst) из списка хостов (hosts.lst)
compare - выводит в ips.lst только разные IPы, без повторений

правила для NAT добавлял следующим образом:
for ip in `cat ./host2ip/ips.lst` ; do
  $IPTABLES -t nat -A POSTROUTING -s $SAMNET_SLAN_NET1 -d $ip -j SNAT --to-source $SAN_SLAN_IP
  echo "ADD: $ip"
done

пока вроде нормально работает.

Загрузка процессора: приблизительно 45 % (без этих правил была 50-55 %)
надо будет посмотреть, как под нагрузкой себя вести будет...

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 5
model           : 2
model name      : Pentium 75 - 200
stepping        : 12
cpu MHz         : 150.140
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : yes
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr mce cx8
bogomips        : 293.88

СИСТЕМА:
$  cat /etc/slackware-version
Slackware 10.1.0

$ uname -a
Linux sam-gw 2.6.10 #2 Thu Nov 24 18:45:50 MSK 2005 i586 unknown unknown GNU/Linux

samson ★★ ()

Re: как скриптом узнать IP адрес зная hostname?

про память забыл (всего 32Mb):
$ free
             total       used       free     shared    buffers     cached
Mem:         29060      27928       1132          0       3916      10404
-/+ buffers/cache:      13608      15452
Swap:        64504       3348      61156


> Еще можно попробовать использовать ipset (по идее NAT на все адреса одним правилом): 
> http://netfilter.org/projects/ipset/index.html 
> Возможно это будет работать еще быстрее. 
> (если будет тормозить маршрутизация - можно будет и ее делать одним правилом через iptables -j ROUTE или подключить -j MARK)

осталось толко с с netfilter разобраться, попробывать...

samson ★★ ()

Re: как скриптом узнать IP адрес зная hostname?

>$ cat compare
>#!/bin/sh
>
>echo -n > ips.lst
>i=1
>for ip in `cat ips_all.lst`
>do
>  ok=1
>  for ip1 in `cat ips.lst`
>  do
>    if [ $ip = $ip1 ];then
>       ok=0
>       echo "  DUP: i = $i"
>       i=`expr $i + 1`
>       break
>    fi
>  done
>  if [ $ok = 1 ]; then
>    echo $ip >> ips.lst
>    echo "  OK: $ip"
>  else
>    echo "  COPY: $ip"
>  fi
>done
>echo "$i duplicate IPs."
>
>compare - выводит в ips.lst только разные IPы, без повторений

-----------------------------------------------------------------

А может просто 
sort -u ips_all.lst > ips.lst

sdio ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.