Although now more than one machine card is very common (like notebook with wire, wireless, Bluetooth, etc.), but find a ready-to-read all the network card IP address of the function is difficult, helpless to write a, good things who use who know.
[C-sharp]View PlainCopy
- Uses WinSock;
- Type
- Paddrinfow = ^addrinfow;
- Addrinfow = Record
- Ai_flags:integer; //Ai_passive, Ai_canonname, Ai_numerichost
- Ai_family:integer; //Pf_xxx
- Ai_socktype:integer; //Sock_xxx
- Ai_protocol:integer; //0 or Ipproto_xxx for IPv4 and IPv6
- Ai_addrlen:ulong; //Length of AI_ADDR
- Ai_canonname:pwidechar; //Canonical name for NodeName
- AI_ADDR:PSOCKADDR; //Binary address
- Ai_next:paddrinfow; //Next structure in linked list
- End
- Ppaddrinfow = ^paddrinfow;
- Taddrinfow = addrinfow;
- function Getaddrinfow (Nodename:pwidechar; Servicename:pwidechar; Hints:paddrinfow; PPRESULT:PPADDRINFOW): Integer; stdcall; External ' ws2_32.dll ' name ' getaddrinfow ';
- Procedure Freeaddrinfow (AI:PADDRINFOW); stdcall; stdcall; External ' ws2_32.dll ' name ' freeaddrinfow ';
- Procedure Getiplist (list:tstrings);
- Var
- BUFFER:ARRAY[0..63] of Ansichar;
- Hostname: string;
- Hints:taddrinfow;
- Laddrinfo:paddrinfow;
- Retval:integer;
- Ginitdata:twsadata;
- Begin
- WSAStartup ($101, ginitdata);
- GetHostName (buffer, SizeOf (buffer));
- Hostname: = string (Buffer);
- ZeroMemory (@Hints, SizeOf (taddrinfow));
- Hints.ai_family: = 2{af_inet};
- Hints.ai_socktype: = 1{sock_stream};
- Laddrinfo: = nil;
- RetVal: = Getaddrinfow (PChar (Hostname), nil, @Hints, @LAddrInfo);
- Try
- if (RetVal = 0) and (laddrinfo <> nil) Then
- Repeat
- With Tinaddr (LADDRINFO^.AI_ADDR^.SIN_ADDR). S_un_b Do
- List.add (Format ('%d.%d.%d.%d ', [Byte (S_B1), Byte (s_b2), Byte (s_b3), Byte (S_B4)]));
- Laddrinfo: = Laddrinfo^.ai_next;
- Until Laddrinfo = nil;
- finally
- Freeaddrinfow (Laddrinfo);
- WSACleanup;
- End
- End
PS: I use the D2009, with the low version D friend trouble oneself changed.
http://blog.csdn.net/nhconch/article/details/4897682
Functions that have just been written to read multiple NIC IP addresses