![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать внешний ip адрес? [D7, WinXP]
RoLeX © (2006-10-24 16:43:00)Мой комп находится в локальной сети и подключен к интернету. Т.е. он имеет 2 ip адреса: 1 в локалке другой - инетовский (внешний). Как определить внешний ip адрес?
Этот код выводит в Memo1 оба ip адреса, как узнать какой из них внешний:
procedure TForm1.Button1Click(Sender: TObject);
var
WSAData: TWSAData;
P: PHostEnt;
Name: array [0..$FF] of Char;
begin
WSAStartup($0101, WSAData);
try
GetHostName(name, $FF);
P := GetHostByName(Name);
while Assigned(P.h_addr_list^) do
begin
Memo1.Lines.Add(inet_ntoa(PInAddr(P.h_addr_list^)^));
Inc(P.h_addr_list);
end;
finally
WSACleanup;
end;
end;
RoLeX (2006-10-24 20:31:00) [1]Во, получилось!
function GetIP: string;
var
hSession: HINTERNET;
hService: HINTERNET;
lpBuffer: array[0..1024 + 1] of Char;
dwBytesRead: DWORD;
tlist:TStrings;
i,j:integer;
begin
tlist:=TStringList.Create; tlist.Clear;
hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hSession) then
begin
hService := InternetOpenUrl(hSession, PChar(' http://checkip.dyndns.org'), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(hService) then
try
while True do
begin
dwBytesRead := 1024;
InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
if dwBytesRead = 0 then break;
lpBuffer[dwBytesRead] := #0;
tlist.Add(lpBuffer);
end;
finally
InternetCloseHandle(hService);
end;
end;
finally
InternetCloseHandle(hSession);
end;
for i:=1 to length(tlist[0]) do if copy(tlist[0],i,20)='Current IP Address: ' then
for j:=i+20 to length(tlist[0]) do if tlist[0][j]<>'<' then result:=result+tlist[0][j] else break;
end;
Dmitrij_K (2006-10-24 19:16:00) [2]yoip.ru
StriderMan (2006-10-24 18:14:00) [3]
> Как узнать внешний ip адрес?
http://whatismyip.com/
RoLeX (2006-10-24 18:12:00) [4]А примером можно? плиз...
guav (2006-10-24 17:55:00) [5]Забиндить сокет на адрес и пойти этим сокетом в инет, если получилось, значит адрес инетовский ?
Mike Kouzmine (2006-10-24 17:50:00) [6]RoLeX (24.10.06 17:34) [5]
> Mike Kouzmine © (24.10.06 17:28) [4]
> RoLeX (24.10.06 17:22) [3] А что мешает назначить другие
> адреса? Страшный бармалей?
Ну ладно если я себе назначу адрес из этого диапазона. А как я буду у других на компе назначать?
Не понял.
RoLeX (2006-10-24 17:34:00) [7]
> Mike Kouzmine © (24.10.06 17:28) [4]
> RoLeX (24.10.06 17:22) [3] А что мешает назначить другие
> адреса? Страшный бармалей?
Ну ладно если я себе назначу адрес из этого диапазона. А как я буду у других на компе назначать?
Mike Kouzmine (2006-10-24 17:28:00) [8]RoLeX (24.10.06 17:22) [3] А что мешает назначить другие адреса? Страшный бармалей?
RoLeX (2006-10-24 17:22:00) [9]
> Диапазоны известны.
Кроме 192.168,0,1-255 больше ничего не знаю. А какие ещё есть?
Anatoly Podgoretsky (2006-10-24 17:03:00) [10]А если оба входят, а это нормальная ситуация, как и обратная, тогда что?
DVM (2006-10-24 16:55:00) [11]
> Этот код выводит в Memo1 оба ip адреса, как узнать какой
> из них внешний:
Никак в общем случае. Потому как локалку можно построить и на реальных внешних IP адресах.
Ну а в частности, можно проверить не входит ли IP в один из диапазонов адресов, предназначенных для использования в локальных сетях.
Вот и все. Диапазоны известны.