Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> свой ип, как узнать свой внешний ип? 
V
    Опции темы
SneG0K
  Дата 1.12.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



Привет всем! Я тут новенький, строго не судите! smile У меня вопрос: как в дельфи узнать свой внешний ip??? Искал нафоруме, но чет не получилось!  smile Если с примером, то чтоб ip заночился в переменную myip:string; Заранее спасибо! smile 
PM WWW Skype   Вверх
Sanchezzz
  Дата 1.12.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 1
Всего: 60



uses winsock
...

Код

function GetIPAndHostName(var HostName, IPaddr, WSAErr: string): Boolean;
type
  Name = array[0..100] of Char;
  PName = ^Name;
var
  HEnt: pHostEnt;
  HName: PName;
  WSAData: TWSAData;
  i: Integer;
begin
  Result := False;
  if WSAStartup($0101, WSAData) <> 0 then
  begin
    WSAErr := 'Winsock is not responding."';
    Exit;
  end;
  IPaddr := '';
  New(HName);
  if GetHostName(HName^, SizeOf(Name)) = 0 then
  begin
    HostName := StrPas(HName^);
    HEnt := GetHostByName(HName^);
    for i := 0 to HEnt^.h_length - 1 do
      IPaddr := Concat(IPaddr, IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.');
    SetLength(IPaddr, Length(IPaddr) - 1);
    Result := True;
  end
  else begin
    case WSAGetLastError of
      WSANOTINITIALISED: WSAErr := 'WSANotInitialised';
      WSAENETDOWN: WSAErr := 'WSAENetDown';
      WSAEINPROGRESS: WSAErr := 'WSAEInProgress';
    end;
  end;
  Dispose(HName);
  WSACleanup;
end;


пользоватся так
Код

var
 HostN,HostIP,Err : string;
begin
   if GetIPAndHostName(HostN, HostIP, Err) then
      MessageDlg('PC Host Name: '+HostN + #10+#13+'Your Internal IP: ' + HostIP, mtInformation, [mbOk], 0)
 else MessageDlg(Err, mtError, [mbOk], 0);
end;



работает еше как 20 минут назат проверял через прокси получил апи провайдера его лакалки...


Это сообщение отредактировал(а) Sanchezzz - 1.12.2007, 21:14


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
SneG0K
Дата 1.12.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



Все работает! Большое спасибо! smile 
PM WWW Skype   Вверх
Rohoss
Дата 2.12.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



А возможно ли узнать тот IP, с которого осуществляется доступ в Интернет, без соединение с другими хостами? 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
WaReZMEN
Дата 3.12.2007, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Мне показал IP который в сетки а хочется IP каторый в нете светится ...
PM MAIL ICQ   Вверх
Sanchezzz
Дата 8.12.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 1
Всего: 60



Код

uses WinSock;

function GetLocalIP: PChar; //локальнный IP
var
 Error     : DWORD;
 HostEntry : PHostEnt;
 Address   : In_Addr;
 Buffer    : array [0..63] of Char;
begin
GetHostName(Buffer, SizeOf(Buffer));
HostEntry := gethostbyname(Buffer);
Error := GetLastError;
if Error = 0 then
 begin
 Address := PInAddr(HostEntry^.h_addr_list^)^;
 Result  := inet_ntoa(Address);
 end
else
 Result := '';
end;

function GetExternalIP: PChar;//внешний IP
type
 TaPInAddr = array [0..10] of PInAddr;
 PaPInAddr = ^TaPInAddr;
var
 phe           : PHostEnt;
 p             : PaPInAddr;
 Buffer        : array [0..63] of Char;
begin
Result := nil;
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then
 Exit;
p := PaPInAddr(phe^.h_addr_list);//спики апи
if p^[1] <> nil then
 Result := inet_ntoa(p^[1]^);//если не получится то поиграется  тут со значениями
end;
//не знаю как это работает на проксе но без прокси работать должно тут со значениями поиграются можно если не то будет работать





--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.