Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Системное программирование > соответствие внешнего IP localhost'у |
Автор: BitCat 16.6.2006, 14:55 |
Господа, ситуация: нужно определить, соответствует ли внешний IP (н-р, 217.216.214.213) localhost'у, т.е. 127.0.0.1. проблема решается легко с помощью определения всех сетевых интерфейсов в системе и всех соответствующих для каждого интерфейса IP адресов. но вот с последним проблемы... в системе присутствует N-ное кол-во сетевых интерфейсов: # ifconfig: em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=b<RXCSUM,TXCSUM,VLAN_MTU> inet 192.168.6.82 netmask 0xfffffff8 broadcast 192.168.6.87 inet6 fe80::20e:cff:fe4a:53f2%em0 prefixlen 64 scopeid 0x1 inet 217.216.214.213 netmask 0xffffffff broadcast 217.216.214.213 ether 00:0e:0c:4a:53:f2 media: Ethernet autoselect (100baseTX <full-duplex>) status: active em1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 options=b<RXCSUM,TXCSUM,VLAN_MTU> ether 00:0e:0c:4a:53:f1 media: Ethernet autoselect status: no carrier lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 ................... для каждого интерфейса нужно определить ВСЕ соответствующие ему IP адреса, т.е. для em0 - 217.216.214.213, 192.168.6.82, 192.168.6.87. Адреса 192.168.6.82, 192.168.6.87 (выделены синим) - определяются без проблем с помощью модуля IO::Interface, но вот 217.216.214.213 (а ведь может еще с десяток адресов быть для этого интерфейса) - непонятно как вытащить. Само собой, использовать вызов системных утилит нельзя. Нужно решить проблему на уровне исходного текста. Если у кого есть какие идеи - интересно послушать... |
Автор: sharq 22.6.2006, 00:50 | ||
BitCat,
![]() |
Автор: BitCat 22.6.2006, 08:44 |
sharq, спасибо, но вызов (и парсинг) ifconfig - крайний вариант. |
Автор: sharq 22.6.2006, 10:52 |
BitCat, ну, а я что сделал? |
Автор: BitCat 22.6.2006, 12:26 |
sorry. "на уровне исходного текста" имелось в виду не вызов ifconfig и парсинг его ответа, а решить это с помощью системных ф-ий (типа ioctl с каким-нибудь хитрым параметром), к-рая возвращает спиок всех алиасов сетевого интерфейса. а то ф-ии IO::Interface возвращают только внутренний локальный IP и широковещательный - и все. а если сетевому интерфейсу сопоставлены алиасы, то хз как их выцепить. |