Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Как узнать локальный IP   Найти похожие ветки 

 
Alkid ©   (2005-11-15 14:47) [0]

Вопрос: как узнать IP адрес(адреса) локальной машины без помощи компонентов FastNet?


 
ItMan ©   (2005-11-22 03:25) [1]

Поиск в Яндекс.
"Как узнать IP адрес +Delphi"


 
Separator ©   (2005-11-22 10:26) [2]

127.0.0.1

другого локального ip нет

Есть ip твоей машины в локольной сети, в глобальной сети


 
Rentgen ©   (2005-11-24 09:16) [3]

function TForm1.getIP: string;
const WSVer = $101;
var
wsaData: 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;


 
Eraser ©   (2005-11-24 14:06) [4]


> Alkid ©   (15.11.05 14:47)

unit alxUSock;

interface

uses Windows, Winsock;

{

 Если Вы поместите строку результатов в wide TMEMO (в его свойство memo.lines.text)
 то никаких результатов не увидите.

 Тестировалось на Win98/ME/2K, 95 OSR 2 и NT service
 pack #3 , потому что используется WinSock 2 (WS2_32.DLL)

}
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;

type
 TInterfacesArray = array of INTERFACE_INFO;

function EnumInterfaces(var sInt: string;
 var InterfacesArray: TInterfacesArray): Boolean;

{ функция WSAIOCtl импортируется из Winsock 2.0 - Winsock 2 доступен }
{ только в Win98/ME/2K и 95 OSR2, NT srv pack #3 }

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;
 IFF_UP = $00000001;
 IFF_BROADCAST = $00000002;
 IFF_LOOPBACK = $00000004;
 IFF_POINTTOPOINT = $00000008;
 IFF_MULTICAST = $00000010;

implementation

{-------------------------------------------------------------------

1. Открываем WINSOCK
2. Создаём сокет
3. Вызываем WSAIOCtl для доступа к сетевым интерфейсам
4. Для каждого интерфейса, получаем IP, MASK, BROADCAST, статус
5. Разделяем строку символом CRLF  
6. Конец :)

--------------------------------------------------------------------}

function EnumInterfaces(var sInt: string;
 var InterfacesArray: TInterfacesArray): Boolean;
var s: TSocket;
 wsaD: WSADATA;
 NumInterfaces: Integer;
 BytesReturned, SetFlags: u_long;
 pAddrInet: SOCKADDR_IN;
 pAddrString: PCHAR;
 PtrA: pointer;
 Buffer: array[0..20] of INTERFACE_INFO;
 i: Integer;
 //InterfacesArray: TInterfacesArray;
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);
     SetLength(InterfacesArray, NumInterfaces);

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

end.



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
15-1139839929
kaZaNoVa
2006-02-13 17:12
2006.03.05
Упаковщики EXE-файлов


15-1139508569
ZeFiR
2006-02-09 21:09
2006.03.05
Замена системного файла


2-1139866954
AllDer
2006-02-14 00:42
2006.03.05
указатели


3-1136983239
Asail
2006-01-11 15:40
2006.03.05
Нужна помощь в написании запроса SQL (SELECT)


2-1139507966
аматор
2006-02-09 20:59
2006.03.05
приём файла TurboPower Async Professional