Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать свой IP в сетке а не в Инете.... [D5, Win95/98, Win2k]


TankMan ©   (2002-11-27 03:06:00) 

Я только вот начал разбираться с работой в сети, и у меня возник такой вопрос, как узнать свой IP? Я тут на этом сайте нашел 2 примера... они находят локальный IP, но локальных-то 2... один в моей сетке, а другой в инете. И когда я в инете оба примера, которые есть на сайте выдают мне инетовский IP, а мне нужен свой... объясните бедному ламеру, покажите на пальцах (примере).


Alex Konshin   (2002-12-04 05:02:00) [1]

Я уже ответил. Хотя что ты понимаешь под "ip в инете"?


pwlusa   (2002-12-04 04:46:00) [2]

Паралельный вопрос, как узнать ip в инете?


Alex Konshin   (2002-12-04 04:43:00) [3]

Тебе же объяснили, что в общем случае это не решается.
Можно, например, использовать роутинг: ты знаешь какой-то адрес в сети и запрашиваешь ip-адрес интерфейса через который идет роутинг на этот адрес. Это, пожалуй, единственный способ как-то отличить ip-адреса используя Winsock2.
Как ты будешь отличать интерфейсы, если сетевых карт несколько?
Одна сетевая карта может иметь несколько ip-адресов и даже интерфесов. Может, например, быть установлен какой-нибудь VPN, который будет выглядеть как сетевой адаптер и ip-адрес, например, назначен именно ему, а самой сетевой карте. Короче, если делаешь что-то для себя, то тогда ты можно делать какие-то преположения о конфигурации машины и, соответственно, можно понять что искать. Далее гляди в MSDN про iphlpapi.dll:
http://msdn.microsoft.com/library/en-us/iphlp/iphlp/about_ip_helper.asp
Но это, конечно, уже не Winsock.
А ты ведь даже не заикнулся о предполагаемой OS, чего ж от нас хочешь?


TankMan   (2002-12-03 01:07:00) [4]

Ответа так и нету... прекрассно...


TankMan   (2002-12-01 22:20:00) [5]

>>Alex Konshin
По поводу "зоны" - класса, я это знаю и этоже и имел ввиду...

>Вопрос, который имеет хоть какой-то смысл, будет звучать так:
>"Как узнать ip-адрес dialup интерфейса?" или
>"Как узнать ip-address сетевой карты?".

Мне нужен ip сетевой карты... вобщем и все...


Alex Konshin   (2002-11-30 08:17:00) [6]

IP-адрес имеет интерфейс, а не компьютер, то есть, если правильно задать вопрос, то и ответ очевиден. И один интерфейс может иметь несколько ip-адресов.
Вопрос, который имеет хоть какой-то смысл, будет звучать так:
"Как узнать ip-адрес dialup интерфейса?" или
"Как узнать ip-address сетевой карты?".

И какой все-таки адрес ты хочешь получить?
Тебе нужно самому понимать, чем отличаются интерфейсы машины, какой из них тебе нужен и, соответственно, брать нужный адрес.

Но, по-моему проще достать адрес интерфейса, через который
идет роутинг на какой-то другой адрес.
Например, если сокет уже создан, то можно использовать WSAIoctl с SIO_ADDRESS_LIST_QUERY или SIO_ROUTING_INTERFACE_QUERY.
Описание смотри в MSDN (msdn.microsoft.com)

По поводу "зоны": человек хотел сказать "класс ip-адреса" (если мне память не изменяет). Речь идет о старших 2 битах адреса. Тебе это не поможет, так как это никак не характеризует интерфейсы (с точки зрения локальный/внешний).


TankMan   (2002-11-29 20:49:00) [7]

Так причем тут зоны? Зоны у инетовского и локального ИП, могут быть одинаковыми....
Так что получается, что никак и не узнаешь чтоли?


Ocean   (2002-11-29 12:35:00) [8]

Нужно посмотреть на зону. У локалки может быть А, В или С, у каждой свой диапазон ip. На память не помню, см. зоны LAN в рамблере.
Ну, а если админ построил сеть на реальных ip, тут я умолкаю...


TankMan   (2002-11-27 23:24:00) [9]

>>kostya
Не глумись над человеком (на до мной) :)

>>Wonder
Ааа... а можно как нибудь узнать, какой из этих ИП - от локалки? (я то знаю, а прожка то как узнает? )


kostya   (2002-11-27 10:36:00) [10]

IdIPWatch1.LocalIP;
// На форму только компонент IdIPWatch1 кинь :-)


Wonder   (2002-11-27 10:21:00) [11]

var
WSAData : TWSAData;
p : PHostEnt;
Name : array [0..$FF] of Char;
begin
WSAStartup($0101, WSAData);
GetHostName(name, $FF);
p := GetHostByName(Name);
while (p.h_addr_list^ <> nil) do begin
memo1.Lines.Add(inet_ntoa(PInAddr(p.h_addr_list^)^));
inc(p.h_addr_list);
end;
WSACleanup;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо