Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.046 c
4-1150665129
Valerio
2006-06-19 01:12
2006.11.12
USB и Веб -камеры


15-1161706480
Dmytro
2006-10-24 20:14
2006.11.12
Проблема с кодировкой (MSSQL 2005 и PHP5)


15-1161924781
0x00
2006-10-27 08:53
2006.11.12
Массивы в msvc++


15-1161864240
Pavel__
2006-10-26 16:04
2006.11.12
Сообщение, посылаемое при закрытии приложения


8-1144338190
QuickFinder
2006-04-06 19:43
2006.11.12
TShockwaveFlash и его свойство Align





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский