Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизКак узнать внешний ip адрес? Найти похожие ветки
← →
RoLeX (2006-10-24 16:43) [0]Мой комп находится в локальной сети и подключен к интернету. Т.е. он имеет 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;
← →
DVM © (2006-10-24 16:55) [1]
> Этот код выводит в Memo1 оба ip адреса, как узнать какой
> из них внешний:
Никак в общем случае. Потому как локалку можно построить и на реальных внешних IP адресах.
Ну а в частности, можно проверить не входит ли IP в один из диапазонов адресов, предназначенных для использования в локальных сетях.
Вот и все. Диапазоны известны.
← →
Anatoly Podgoretsky © (2006-10-24 17:03) [2]А если оба входят, а это нормальная ситуация, как и обратная, тогда что?
← →
RoLeX (2006-10-24 17:22) [3]
> Диапазоны известны.
Кроме 192.168,0,1-255 больше ничего не знаю. А какие ещё есть?
← →
Mike Kouzmine © (2006-10-24 17:28) [4]RoLeX (24.10.06 17:22) [3] А что мешает назначить другие адреса? Страшный бармалей?
← →
RoLeX (2006-10-24 17:34) [5]
> Mike Kouzmine © (24.10.06 17:28) [4]
> RoLeX (24.10.06 17:22) [3] А что мешает назначить другие
> адреса? Страшный бармалей?
Ну ладно если я себе назначу адрес из этого диапазона. А как я буду у других на компе назначать?
← →
Mike Kouzmine © (2006-10-24 17:50) [6]RoLeX (24.10.06 17:34) [5]
> Mike Kouzmine © (24.10.06 17:28) [4]
> RoLeX (24.10.06 17:22) [3] А что мешает назначить другие
> адреса? Страшный бармалей?
Ну ладно если я себе назначу адрес из этого диапазона. А как я буду у других на компе назначать?
Не понял.
← →
guav © (2006-10-24 17:55) [7]Забиндить сокет на адрес и пойти этим сокетом в инет, если получилось, значит адрес инетовский ?
← →
RoLeX (2006-10-24 18:12) [8]А примером можно? плиз...
← →
StriderMan © (2006-10-24 18:14) [9]
> Как узнать внешний ip адрес?
http://whatismyip.com/
← →
Dmitrij_K (2006-10-24 19:16) [10]yoip.ru
← →
RoLeX (2006-10-24 20:31) [11]Во, получилось!
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;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c