Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить локальный IP 
:(
    Опции темы
eXtremal7
Дата 30.8.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача состоит в том, чтобы правильно определить локальный IP, который будет использоваться для соединения с удалённым хостом. На локальном компе может быть несколько интерфейсов. Например есть три локальные сети с диапазонами 192.168.1.x; 192.168.2.x и 192.168.3.x, предположим, что комп имеет в этих сетях адреса 192.168.1.1, 192.168.2.1 и 192.168.3.1. Если IP удалённого хоста будет, скажем, 192.168.2.33, для соединения с ним должен использоваться 192.168.2.1.

Обычный способ с gethostname, gethostbyname и получением IP из структуры hostent не подходит, как выбрать нужный адрес из нескольких ? Если вообще такая возможность определить нужный адрес без обмена пакетами с помощью стандартных функций POSIX ?
PM MAIL   Вверх
GrayCardinal
Дата 31.8.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



eXtremal7, 
Маска как я понимаю 255.255.255.0 ? Т.е. первые три байта. Берем адрес, куда надо соединиться, получаем сеть по маске. В данном случае (192.168.2). Далее по маске (первые три байта) сравниваем с каждым локальным адресом. Если совпало, значит слать с него...

Добавлено через 1 минуту и 9 секунд
Нормально разжевал ?  smile 


--------------------
PM MAIL WWW   Вверх
eXtremal7
Дата 1.9.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



GrayCardinal
Я то хотел в общем случае решение найти.. с каким-нибудь внешним инетовским адресом получение сети по маске и сравнение не прокатит. Операционка то когда строит пакеты узнаёт нужный адрес, но стандартных интерфейсов получить его не предоставляет.
PM MAIL   Вверх
GrayCardinal
Дата 2.9.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



eXtremal7, 
ОСЬ какая ?

Добавлено @ 09:55
Ежели Линукс, может вывод
/sbin/route 
распарсить ? Или вскрыть, посмотреть как работает...

Добавлено через 9 минут и 28 секунд
В общем в /proc/route всё лежит...

Это сообщение отредактировал(а) GrayCardinal - 2.9.2009, 09:55


--------------------
PM MAIL WWW   Вверх
GrayCardinal
Дата 2.9.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



PS
Во фре, кажись, тот же iproute..............


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 2.9.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



что мешает получить маски всех сетевых интерфейсов и сравнивать потом как предложил GrayCardinal?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
eXtremal7
Дата 3.9.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(GrayCardinal @  2.9.2009,  09:53 Найти цитируемый пост)
ОСЬ какая ?

Нужна винда и линукс.

Цитата(GrayCardinal @  2.9.2009,  09:53 Найти цитируемый пост)
/sbin/route 
распарсить ? Или вскрыть, посмотреть как работает...

Простого решения нет, придётся смотреть исходники route, как время будет.. спасибо за наводку
/proc/route - у меня вообще нет ни файла ни директории такой в системе.

Цитата(MAKCim @  2.9.2009,  11:34 Найти цитируемый пост)
что мешает получить маски всех сетевых интерфейсов и сравнивать потом как предложил GrayCardinal? 

Если есть внешний инетовский адрес, то как узнать через какой сетевой интерфейс из нескольких идут пакеты ? route то как раз показывает это.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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