![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить 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 сетевой платы, вот тут ещё вопрос, что будет ! Если кто проверит, поделитесь опытом !