Большой Воронежский Форум
» Программирование>Delphi - узнать свой IP (WAN)
Dimbass 16:03 26.07.2007
Пишу на версии 7,0 и встал вопрос как узнать свой IP адрес(WAN). Очень прошу помочь [Ответ]
$@#Y@ 16:39 26.07.2007
Dimbass, компонент был такой...Только где я его брал - не помню...он не стандартный...сейчас посмотрю, может сохранился... [Ответ]
$@#Y@ 16:41 26.07.2007
Нашел. Разберешься сам.
Изображения
[Ответ]
Dimbass 16:57 26.07.2007
$@#Y@, огромное спасибо, ато всё перерыл, чот не получалось нифига [Ответ]
Dimbass 17:07 26.07.2007
$@#Y@, компонент ничо не скажешь очень хорош - ничего лишнего, но есть одна проблемка... Он показывает локальный IP, а мне бы хотелось узнать свой глобальный IP адрес тобиш тот, который на test.vsi.ru можно узнать(для домолинка). [Ответ]
$@#Y@ 17:12 26.07.2007
Dimbass, тогда я не знаю..не занимался... [Ответ]
Part!zan 19:02 26.07.2007
Dimbass, имхо, узнать можно только у модема (наверное) или на сервисах типа test.vsi.ru. Комп ничего не знает о том, что творится за его пределами. [Ответ]
Dimbass 19:10 26.07.2007
Part!zan, возможно можно как-то телнет запустить и снять с него? [Ответ]
Part!zan 19:11 26.07.2007
Dimbass, если знаешь пароль модема, то конечно. Имхо, проще скачать страничку с ресурса и пропарсить. Хотя, это будет трафик. [Ответ]
nevile 19:47 26.07.2007
тебе только обращяться в инет к странице с сервисом, а потом принимать данные и выводить их на форму или куда хош... а иначе не как тут сам принцип выдавания ip-адресов работает, комп не может знать какой ему ип дадут при следующем подключении [Ответ]
mikе 22:04 26.07.2007
пишешь скриптик, выкладывашь на сайт, стучишься к нему через HTTP (хотябы и через сокеты). вот тебе IP. [Ответ]
nevile 22:32 26.07.2007
теже яйца только в профиль [Ответ]
Dimbass 22:35 26.07.2007
вы чо ребят=)) По-моему загоняетесь... Модем же мой, у меня под боком стоит, пароль канеш знаю...

Сообщение от :
скачать страничку с ресурса и пропарсить

Брр.. по-русски мона? Чот не понял... Почему через модем как-нить нельзя? Вы хотя бы скажите с помощью какова компонента делать? [Ответ]
$@#Y@ 22:46 26.07.2007

Сообщение от Dimbass:
Почему через модем как-нить нельзя?

Потому что это будет сложнее...Нужны компоненты для работы с модемом.

У меня есть идея - но она очень некрасивая и кривая... [Ответ]
Part!zan 22:46 26.07.2007

Сообщение от nevile:
теже яйца только в профиль

да ты и сам ниче нового не сказал

Сообщение от Dimbass:
какова компонента делать

Вот они, дельфины... или дельфинисты... Все им компоненты...

Скачиваешь страничку с test.vsi.ru (не знаю, как это в делфи делается, но примеров наверняка туча), потом разбираешь полученный хтмл (как текст). Из модема получать IP будет гораздо загоннее и сложнее.
[Ответ]
$@#Y@ 22:49 26.07.2007

Сообщение от Part!zan:
Скачиваешь страничку с test.vsi.ru (не знаю, как это в делфи делается, но примеров наверняка туча), потом разбираешь полученный хтмл (как текст). Из модема получать IP будет гораздо загоннее и сложнее.

Самый легкий способ. Но имеет недостатки - он определит IP, если открыть страничку не из домолинка? [Ответ]
Dimbass 22:55 26.07.2007

Сообщение от :
Самый легкий способ. Но имеет недостатки - он определит IP, если открыть страничку не из домолинка?

Ну вообще-то хотелось сделать для домолинка... Но пока что подумаем над этим... [Ответ]
Part!zan 22:56 26.07.2007
$@#Y@, ща проверю... Будешь смеяться, но все нормально. IP только изменился. [Ответ]
Dimbass 00:21 27.07.2007
Part!zan,$@#Y@, nevile, спасибо, попробовал - действительно неплохой способ... Вот завтра ещё поковыряюсь - тогда отпишусь [Ответ]
nevile 08:32 27.07.2007
желательно с исходником )))) [Ответ]
Dimbass 20:42 31.07.2007

Сообщение от :
procedure TForm1.ButIPClick(Sender: TObject);
var stream:TMemoryStream;
s:string;
f:textfile;
i:integer;
begin
stream:=TMemoryStream.Create;
try
idHTTP1.BoundIP:=Tcpcli.LocalHost;
IdHTTp1.Get('http://yoip.ru',stream);
stream.savetofile('1.htm');
except
Showmessage('Убейся ацкий нуп!');
HALT(1);
end;
stream.Free;

assignfile(f,'1.htm');
reset(f);

for i:=1 to 58 do
readln(f,s);


readln(f, s);
i:=20;
delete(s,1,i);

i:=pos('</b>',s);
delete(s,i,20);

edIP.text:=S;
closefile(f);

Deletefile('1.htm');
end;

Мой код по совету скачать страничку и из неё вытащить.
PS с помощью этого кода можно узнать не только с Гомолинка, а с любого оператора.


PPS альтернативу этому коду предложил также DelphiWorld

Сообщение от :
function my_ip_address: longint;
const
bufsize = 255;
var
buf: pointer;
RemoteHost: PHostEnt; (* Не освобождайте это! *)
begin
buf := nil;
try
getmem(buf, bufsize);
winsock.gethostname(buf, bufsize); (* это может работать и без сети *)
RemoteHost := Winsock.GetHostByName(buf);
if RemoteHost = nil then
my_ip_address := winsock.htonl($07000001) (* 127.0.0.1 *)
else
my_ip_address := longint(pointer(RemoteHost^.h_addr_list^)^);
finally
if buf <> nil then
freemem(buf, bufsize);
end;
result := winsock.ntohl(result);
end;




{Вначале возвращается локальный сетевой адрес компьютера, а затем, если он не равен 127.0.0.1, стандартный IP адрес.

Единственное, что вам необходимо, это наличие winsock.dcu/winsock.pas, так как это не включается в поставку Delphi 1.; необходимый мне код я взял из tcpip component pack (просто вырезал его оттуда).}

[Ответ]
Part!zan 21:13 31.07.2007

Сообщение от Dimbass:
my_ip_address := longint(pointer(RemoteHost^.h_addr_list^)^);

Вот это не вполне корректно. Почитай описание структуры, которую возвращает gethostbyname. [Ответ]
Dimbass 21:30 31.07.2007
Part!zan, я ещё раз говорю - это то, что предложил DelphiWorld, я его не опробывал, а мой вариант работает.
PS единственно я делал как учили, тобиш через ассигны всякие, а потом на форуме прочитал, что правильнее это сделать через стримы, так что можете переделать, мне итак нормально [Ответ]
Part!zan 21:51 31.07.2007
Dimbass, я просто хочу указать, что вариант с DelphiWorld может выдать совсем не то, что ожидается. [Ответ]
Dimbass 21:53 31.07.2007
Part!zan, очень даже не спорю... [Ответ]
Вверх