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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать IP адрес своего компьютера ? ???? 
V
    Опции темы
ShadowDancer
Дата 25.1.2006, 11:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как узнать IP адрес своего компьютера ?
  Вверх
_hunter
Дата 25.1.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Spiker13
Дата 29.4.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 26.4.2006

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



Ну, а если на прямую без сылок, то:
Код

uses Winsock;

function HostToIP(Name: string; var Ip: string): Boolean; 
var
  wsdata : TWSAData; 
  hostName : array [0..255] of char; 
  hostEnt : PHostEnt; 
  addr : PChar; 
begin 
  WSAStartup ($0101, wsdata); 
  try 
    gethostname (hostName, sizeof (hostName)); 
    StrPCopy(hostName, Name); 
    hostEnt := gethostbyname (hostName); 
    if Assigned (hostEnt) then 
      if Assigned (hostEnt^.h_addr_list) then begin 
        addr := hostEnt^.h_addr_list^; 
        if Assigned (addr) then begin 
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]), 
          byte (addr [1]), byte (addr [2]), byte (addr [3])]); 
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
  finally
    WSACleanup;
  end
end;

Function ReadComputerName:string;
var
 i:DWORD;
 p:PChar;
begin
 i:=255;
 GetMem(p, i);
 GetComputerName(p, i);
 Result:=String(p);
 FreeMem(p);
end;

procedure TForm1.FormCreate(Sender: TObject);
var IP: string;
begin
if HostToIp(ReadComputerName, IP) then Label1.Caption := IP;
end;

 
PM MAIL   Вверх
vood
Дата 30.4.2006, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

uses WINSOCK;
...
function ip:string;
var 
 WSAData: TWSAData;
 p: PHostEnt; 
 Name: array[0..$FF] of Char; 
begin 
 WSAStartup($0101, WSAData); 
 GetHostName(name, $FF); 
 p := GetHostByName(Name); 
result:=inet_ntoa(PInAddr(p.h_addr_list^)^);
 WSACleanup; 
end;

 


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Flat
Дата 7.5.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.12.2003

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



проверил вариант вуда.... работает... но берет ип тока с сетевой карты.. а как быть с pppoe(которое я юзаю ) и vpn? 
PM MAIL   Вверх
Poseidon
Дата 7.5.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(Flat @  7.5.2006,  16:27 Найти цитируемый пост)
а как быть с pppoe(которое я юзаю ) и vpn?


Код
//...
interface

uses
  {...}, Winsock;

{Экспортируем функцию из WinSock 2 (WS2_32.DLL)}
function WSAIoctl(s: TSocket; cmd: DWORD; lpInBuffer: PCHAR; dwInBufferLen:
  DWORD;
  lpOutBuffer: PCHAR; dwOutBufferLen: DWORD;
  lpdwOutBytesReturned: LPDWORD;
  lpOverLapped: POINTER;
  lpOverLappedRoutine: POINTER): Integer; stdcall; external 'WS2_32.DLL';

{ Константы взятые из заголовка C файлов }
const SIO_GET_INTERFACE_LIST = $4004747F;

{ обьявляем необходимые нам типы }
type sockaddr_gen = packed record
    AddressIn: sockaddr_in;
    filler: packed array[0..7] of char;
  end;

type INTERFACE_INFO = packed record
    iiFlags: u_long; // Флаги интерфейса
    iiAddress: sockaddr_gen; // Адрес интерфейса
    iiBroadcastAddress: sockaddr_gen; // Broadcast адрес
    iiNetmask: sockaddr_gen; // Маска подсети
  end;

//...

implementation
{$R *.dfm}

function EnumInterfaces(var sInt: string): Boolean;
var s: TSocket;
  wsaD: WSADATA;
  NumInterfaces: Integer;
  BytesReturned: u_long;
  pAddrInet: SOCKADDR_IN;
  pAddrString: PCHAR;
  PtrA: pointer;
  Buffer: array[0..20] of INTERFACE_INFO;
  i: Integer;
begin  
  result := true;                                // Инициализируем переменную  
  sInt := '';  

  WSAStartup($0101, wsaD);                      // Запускаем WinSock  
                                                // Здесь можно дабавить различные обработчики ошибки :)  

  s := Socket(AF_INET, SOCK_STREAM, 0);          // Открываем сокет
  if (s = INVALID_SOCKET) then exit;  

  try                                            // Вызываем WSAIoCtl  
    PtrA := @bytesReturned;
    if (WSAIoCtl(s, SIO_GET_INTERFACE_LIST, nil, 0, @Buffer, 1024, PtrA, nil,
      nil)  
      <> SOCKET_ERROR)  
      then
    begin                                        // Если OK, то определяем количество существующих интерфейсов  

      NumInterfaces := BytesReturned div SizeOf(INTERFACE_INFO);  

      for i := 0 to NumInterfaces - 1 do        // Для каждого интерфейса
      begin  
        pAddrInet := Buffer[i].iiAddress.addressIn;            // IP адрес
        pAddrString := inet_ntoa(pAddrInet.sin_addr);
        sInt := sInt + pAddrString;  
        sInt := sInt + #13#10;
      end;
    end;
  except  
  end;  
//  
// Закрываем сокеты
//  
  CloseSocket(s);  
  WSACleanUp;  
  result := false;
end;  


Использование:

Код
var tmp: string;
begin
EnumInterfaces(tmp);
ShowMessage(tmp);
end;

  

Это сообщение отредактировал(а) Poseidon - 7.5.2006, 17:37


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
ReGeDiT
Дата 28.11.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Poseidon @ 7.5.2006,  18:36)
Цитата(Flat @  7.5.2006,  16:27 Найти цитируемый пост)
а как быть с pppoe(которое я юзаю ) и vpn?


Код
//...
interface

uses
  {...}, Winsock;

{Экспортируем функцию из WinSock 2 (WS2_32.DLL)}
function WSAIoctl(s: TSocket; cmd: DWORD; lpInBuffer: PCHAR; dwInBufferLen:
  DWORD;
  lpOutBuffer: PCHAR; dwOutBufferLen: DWORD;
  lpdwOutBytesReturned: LPDWORD;
  lpOverLapped: POINTER;
  lpOverLappedRoutine: POINTER): Integer; stdcall; external 'WS2_32.DLL';

{ Константы взятые из заголовка C файлов }
const SIO_GET_INTERFACE_LIST = $4004747F;

{ обьявляем необходимые нам типы }
type sockaddr_gen = packed record
    AddressIn: sockaddr_in;
    filler: packed array[0..7] of char;
  end;

type INTERFACE_INFO = packed record
    iiFlags: u_long; // Флаги интерфейса
    iiAddress: sockaddr_gen; // Адрес интерфейса
    iiBroadcastAddress: sockaddr_gen; // Broadcast адрес
    iiNetmask: sockaddr_gen; // Маска подсети
  end;

//...

implementation
{$R *.dfm}

function EnumInterfaces(var sInt: string): Boolean;
var s: TSocket;
  wsaD: WSADATA;
  NumInterfaces: Integer;
  BytesReturned: u_long;
  pAddrInet: SOCKADDR_IN;
  pAddrString: PCHAR;
  PtrA: pointer;
  Buffer: array[0..20] of INTERFACE_INFO;
  i: Integer;
begin  
  result := true;                                // Инициализируем переменную  
  sInt := '';  

  WSAStartup($0101, wsaD);                      // Запускаем WinSock  
                                                // Здесь можно дабавить различные обработчики ошибки :)  

  s := Socket(AF_INET, SOCK_STREAM, 0);          // Открываем сокет
  if (s = INVALID_SOCKET) then exit;  

  try                                            // Вызываем WSAIoCtl  
    PtrA := @bytesReturned;
    if (WSAIoCtl(s, SIO_GET_INTERFACE_LIST, nil, 0, @Buffer, 1024, PtrA, nil,
      nil)  
      <> SOCKET_ERROR)  
      then
    begin                                        // Если OK, то определяем количество существующих интерфейсов  

      NumInterfaces := BytesReturned div SizeOf(INTERFACE_INFO);  

      for i := 0 to NumInterfaces - 1 do        // Для каждого интерфейса
      begin  
        pAddrInet := Buffer[i].iiAddress.addressIn;            // IP адрес
        pAddrString := inet_ntoa(pAddrInet.sin_addr);
        sInt := sInt + pAddrString;  
        sInt := sInt + #13#10;
      end;
    end;
  except  
  end;  
//  
// Закрываем сокеты
//  
  CloseSocket(s);  
  WSACleanUp;  
  result := false;
end;  


Использование:

Код
var tmp: string;
begin
EnumInterfaces(tmp);
ShowMessage(tmp);
end;

спасибо! очень помогло! smile
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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