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

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

Как определить IP'шник, "забитый" в свойствах TCP ... [D5, D6, Win95/98, WinXP]


WM.DIGGER ©   (2004-02-02 08:35:00) 

Уважаемые, возник вопрос. Есть локальная сетка, все компы объеденены в 1 рабочюю группу. На каждом компе в настроиках сетевого окружения -> свойствах TCP "жёстко забит" IP'шник. Проблема: прога, установленная на любой из компов этой сети должна определить IP этого компа. ИМЕННО тот, который забит в свойствах TCP протокола!
Ни одного работающего пример я так и не нашёл. Все примеры выдают локальный IP - 127.0.0.1 СРАЗУ ГОВОРЮ - ЭТО НЕ ТО!!!

Вот, написал я процедурку, которая отдаёт список всех IP на вашей машина (даже тех, которые присваеваются при подключении к нету по Dialup'у). (я её и раньше, здесь где-то писал, но ответа так и не получил!) Но вот определить, какой из них, именно тот, что нужен не получается!


procedure TForm1.Button1Click(Sender: TObject);
type wPInAddr = array[0..9] of PInAddr;
    twPInAddr = ^wPInAddr;
var WPHE:PHostEnt;
   WPTR:twPInAddr;
   CharBuf:array[0..63] of Char;
   IStep:Integer;
   GInitData:TWSAData;
   IPBuf:TStringList;
   wVersionRequested:Word;
begin
IPBuf := TStringList.Create;
wVersionRequested := MakeWord(2,0);
wsaStartUp(wVersionRequested,GInitData);
GetHostName(CharBuf,SizeOF(CharBuf));
WPHE := GetHostByName(CharBuf);
if WPHE = nil then Exit;
WPTR := twPInAddr(WPHE^.h_addr);
IStep := 0;
while WPTR^[IStep] <> nil do
 begin
  IPBuf.Append(inet_ntoa(WPTR^[IStep]^));
  inc(IStep);
 end;
wsaCleanUp;
Form1.Memo1.Lines := IPBuf;
IPBuf.Free;
end;


Помогите! Как же определить IP'шник забитый" в свойствах TCP ??? :((((


Verg   (2004-02-04 22:48:00) [1]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1075796204&n=4


Alex Konshin   (2004-02-04 21:49:00) [2]

В крынку не лезет! :)

PHostEnt не класс. Если бьешься над той же проблемой, то читай те же ответы.


Verg   (2004-02-04 14:48:00) [3]


> Petrovitch   (04.02.04 14:43) [14]
> Я тоже бьюсь над этой проблемой
> у меня не проходит класс - PHostEnt;
> Что я здесь не понимаю?


Куда не проходит?


Petrovitch   (2004-02-04 14:43:00) [4]

Я тоже бьюсь над этой проблемой
у меня не проходит класс - PHostEnt;
Что я здесь не понимаю?


Alex Konshin   (2004-02-03 08:12:00) [5]

Тебе дали ответ - читай про IPHlp API.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/ip_helper_start_page.asp
Любой адаптер может иметь много IP аресов (и не иметь ни одного).
Какой тебе нужен, тот и выбирай. Ты можешь выбрать нужный тебе интерфейс по тому, какой из них система считает наиболее подходящим для роутинга куда-нибудь (например, на сайт твоего провайдера), обычно это default интерфейс.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getbestinterface.asp

PS: И поменьше восклицаетельных знаков.


Verg   (2004-02-03 08:04:00) [6]


> Несколько IP говорит о том, что комп относится одновременно
> к разным сегментам сети, так?


Нет. Это означает, что комп принадлежит либо разным подсетям, либо имеет дополнительный IP адрес(а) в одной подсети, но как раз в одном сегменте (физическом) сети.


Verg   (2004-02-03 07:59:00) [7]


> Так что если у тебя есть идеи то поделись!


Хорошо, чем тебя не устраивает GetIPAddrTable?
Это совершенно стандартный способ получить список IP адресов хоста. Перечисли по пунктам свои претензии к этой ф-ции.


Wm.DIGGER   (2004-02-03 07:57:00) [8]

to Verg Кстати, вот возник ещё вопрос по ходу дела. Объясни, а зачем собственно для 1 сетевухи устанавливать несколько IP? Несколько IP говорит о том, что комп относится одновременно к разным сегментам сети, так? (если так, то зачем вешеть их на 1 сетевуху, это большая нагрузка и возможны "тормоза") ...


Wm.DIGGER   (2004-02-03 07:47:00) [9]

to Verg Я не понял чего ты злишься!? Какое хамство, ты о чем! У меня и в мыслях небыло ни чего подобного !!! Ну, согласен тебя 1 сетевуха, то и IP для неё 1это я конечно перегнул!:))) Но проблема между прочем "яйца выеденного" стоит! Ещё ни кто нормального решения не предложил. Так что если у тебя есть идеи то поделись!

to Andersen Пинговать то могут все, но мы пытаемся пропинговать себя! т.е. пинг мы посылаем, а затем "посылают нас" с нашим пингом :))) Вобщем как бы там нибыло это точно проверено на компе с ОС Windows Server 2003 ... С правами админа - всё OK, без них - Ошибка сокета 1003 (или 10003 не помню точно) ...


Andersen   (2004-02-02 16:16:00) [10]

> если вы не имеете прав администратора, то пропинговаться неполучиться

Это еще почему, что пинговать могут только админы что ли?


Verg   (2004-02-02 16:01:00) [11]


> Кстати, если у тебя 1 сетевуха, то и IP для неё 1! ...


Прежде чем хамить, ты бы внимательнее заглянул в "Свойства TCP/IP" сетевого адаптера, а там бы ткнул в кнопуечек "Дополнительно".
А с таким хамским отношением - тут уж лучше на самом деле "забить" на твою яйца выеденного не стоящую "проблему".


WM.DIGGER   (2004-02-02 15:55:00) [12]

to Verg Ты не внимательно читал ... тот который нужен- имелось ввиду тот который находится в свойствах TCP ... Кстати, если у тебя 1 сетевуха, то и IP для неё 1! ... Хост действительно может иметь много IP, но это не те IP, которые "забиты" в настройках TCP.
А зачем использовать GetIPAddrTable если эта функция отдаёт тоже самой, что и описанное мной!?

Вообще проблемы конечно есть, например если вы не имеете прав администратора, то пропинговаться неполучиться ... Да и если, как я писал, стоит несколько сетевух, тоже трабла возникает!

А кто-нибудь может предложить реальный код, а не "пустые" советы :))) , как определить IP компа ?!?!!?


WM.DIGGER   (2004-02-02 15:47:00) [13]

to Floppy В нете ты или не в нете, этот пинг отдаст тебе IP именно твоего компа, т.к. фактически этот пинг в "нет не выходит" ...


PiboDIE   (2004-02-02 15:06:00) [14]

Согласен с Verg, да и вообще почитайте на МСДН доки по библиотеке IPHlpApi. Там ОЧЕНЬ моного интересного.
А для использование этой библиотеки можно с Delphi-Jedi.org скачать IpHlpApi.zip. Это таблица импортируемых из IpHlpApi.dll функций, а так же описание требуемых классов. В общем дерзайте!


Verg   (2004-02-02 13:31:00) [15]


>  Но вот определить, какой из них, именно тот, что нужен> не получается!


Для начала неплохо бы определиться с критериями "нужности".

В конфигурации хоста может быть забит, как ты выражаешься, не один адрес, а множество.
Понимаешь, и все они по-своему "нужны" :).
Есть еще полезная ф-ция GetIPAddrTable, тоже выдает список адресов хоста и тоже "нужных" :))


Floppy   (2004-02-02 12:52:00) [16]

А если в момент пинга ты в инете, какой IP получишь?


Wm.DIGGER   (2004-02-02 11:14:00) [17]

Ответ найден!!! - нужно пропинговать самого себя!


GetHostName(CharBuf,SizeOF(CharBuf));
IdIcmpClient1.Host := CharBuf;
IdIcmpClient1.Ping;


на onReply получим

AReplyStatus.FromIpAddress; - это и есть тот самый IP'шник!


Но вот если на компе более 1 сетевой платы, вот тут ещё вопрос, что будет ! Если кто проверит, поделитесь опытом !


Наверх

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