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

Вниз

Как узнать свой ай-пишник?   Найти похожие ветки 

 
Alexey Romanskiy   (2004-12-23 20:26) [0]

Как можно узнать ай-пишник компа, на котором запущена прога?


 
Anatoly Podgoretsky ©   (2004-12-23 21:04) [1]

127.0.0.1


 
Eraser ©   (2004-12-23 21:45) [2]

или
код компонента:

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)

}

function EnumInterfaces(var sInt: string): 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;

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

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

1. Îòêðûâàåì WINSOCK
2. Ñîçäà¸ì ñîêåò
3. Âûçûâàåì WSAIOCtl äëÿ äîñòóïà ê ñåòåâûì èíòåðôåéñàì
4. Äëÿ êàæäîãî èíòåðôåéñà, ïîëó÷àåì IP, MASK, BROADCAST, ñòàòóñ
5. Ðàçäåëÿåì ñòðîêó ñèìâîëîì CRLF  
6. Êîíåö :)

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

function EnumInterfaces(var sInt: string): 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;
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                                        // &#197;&#241;&#235;&#232; OK, &#242;&#238; &#238;&#239;&#240;&#229;&#228;&#229;&#235;&#255;&#229;&#236; &#234;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#241;&#243;&#249;&#229;&#241;&#242;&#226;&#243;&#254;&#249;&#232;&#245; &#232;&#237;&#242;&#229;&#240;&#244;&#229;&#233;&#241;&#238;&#226;

     NumInterfaces := BytesReturned div SizeOf(INTERFACE_INFO);

     for i := 0 to NumInterfaces-1 do        // &#196;&#235;&#255; &#234;&#224;&#230;&#228;&#238;&#227;&#238; &#232;&#237;&#242;&#229;&#240;&#244;&#229;&#233;&#241;&#224;
     begin
       pAddrInet := Buffer[i].iiAddress.addressIn;            // IP &#224;&#228;&#240;&#229;&#241;
       pAddrString := inet_ntoa(pAddrInet.sin_addr);
       sInt:=sInt+pAddrString;
       if i=NumInterfaces-1 then
         sInt := sInt
       else
         sInt := sInt + #13#10;
       // CRLF &#236;&#229;&#230;&#228;&#243; &#234;&#224;&#230;&#228;&#251;&#236; &#232;&#237;&#242;&#229;&#240;&#244;&#229;&#233;&#241;&#238;&#236;
     end;
   end;
 except
 end;
//
// &#199;&#224;&#234;&#240;&#251;&#226;&#224;&#229;&#236; &#241;&#238;&#234;&#229;&#242;&#251;
//
 CloseSocket(s);
 WSACleanUp;
 result := false;
end;

end.


 
VMcL ©   (2004-12-23 21:56) [3]

>>Alexey Romanskiy  (23.12.04 20:26)

У компьютера нет IP-адреса. Оный есть только у сетевых интерфейсов.


 
Eraser ©   (2004-12-23 22:00) [4]

А я про что ;-)))


 
Ozone ©   (2004-12-25 05:51) [5]

Eraser ©   (23.12.04 21:45) [2]

Зачем так заморачиваться, если есть библиотека IPHLPAPI? (гке можно за один прогон цикла узнать всю инфу о всех сетевых интерфейсах)


 
Piter ©   (2004-12-25 14:15) [6]

На такие вопросы надо отсылать в FAQ и тему закрывать.


 
able ©   (2004-12-25 16:43) [7]

а мне не сложно:

function LocalIP: String;
type
 TaPInAddr = Array[0..10] of PInAddr;
 PaPInAddr = ^TaPInAddr;
var
 phe: PHostEnt;
 pptr: PaPInAddr;
 Buffer: Array[0..63] of Char;
 I: Integer;
 GInitData: TWSAData;
begin
 WSAStartup($101, GInitData);
 Result := "";
 GetHostName(Buffer, SizeOf(Buffer));
 phe := GetHostByName(buffer);
 if phe = nil then Exit;
 pPtr := PaPInAddr(phe^.h_addr_list);
 I := 0;
 while pPtr^[I] <> nil do
  begin
   Result := inet_ntoa(pptr^[I]^);
   Inc(I);
  end;
 WSACleanup;
end;


 
XProger ©   (2004-12-27 03:49) [8]

able, тогда он будет брать последий IP в очереди сетевых интерфейсов :)
т.е. вот я сижу щас у меня 3 IP адреса
127.xxx.xxx.xxx - я его тож за IP считаю ;)
0 10.0.2.65
1 212.248.15.42

Твой код возьмёт последний из них, ибо цикл у тебя стоит там :)


 
able ©   (2004-12-27 07:15) [9]

XProger ©   (27.12.04 3:49) [8]
able, тогда он будет брать последий IP в очереди сетевых интерфейсов :)
т.е. вот я сижу щас у меня 3 IP адреса
127.xxx.xxx.xxx - я его тож за IP считаю ;)
0 10.0.2.65
1 212.248.15.42

Твой код возьмёт последний из них, ибо цикл у тебя стоит там :)

Я привел лишь пример.


 
XProger ©   (2004-12-27 18:34) [10]

Ну, это я так, для общего образования :)



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

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

Наверх




Память: 0.5 MB
Время: 0.062 c
3-1107255137
Kazus
2005-02-01 13:52
2005.03.06
Приличный редактор *.DB


14-1108480019
Luzer
2005-02-15 18:06
2005.03.06
Как сделать локалку из модемного соединения?


8-1100614636
denis24
2004-11-16 17:17
2005.03.06
Tbitmap...Tjpeg


4-1106295756
Stanislav
2005-01-21 11:22
2005.03.06
Ответ на сообщение


14-1108111774
Drakosha
2005-02-11 11:49
2005.03.06
Подскажите книги и авторов.