Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Как определить IP шник, "забитый" в свойствах TCP ...   Найти похожие ветки 

 
WM.DIGGER ©   (2004-02-02 08:35) [0]

Уважаемые, возник вопрос. Есть локальная сетка, все компы объеденены в 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 ??? :((((


 
Wm.DIGGER ©   (2004-02-02 11:14) [1]

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


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


на onReply получим

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


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


 
Floppy   (2004-02-02 12:52) [2]

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


 
Verg ©   (2004-02-02 13:31) [3]


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


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

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


 
PiboDIE ©   (2004-02-02 15:06) [4]

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


 
WM.DIGGER ©   (2004-02-02 15:47) [5]

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


 
WM.DIGGER ©   (2004-02-02 15:55) [6]

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

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

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


 
Verg ©   (2004-02-02 16:01) [7]


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


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


 
Andersen ©   (2004-02-02 16:16) [8]

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

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


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

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

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


 
Wm.DIGGER ©   (2004-02-03 07:57) [10]

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


 
Verg ©   (2004-02-03 07:59) [11]


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


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


 
Verg ©   (2004-02-03 08:04) [12]


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


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


 
Alex Konshin ©   (2004-02-03 08:12) [13]

Тебе дали ответ - читай про 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: И поменьше восклицаетельных знаков.


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

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


 
Verg ©   (2004-02-04 14:48) [15]


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


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


 
Alex Konshin ©   (2004-02-04 21:49) [16]

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

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


 
Verg ©   (2004-02-04 22:48) [17]

http://delphimaster.net/view/6-1075796204/



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.054 c
1-1082434287
-Maximus-
2004-04-20 08:11
2004.04.11
ScrollBox


3-1081539621
Mishenka
2004-04-09 23:40
2004.04.11
Как удалить поле из таблицы?


1-1082450472
inc.
2004-04-20 12:41
2004.04.11
поделить на 1000?


9-1064965146
Анатолий
2003-10-01 03:39
2004.04.11
Поле игры


8-1071742003
VasRog
2003-12-18 13:06
2004.04.11
CopyRect и фон