![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Различие между локальным и инетовским IP [D5, D6, Win95/98, WinME, Win2k, WinXP]
Rouse_ © (2002-09-27 00:04:00)Здравствуйте уважаемые мастера, собственно сабж, знаю что тема обсуждалась, но не могу найти пост - вопрос как узнать что (например 192.168.24.1) - адрес из локальный сети а не используется для подключения к интернету
Заранее спасибо
Aralekin (2002-09-27 17:31:00) [21]Привет!...Я тоже столкнулся с этой проблеммой.
Тут в чем фишка...Функция GetLockalIP Действительно выдает правильный ИП, но тот который установлен в дефолтовой сетевой карте(то есть та, что имеет индекс 0).
А вот в компе с двумя карточками , причем первая - интернетовская, а вторая - локальная, под 95, 98 и Ме при определении функцией GetLockalIP последняя вернет адресс 192.168.24.1(т.е. интернетовский), равно как и комманда nbtstat -a [HostName].
Но если nbtstat запустить на такой же машине с двумя картами, но с системой W2000 или W-XP, то программа покажет две таблицы для двух карточек.
Делай вывод: Твоя (В чём я лично сомневаюсь) функция не то чтобы не правильная, нет. Она все правильно делает, и IP показывает и если добавишь вот такой код:
Current_Host:=P.h_name;
то и имя машины покажет. Но она берет информацию из той карты , которая имеет Default конфигурацию. А под 9x это - интернетовская карта-ВСЕГДА (глюк или баг как хочешь так и называй).
Поэтому лучше обрашаться к машине по HostName...но это зависит от поставленной задачи...
Wonder (2002-09-27 15:54:00) [22]Ну начнем с того, что и через локальную сеть можно выходить в инет :)
Так что вопрос, по существу, некорректен.
Можно узнать какой IP-адрес какому интерфейсу соответствует.
Rouse_ (2002-09-27 15:45:00) [23]Получаю следующим образом
function TForm1.GetLockalIP: String;
var WSAData : TWSAData;
p : PHostEnt;
Name : array [0..$FF] of Char;
begin
WSAStartup($0101, WSAData);
GetHostName(name, $FF);
p := GetHostByName(Name);
result := inet_ntoa(PInAddr(p.h_addr_list^)^);
WSACleanup;
end;
Заранее спасибо
Ghost. (2002-09-27 08:40:00) [24]Смотря откуда ты его берешь...