안녕하세요.. 에거 아직 초보라서
제가 하고싶은 일은 자기 IP를 가져 오는 건데요. 랜카드 한개일때는
관계 없는데 2개 (한개는 내부네트웍, 한개는 인터넷) 이렇게 되 어 있을때,
또는 랜카드는 한개인데 가상 IP사용해서 외부로 나갈때..
이럴때는 IP를 어떻게 가져 오나요..
제가 가져 오고 싶은 건 인터넷용 IP이거든요..
Ipconfig 하면 나오는데. 제가 해 보니까 내부용 한개 밖에 못가져와여..
고수님들의 많은 조언 바랍니다.
function getips: TStrings;
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:=TStringList.Create;
Result.Clear;
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then
begin
Exit;
end;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^[I] <> nil do
begin
Result.Add(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines:=Getips;
end;
저의 경험으로는 현재 연결되어 있는 놈으로다 IP를 잘 가지고 오더라구요...
그럼.. 이만.
uses Winsock;
{...}
function getips: TStrings;
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:=TStringList.Create;
Result.Clear;
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then
begin
Exit;
end;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^[I] <> nil do
begin
Result.Add(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines:=Getips;
end;