Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.036 c
14-1108648630
Ilya___
2005-02-17 16:57
2005.03.06
подскажите, как можно щелчком на Label, открыть броузер с интерне


11-1090862232
DJ DIZzY
2004-07-26 21:17
2005.03.06
как сделать скин


1-1109082760
HydraMarat
2005-02-22 17:32
2005.03.06
Как выделить область в стеке?


1-1108965198
xOn
2005-02-21 08:53
2005.03.06
Процедуры и функции Delphi


3-1107759821
Tornado
2005-02-07 10:03
2005.03.06
Вставка записей, есть вопрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский