![]() |
|
Модераторы: feodorv |
![]()
|
|
| eXtremal7 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 ? |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
eXtremal7,
Маска как я понимаю 255.255.255.0 ? Т.е. первые три байта. Берем адрес, куда надо соединиться, получаем сеть по маске. В данном случае (192.168.2). Далее по маске (первые три байта) сравниваем с каждым локальным адресом. Если совпало, значит слать с него... Добавлено через 1 минуту и 9 секунд Нормально разжевал ? |
|||
|
||||
| eXtremal7 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.8.2009 Репутация: нет Всего: нет |
GrayCardinal
Я то хотел в общем случае решение найти.. с каким-нибудь внешним инетовским адресом получение сети по маске и сравнение не прокатит. Операционка то когда строит пакеты узнаёт нужный адрес, но стандартных интерфейсов получить его не предоставляет. |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
eXtremal7,
ОСЬ какая ? Добавлено @ 09:55 Ежели Линукс, может вывод /sbin/route распарсить ? Или вскрыть, посмотреть как работает... Добавлено через 9 минут и 28 секунд В общем в /proc/route всё лежит... Это сообщение отредактировал(а) GrayCardinal - 2.9.2009, 09:55 |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
PS
Во фре, кажись, тот же iproute.............. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
что мешает получить маски всех сетевых интерфейсов и сравнивать потом как предложил GrayCardinal?
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| eXtremal7 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.8.2009 Репутация: нет Всего: нет |
Нужна винда и линукс.
Простого решения нет, придётся смотреть исходники route, как время будет.. спасибо за наводку /proc/route - у меня вообще нет ни файла ни директории такой в системе.
Если есть внешний инетовский адрес, то как узнать через какой сетевой интерфейс из нескольких идут пакеты ? route то как раз показывает это. |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |