Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> соответствие внешнего IP localhost'у, как узнать соответствует ли? 
:(
    Опции темы
BitCat
Дата 16.6.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Господа, ситуация:

нужно определить, соответствует ли внешний 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 (а ведь может еще с десяток адресов быть для этого интерфейса) - непонятно как вытащить.
Само собой, использовать вызов системных утилит нельзя. Нужно решить проблему на уровне исходного текста.

Если у кого есть какие идеи - интересно послушать... 
PM MAIL   Вверх
sharq
Дата 22.6.2006, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 3
Всего: 28



BitCat

Код

use strict;
use Data::Dumper;

# разбор ifconfig на ключ => значение
my $temp;
my $hash = {};
while (<DATA>) {
    if (/^(\w\w\d+): (.*)$/) { # название интерфейса может быть только в начале и состоять из 2х букв и 1 цифры (точно?)
        $temp = $1;
        $hash->{$1} = $2;
    } else {
        $hash->{$temp||'.'} .= $_; # в точке содрежится "мусор"
    }
}

# выделение ip адресов
my $find;
while (my ($k, $v) = each %$hash) {
    next if $k eq '.';
    push @{$find->{$k}}, $v =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/g;
}
print Dumper $find;

__END__
# 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


 smile   

Это сообщение отредактировал(а) sharq - 22.6.2006, 00:51


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
BitCat
Дата 22.6.2006, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



sharq, спасибо, но вызов (и парсинг) ifconfig - крайний вариант. 
PM MAIL   Вверх
sharq
Дата 22.6.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 3
Всего: 28



BitCat
Цитата(BitCat @  16.6.2006,  15:55 Найти цитируемый пост)
Нужно решить проблему на уровне исходного текста.

ну, а я что сделал? 


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
BitCat
Дата 22.6.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



sorry. "на уровне исходного текста" имелось в виду не вызов ifconfig и парсинг его ответа, а решить это с помощью системных ф-ий (типа ioctl с каким-нибудь хитрым параметром), к-рая возвращает спиок всех алиасов сетевого интерфейса. а то ф-ии IO::Interface возвращают только внутренний локальный IP и широковещательный - и все. а если сетевому интерфейсу сопоставлены алиасы, то хз как их выцепить. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0953 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.