$@#Y@, огромное спасибо, ато всё перерыл, чот не получалось нифига[Ответ]
Dimbass 17:07 26.07.2007
$@#Y@, компонент ничо не скажешь очень хорош - ничего лишнего, но есть одна проблемка... Он показывает локальный IP, а мне бы хотелось узнать свой глобальный IP адрес тобиш тот, который на test.vsi.ru можно узнать(для домолинка).
[Ответ]
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.
[Ответ]
вы чо ребят=)) По-моему загоняетесь... Модем же мой, у меня под боком стоит, пароль канеш знаю...
Сообщение от :
скачать страничку с ресурса и пропарсить
Брр.. по-русски мона? Чот не понял... Почему через модем как-нить нельзя? Вы хотя бы скажите с помощью какова компонента делать?
[Ответ]
$@#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, спасибо, попробовал - действительно неплохой способ... Вот завтра ещё поковыряюсь - тогда отпишусь[Ответ]
Сообщение от :
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 (просто вырезал его оттуда).}
Сообщение от 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 может выдать совсем не то, что ожидается.
[Ответ]