Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.asp

Parameters
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.asp

Parameters
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.038 c
3-1081771900
Lamer2
2004-04-12 16:11
2004.05.09
Запрос


6-1079677681
gosha
2004-03-19 09:28
2004.05.09
Обмен между базами


6-1079354227
aser
2004-03-15 15:37
2004.05.09
почта с Mail.ru - как ее получять/отправить по http по 80 порту


11-1047593688
Boguslaw
2003-03-14 01:14
2004.05.09
Bugs in KOL


4-1079353821
StAL
2004-03-15 15:30
2004.05.09
Парадокс при перехвате API





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский