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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать локальніе IP адреса, каким способом 
V
    Опции темы
Andreyzpr
Дата 10.10.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Проблема такая:
Мне нужно узнать IP адреса все, которые находятся на компьютере. Очень желательно было бы, чтобы находило только адреса, принадлежащие сетевой карте подключенной к сети, а не показывало адреса, например модема!
Как узнать ВСЕ адреса у компьютера?
PM MAIL WWW ICQ   Вверх
zhefran
Дата 10.10.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

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



узнать локальный адресс можна так: 
1. Кидаешь на форму с indy misc TIdIPWatch
2.  В коде пишеш, например Edit1.Text:= IdIPWatch1.LocalIP;


Это сообщение отредактировал(а) zhefran - 10.10.2007, 17:58
--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
Andreyzpr
Дата 10.10.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(zhefran @ 10.10.2007,  17:54)
узнать локальный адресс можна так: 
1. Кидаешь на форму с indy misc TIdIPWatch
2.  В коде пишеш, например Edit1.Text:= IdIPWatch1.LocalIP;

А если их три?
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 10.10.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код


function GetLocalHostAddress: string;
var
  SockAddrIn: TSockAddrIn;
  HostEnt: PHostEnt;
  szHostName: array[0..128] of char;
begin
  if gethostname(szHostName, 128) = 0 then
    begin
      HostEnt:= gethostbyname(szHostName);
      if HostEnt = nil then
        Result:= ''
      else
        begin
          SockAddrIn.sin_addr.S_addr:= longint(plongint(HostEnt^.h_addr_list^)^);
          Result:= inet_ntoa(SockAddrIn.sin_addr);
        end;
    end
  else
    { Error handle } ;
end;

+
http://www.sources.ru/delphi/delphi_get_ip...nterfaces.shtml


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Andreyzpr
Дата 10.10.2007, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Romikgy чтото я не совсем понял как использовать твою функицю....
Каким способом мне, например в мемо, вывести все результаты?
PM MAIL WWW ICQ   Вверх
Snowy
Дата 11.10.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



PM MAIL   Вверх
Andreyzpr
Дата 11.10.2007, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Snowy @ 11.10.2007,  16:02)
http://www.delphilab.ru/content/view/77/73/

Ну в этой программе только один адрес определяет! А у меня например три локальных сети - стоит три сетевухи!
Мне нужно чтобы все три определяло... 
PM MAIL WWW ICQ   Вверх
Snowy
Дата 11.10.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Эта программа определяет все сетевые интерфейсы.
Если не определила, значит их нет.
PM MAIL   Вверх
Rennigth
Дата 11.10.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Andreyzpr
примерно так:
Код

unit Unit16;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, WinSock, ScktComp,
  Registry, WinInet;

const
  MAX_ADAPTER_NAME_LENGTH = 256;
  MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
  MAX_ADAPTER_ADDRESS_LENGTH = 8;

type

  PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING;
  IP_ADDRESS_STRING = array[0..15] of char;

  PIP_ADDR_STRING = ^IP_ADDR_STRING;
  IP_ADDR_STRING = record
    Next: PIP_ADDR_STRING;
    IpAddress: IP_ADDRESS_STRING;
    IpMask: IP_ADDRESS_STRING;
    Context: DWORD;
  end;

  PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
  IP_ADAPTER_INFO = record
    Next: PIP_ADAPTER_INFO;
    ComboIndex: DWORD;
    AdapterName: array[1..MAX_ADAPTER_NAME_LENGTH + 4] of Char;
    Description: array[1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4] of Char;
    AddressLength: UINT;
    Address: array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte;
    Index: DWORD;
    aType: UINT;
    DHCPEnabled: UINT;
    CurrentIPAddress: PIP_ADDR_STRING;
    IPAddressList: IP_ADDR_STRING;
    GatewayList: IP_ADDR_STRING;
    DHCPServer: IP_ADDR_STRING;
    HaveWINS: BOOL;
    PrimaryWINSServer: IP_ADDR_STRING;
    SecondaryWINSServer: IP_ADDR_STRING;
    LeaseObtained: LongInt;
    LeaseExpires: LongInt;
    SpareStuff: array [1..200] of char;
  end;

  PIPAdderessStruct = ^TIPAdderessStruct;
  TIPAdderessStruct = record
    IPAddress: string;
    IpMask: string;
    Context: DWord;
  end;

  PIPAdderessStructList = ^TIPAdderessStructList;
  TIPAdderessStructList = array of TIPAdderessStruct;

  TAdaptersStruct = record
    ComboIndex: DWord;
    AdapterName: string;
    Description: string;
    AddressLength: LongWord;
    Address: array of Byte;
    Index: DWord;
    aType: LongWord;
    DHCPEnabled: Cardinal;
    CurrentIPAddress: string;
    IPAddressList: TIPAdderessStructList;
    GatewayList: TIPAdderessStructList;
    DHCPServer: TIPAdderessStructList;
    HaveWINS: Boolean;
    PrimaryWINSServer: TIPAdderessStructList;
    SecondaryWINSServer: TIPAdderessStructList;
    LeaseObtained: LongInt;
    LeaseExpires: LongInt;
    SpareStuff: string;
  end;

  TAdaptersStructList = array of TAdaptersStruct;


  TForm16 = class(TForm)
    ListBox1: TListBox;
  protected
  public
    constructor Create(AOwner: TComponent); override;
  end;

var
  Form16: TForm16;

implementation

{$R *.dfm}

function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; pOutBufLen: PULONG): DWORD; stdcall;
  external 'Iphlpapi.dll' name 'GetAdaptersInfo';

function NetApiBufferFree(pBuf: pByte): DWORD; stdcall;
  external 'Netapi32.dll' name 'NetApiBufferFree';


function GetIPAddrStringList(
  APIPAddrString: PIP_ADDR_STRING): TIPAdderessStructList;
var
  lPAddrSt: PIP_ADDR_STRING;
  lIndex: Integer;
begin
  Result := nil;
  lIndex := 0;
  if Assigned(APIPAddrString) then
  begin
    lPAddrSt := GetMemory(SizeOf(IP_ADDR_STRING));
    try
      lPAddrSt := APIPAddrString;
      repeat
        SetLength(Result, lIndex + 1);
        Result[lIndex].IPAddress := PChar(StrPas(@lPAddrSt^.IpAddress));
        Result[lIndex].IpMask := PChar(StrPas(@lPAddrSt^.IpMask));
        Result[lIndex].Context := lPAddrSt^.Context;
        lPAddrSt := lPAddrSt^.Next;
        Inc(lIndex);
      until lPAddrSt = nil;
    finally
      FreeMemory(lPAddrSt);
    end;
  end;
end;

function GetAdapterList: TAdaptersStructList;
var
  lOutBufLen: ULONG;
  lPAdapterInfo, lPNext: PIP_ADAPTER_INFO;
  lRes: DWORD;
  lCount: Integer;
  lIndex: Integer;
begin
  Result := nil;
  lCount := 1;
  lIndex := 0;

  repeat
    lRes := GetAdaptersInfo(nil, @lOutBufLen);
    lOutBufLen := SizeOf(IP_ADAPTER_INFO) * lCount;
    Inc(lCount);
  until (lRes = 0) or (lCount = 20);

  lPAdapterInfo := GetMemory(lOutBufLen);
  try
    ZeroMemory(lPAdapterInfo, lOutBufLen);
    GetAdaptersInfo(lPAdapterInfo, @lOutBufLen);

    lPNext := lPAdapterInfo;
    repeat
      SetLength(Result, lIndex + 1);
      Result[lIndex].ComboIndex := lPNext^.ComboIndex;
      Result[lIndex].AdapterName := PChar(Trim(StrPas(@lPNext^.AdapterName)));
      Result[lIndex].Description := PChar(Trim(StrPas(@lPNext^.Description)));
      Result[lIndex].AddressLength := lPNext^.AddressLength;

      SetLength(Result[lIndex].Address, Length(lPNext^.Address));
      CopyMemory(@lPNext^.Address, Result[lIndex].Address, Length(lPNext^.Address));

      Result[lIndex].Index := lPNext^.Index;
      Result[lIndex].aType := lPNext^.aType;
      Result[lIndex].DHCPEnabled := lPNext^.DHCPEnabled;

      Result[lIndex].CurrentIPAddress := PChar(StrPas(@lPNext^.CurrentIPAddress));
      Result[lIndex].IPAddressList := GetIPAddrStringList(@lPNext^.IPAddressList);

      Result[lIndex].GatewayList := GetIPAddrStringList(@lPNext^.GatewayList);
      Result[lIndex].DHCPServer := GetIPAddrStringList(@lPNext^.DHCPServer);
      Result[lIndex].HaveWINS := lPNext^.HaveWINS;
      Result[lIndex].PrimaryWINSServer := GetIPAddrStringList(@lPNext^.PrimaryWINSServer);
      Result[lIndex].SecondaryWINSServer := GetIPAddrStringList(@lPNext^.SecondaryWINSServer);
      Result[lIndex].LeaseObtained := lPNext^.LeaseObtained;
      Result[lIndex].LeaseExpires := lPNext^.LeaseExpires;
      Result[lIndex].SpareStuff := PChar(StrPas(@lPNext^.SpareStuff));
      lPNext:= lPNext^.Next;

      Inc(lIndex);
    until lPNext = nil;
  finally
    FreeMemory(lPAdapterInfo);
  end;  
end;



{ TForm16 }

constructor TForm16.Create(AOwner: TComponent);
var
  lAdapterList: TAdaptersStructList;
  lIPs: string;
  i, j: Integer;
begin
  inherited;
  lAdapterList := GetAdapterList;
  for i := Low(lAdapterList) to High(lAdapterList) do
  begin
    lIPs := '';
    for j := Low(lAdapterList[i].IPAddressList) to High(lAdapterList[i].IPAddressList) do
      lIPs := lAdapterList[i].IPAddressList[j].IPAddress;
    ListBox1.Items.Add(lAdapterList[i].AdapterName + ' : ' +  lIPs);
  end;
end;

end.



Как определить модем это или сетевухв сказать немогу т.к. модкма нету, а эмулировать лень, но думаю из IP_ADAPTER_INFO эту инфу по каким-нибудь признакам можно определить.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Andreyzpr
Дата 11.10.2007, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Rennigth спасибо, работает smile
 + репы ;)
PM MAIL WWW ICQ   Вверх
gerebecc
Дата 8.4.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Разобрался и откомпилировал в примере но мне он ОСНОВНОЙ ШЛЮЗ не показывает и так везде ip показывае а что касается ШЛЮЗА так ни где нет smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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