Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизGetIfTable и текущее подключение к инету... Найти похожие ветки
← →
Chlavik © (2004-03-09 18:34) [0]Функция GetIfTable возвращает структуру полем которой является масив описания сетевых интерфейсов а как узнать который из них на данный момент используется юзером для того что бы юзать инет... Вообще то мне надо определить скорость подключения к инету ... Помогите please !!!
← →
Chlavik © (2004-03-09 18:34) [0]Функция GetIfTable возвращает структуру полем которой является масив описания сетевых интерфейсов а как узнать который из них на данный момент используется юзером для того что бы юзать инет... Вообще то мне надо определить скорость подключения к инету ... Помогите please !!!
← →
Verg © (2004-03-09 19:12) [1]Вопрос неоднозначный, но в большинстве случаев будет справедливо считать таким интерфейсом тот, через который проходит путь по-умолчани.
Т.о., тебе нобходимо получить таблице маршрутизации
GetIpForwardTable
Найти путь 0.0.0.0 с маской 0.0.0.0 и его dwForwardIfIndex укажет тебе этот интерфейс.
← →
Verg © (2004-03-09 19:12) [1]Вопрос неоднозначный, но в большинстве случаев будет справедливо считать таким интерфейсом тот, через который проходит путь по-умолчани.
Т.о., тебе нобходимо получить таблице маршрутизации
GetIpForwardTable
Найти путь 0.0.0.0 с маской 0.0.0.0 и его dwForwardIfIndex укажет тебе этот интерфейс.
← →
Chlavik © (2004-03-10 14:59) [2]Thanks! Но как её юзать перебрать все MIB_IPFORWARDROW в масиве и найти тот у которого (dwForwardDest or dwForwardMask) =0 ??? Я просто плохо знаю что такое "маршрутизации", etc ... Или мона както по своему Ip оперделить?
← →
Chlavik © (2004-03-10 14:59) [2]Thanks! Но как её юзать перебрать все MIB_IPFORWARDROW в масиве и найти тот у которого (dwForwardDest or dwForwardMask) =0 ??? Я просто плохо знаю что такое "маршрутизации", etc ... Или мона както по своему Ip оперделить?
← →
Chlavik © (2004-03-10 15:06) [3]Может будеть правельным через GetIpAddrTable получить с масива MIB_IPADDRROW тот интедкс который ссответвует Ip (localHost) ?
← →
Chlavik © (2004-03-10 15:06) [3]Может будеть правельным через GetIpAddrTable получить с масива MIB_IPADDRROW тот интедкс который ссответвует Ip (localHost) ?
← →
Verg © (2004-03-10 15:09) [4]
> Chlavik © (10.03.04 14:59) [2]
> Thanks! Но как её юзать перебрать все MIB_IPFORWARDROW
> в масиве и найти тот у которого (dwForwardDest or dwForwardMask)
> =0 ???
Да, именно так.
← →
Verg © (2004-03-10 15:09) [4]
> Chlavik © (10.03.04 14:59) [2]
> Thanks! Но как её юзать перебрать все MIB_IPFORWARDROW
> в масиве и найти тот у которого (dwForwardDest or dwForwardMask)
> =0 ???
Да, именно так.
← →
Verg © (2004-03-10 15:18) [5]
> Chlavik © (10.03.04 15:06) [3]
> Может будеть правельным через GetIpAddrTable получить с
> масива MIB_IPADDRROW тот интедкс который ссответвует Ip
> (localHost) ?
Нет, так не выйдет. localhost - это 127.0.0.1
IP адреса назначаются сетевым интерфейсам. Ннтерфейсов может быть несколько, а у них по несколько IP адресов.
Другой способ - это
GetBestInterface
Задаешь ему какой-нибудь ip адрес заведомо из инета, а он тебе прямо ifindex и вернет.
← →
Verg © (2004-03-10 15:18) [5]
> Chlavik © (10.03.04 15:06) [3]
> Может будеть правельным через GetIpAddrTable получить с
> масива MIB_IPADDRROW тот интедкс который ссответвует Ip
> (localHost) ?
Нет, так не выйдет. localhost - это 127.0.0.1
IP адреса назначаются сетевым интерфейсам. Ннтерфейсов может быть несколько, а у них по несколько IP адресов.
Другой способ - это
GetBestInterface
Задаешь ему какой-нибудь ip адрес заведомо из инета, а он тебе прямо ifindex и вернет.
← →
Chlavik © (2004-03-10 15:38) [6]
> Нет, так не выйдет. localhost - это 127.0.0.1
А кто сказал что он 127.0.0.1 ??? GetHostByName("LocalHost");
как раз и вернёт мне IP !!! а вот какойто раведомый Ip тожеж надо знать что бы юзать GetBestInterface.. Может ей свой дать оно будет пахать? Просто мне кажется это было бы быстрее всего - без всяких циклов .. ?
← →
Chlavik © (2004-03-10 15:38) [6]
> Нет, так не выйдет. localhost - это 127.0.0.1
А кто сказал что он 127.0.0.1 ??? GetHostByName("LocalHost");
как раз и вернёт мне IP !!! а вот какойто раведомый Ip тожеж надо знать что бы юзать GetBestInterface.. Может ей свой дать оно будет пахать? Просто мне кажется это было бы быстрее всего - без всяких циклов .. ?
← →
Chlavik © (2004-03-10 17:25) [7]GetBestInterFace(dword(Inet_Addr("LocalHost")),index) - работает . ТЕМА ЗАКРЫТА...
← →
Chlavik © (2004-03-10 17:25) [7]GetBestInterFace(dword(Inet_Addr("LocalHost")),index) - работает . ТЕМА ЗАКРЫТА...
← →
Verg © (2004-03-10 17:44) [8]
> Chlavik © (10.03.04 17:25) [7]
> GetBestInterFace(dword(Inet_Addr("LocalHost")),index) -
> работает . ТЕМА ЗАКРЫТА...
Это такой "сетевой орех" :)
Ты хоть знаешь что нужно подставлять в inet_addr и что она вернет, если подставить не то?
Она вернет FFFFFFFF.
Поздравляю! В результате приведенного кода ты получил BestOfTheBest интерфейс для broadcast ip адреса.
И если он единственный, то конечно же он и будет тем, через который идет обмен с внешним миром.
Задача выполнена :))) А главное - без циклов!
← →
Verg © (2004-03-10 17:44) [8]
> Chlavik © (10.03.04 17:25) [7]
> GetBestInterFace(dword(Inet_Addr("LocalHost")),index) -
> работает . ТЕМА ЗАКРЫТА...
Это такой "сетевой орех" :)
Ты хоть знаешь что нужно подставлять в inet_addr и что она вернет, если подставить не то?
Она вернет FFFFFFFF.
Поздравляю! В результате приведенного кода ты получил BestOfTheBest интерфейс для broadcast ip адреса.
И если он единственный, то конечно же он и будет тем, через который идет обмен с внешним миром.
Задача выполнена :))) А главное - без циклов!
← →
Verg © (2004-03-10 18:19) [9]var ifindex : DWORD;
mib_ifr : TMIB_IFROW;
if GetBestInterface( INADDR_ANY, ifindex ) = NO_ERROR then
begin
// ..... ifindex - индекс интерфейса через который доступен default gateway
FillChar(mib_ifr, sizeof(mib_ifr), 0);
mib_ifr.dwIndex := ifindex;
if GetIfEntry(mib_ifr) = NO_ERROR then
// Вот и все, собсно
← →
Verg © (2004-03-10 18:19) [9]var ifindex : DWORD;
mib_ifr : TMIB_IFROW;
if GetBestInterface( INADDR_ANY, ifindex ) = NO_ERROR then
begin
// ..... ifindex - индекс интерфейса через который доступен default gateway
FillChar(mib_ifr, sizeof(mib_ifr), 0);
mib_ifr.dwIndex := ifindex;
if GetIfEntry(mib_ifr) = NO_ERROR then
// Вот и все, собсно
← →
Chlavik © (2004-03-10 18:25) [10]Inet_Addr("LocalHost")) от "localHost" никогда не ошибётся ...
Так что что она может вернуть INADDR_NONE я и сам знаю... И тот самый BestOfTheBest даже лучше интерфейс я получаю спокойно. А если ты хочеш прикалыватся то щяс не прикольно...
> И если он единственный
pdwBestIfIndex
[out] Pointer to a DWORD variable - а не buffer так что индекс у нас один... Есть предложения ?
← →
Chlavik © (2004-03-10 18:25) [10]Inet_Addr("LocalHost")) от "localHost" никогда не ошибётся ...
Так что что она может вернуть INADDR_NONE я и сам знаю... И тот самый BestOfTheBest даже лучше интерфейс я получаю спокойно. А если ты хочеш прикалыватся то щяс не прикольно...
> И если он единственный
pdwBestIfIndex
[out] Pointer to a DWORD variable - а не buffer так что индекс у нас один... Есть предложения ?
← →
Chlavik © (2004-03-10 18:28) [11]А за INADDR_ANY Пасиба .. последнего сообщения еще не было когда я писал ответ ...
← →
Chlavik © (2004-03-10 18:28) [11]А за INADDR_ANY Пасиба .. последнего сообщения еще не было когда я писал ответ ...
← →
Verg © (2004-03-10 20:26) [12]
> Inet_Addr("LocalHost")) от "localHost" никогда не ошибётся
> ...
....и всегда выдаст INADDR_NONE
Есть предложение: иди почитай:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/inet_addr_2.aspParameters
cp
[in] Null-terminated character string representing a number expressed in the Internet standard "."" (dotted) notation.
Return Values
If no error occurs, inet_addr returns an unsigned long value containing a suitable binary representation of the Internet address given. If the string in the cp parameter does not contain a legitimate Internet address, for example if a portion of an "a.b.c.d" address exceeds 255, then inet_addr returns the value INADDR_NONE.
← →
Verg © (2004-03-10 20:26) [12]
> Inet_Addr("LocalHost")) от "localHost" никогда не ошибётся
> ...
....и всегда выдаст INADDR_NONE
Есть предложение: иди почитай:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/inet_addr_2.aspParameters
cp
[in] Null-terminated character string representing a number expressed in the Internet standard "."" (dotted) notation.
Return Values
If no error occurs, inet_addr returns an unsigned long value containing a suitable binary representation of the Internet address given. If the string in the cp parameter does not contain a legitimate Internet address, for example if a portion of an "a.b.c.d" address exceeds 255, then inet_addr returns the value INADDR_NONE.
← →
Chlavik © (2004-03-11 00:33) [13]А внатуре Sorry... Я просто спутал с GetHostByName ( что то в голове заклинило :) ) Так а прикол в том что при дебаге GetBestInterFace(dword(Inet_Addr("LocalHost")),index) в index был тот самый индекс который надо ... Получается что GetBestInterFace принимает и не верные Ip адреса...
← →
Chlavik © (2004-03-11 00:33) [13]А внатуре Sorry... Я просто спутал с GetHostByName ( что то в голове заклинило :) ) Так а прикол в том что при дебаге GetBestInterFace(dword(Inet_Addr("LocalHost")),index) в index был тот самый индекс который надо ... Получается что GetBestInterFace принимает и не верные Ip адреса...
← →
Verg © (2004-03-11 09:23) [14]
> Получается что GetBestInterFace принимает и не верные Ip
> адреса...
Почему ж неверные. Верные.
INADDR_NONE - это $FFFFFFFF, что соответствует виртуальному адресу броадкаста. В MSW этот адрес всегда пропсан в таблице маршрутизации на один из сетевых итф.
На какой из, если их несколько? - я сам до сих пор недоумеваю, но на какой-то один из... Из каких соображений выбирается именно такой-то итф., а не другой? Черт их знает...
Про броадкасты - это вообще отдельная "опера".
Кстати, ну так как с GetHostByName("localhost")?
Попробовал? :))
← →
Verg © (2004-03-11 09:23) [14]
> Получается что GetBestInterFace принимает и не верные Ip
> адреса...
Почему ж неверные. Верные.
INADDR_NONE - это $FFFFFFFF, что соответствует виртуальному адресу броадкаста. В MSW этот адрес всегда пропсан в таблице маршрутизации на один из сетевых итф.
На какой из, если их несколько? - я сам до сих пор недоумеваю, но на какой-то один из... Из каких соображений выбирается именно такой-то итф., а не другой? Черт их знает...
Про броадкасты - это вообще отдельная "опера".
Кстати, ну так как с GetHostByName("localhost")?
Попробовал? :))
← →
Chlavik © (2004-03-12 18:35) [15]ДА я заюзал GetBestInterface( INADDR_ANY, ifindex ) ноормально пашет ... Thank"s
← →
Chlavik © (2004-03-12 18:35) [15]ДА я заюзал GetBestInterface( INADDR_ANY, ifindex ) ноормально пашет ... Thank"s
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.036 c