Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Узнать свой IP

Страницы: 1
Узнать свой IP
Как можно узнать свой ip в дельфи?
Свой-то всегда 127.0.0.1 Или Вам нужен свой внешний/свой ip в локальной сети?
Про локалхост-то я знаю, интересует свой ип в локалке.
Тогда в командную строку отправить ipconfig и получить результат.
А вот и решение:
Код
uses
  WinSock;

function GetLocalIP: String;
const WSVer = $101;
var
  wsaDat a: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
begin
  Result := '';
  if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
end;
Вопрос - что выдаст эта функция, если в компьютере больше одной сетевой карты?
Я так понимаю, что вернет адрес первой? Да, тут, конечно, я прокололся.
UPD: порылся в интернете и нашел код. Позволяет получить список IP'ов:
Код
uses
 ..., WinSock;

procedure TForm1.Button1Click(Sender: TObject);
type
 InAddr = Array[0..10] of PInAddr;
 TInAddr = ^InAddr;
var
 Host: PHostEnt;
 pPtr: TInAddr;
 Buffer: Array[0..63] of char;
 i: Integer;
 Socket: TWSAData;
begin
  ListBox1.Clear;
  WSAStartup( $101, Socket );
  GetHostName( Buffer, SizeOf( Buffer ) );
  Host := GetHostByName( buffer );
  if Host = nil then Exit;
  pPtr := TInAddr( Host^.h_addr_list );
  i := 0;
  while pPtr^[i] <> nil do
  begin
     ListBox1.Items.Add( inet_ntoa( pPtr^[i]^ ) );
     Inc( i );
  end;
  WSACleanup;
end;

Изменено: rozpants - 22.06.2010 19:16:27
Цитата
rozpants пишет:
Да, тут, конечно, я прокололся.

Ну почему же вовсе не обязательно. Мне сам код нравится.

UPD: Второй вариант еще лучше.
А чем он плох можете пояснить?
Ничем, я не писал что он плох.
Зачем мучаться многострочными кодами, которые могут вернуть не тот IP?
Если нужно просто узнать свой IP, по которому можно из интернета выйти на ваш комп, то компонентом tIdHTTP нужно запросить страницу http://myip.yandex.ru и отпарсить ее от html-тегов.
Изменено: mihail filatov - 23.06.2010 12:16:15
Способ может быть и хороший, но вопрос был - как узнать ip в локалке, то есть без доступа в интернет.
Цитата
mihail filatov пишет:
Зачем мучаться многострочными кодами, которые могут вернуть не тот IP?

Если нужно просто узнать свой IP, по которому можно из интернета выйти на ваш комп, то компонентом tIdHTTP нужно запросить страницу http://myip.yandex.ru и отпарсить ее от html-тегов.

Такое решение, к сожалению, не подходит в данном случае - локальная сеть не подключена к интернету.
Ситуация невеселая: если даже самому компьютеру сложно узнать свой IP, то как другие смогут с ним связываться, чтобы послать данные именно ему?
Accende lumen sensibus, infude ainorem corbidus!
А вот эта прога прикольная получится.
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)