여러개의 네트워크 어뎁터 (모뎀, ADSL..)가 설치되어 PC 에서 실제로
사용중인 IP ADDRESS 만을 알고 싶으면 어떻게 해야 하나요?
다음과 같이 하니까 어뎁터별로 IP 가 나오더라구요.
필요한것은 현재 연결되어 사용중인 IP 만 필요하거든요.
아시는 분 꼭 알려주세요.
procedure Tfmain.GetLocalIP;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt; // HostEntry 구조체
pptr : PaPInAddr;
Buffer : array [0..MAX_PATH] of char;
lc_ip_addr : array[0..16] of char;
LocalIP : String;
i : Integer;
begin
LocalIP := '';
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if (phe = nil) then begin
LocalIP := '0.0.0.0';
System.Exit;
end;
pptr := PaPInAddr(Phe^.h_addr_list);
i := 0;
while (pptr^[i] <> nil) do begin
LocalIP := StrPas(inet_ntoa(pptr^[i]^));
Inc(i);
end;
end;
> 여러개의 네트워크 어뎁터 (모뎀, ADSL..)가 설치되어 PC 에서 실제로
> 사용중인 IP ADDRESS 만을 알고 싶으면 어떻게 해야 하나요?
> 다음과 같이 하니까 어뎁터별로 IP 가 나오더라구요.
> 필요한것은 현재 연결되어 사용중인 IP 만 필요하거든요.
> 아시는 분 꼭 알려주세요.
>
> procedure Tfmain.GetLocalIP;
> type
> TaPInAddr = array [0..10] of PInAddr;
> PaPInAddr = ^TaPInAddr;
> var
> phe : PHostEnt; // HostEntry 구조체
> pptr : PaPInAddr;
> Buffer : array [0..MAX_PATH] of char;
> lc_ip_addr : array[0..16] of char;
> LocalIP : String;
> i : Integer;
> begin
> LocalIP := '';
> GetHostName(Buffer, SizeOf(Buffer));
>
> phe := GetHostByName(buffer);
> if (phe = nil) then begin
> LocalIP := '0.0.0.0';
> System.Exit;
> end;
>
> pptr := PaPInAddr(Phe^.h_addr_list);
> i := 0;
> while (pptr^[i] <> nil) do begin
> LocalIP := StrPas(inet_ntoa(pptr^[i]^));
> Inc(i);
> end;
> end;
>
이렇게 해보시져...
function GetLocalIPAddressOrHostName(IP_Or_HostName: IP_HostName): string;
var
p : PHostEnt;
s : array[0..128] of char;
p2 : pchar;
wVersionRequested : WORD;
wsaData : TWSAData;
begin
{Start up WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
{Get the computer name}
GetHostName(@s, 128);
p := GetHostByName(@s);
if IP_Or_HostName = _HOSTNAME then
Result := p^.h_Name
else begin
{Get the IpAddress}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Result := p2;
end;
{Shut down WinSock}
WSACleanup; // socket 끝내기
end;