IP 주소를 입력하여 해당 IP주소의 작업그룹과 컴퓨터 이름을 가져오는 방법은 없을까요?
Delphi 2010 환경입니다.
아래의 코드로 델파이 2006에서는 잘 돌아가는데, 2010에서는 안됩니다.
PChar을 PAnsiChar로 변경해서 컴파일 했습니다.
<!--CodeS-->
uses WinSock;
function IPAddrToName(IPAddr: string): string;
var
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
WSAData: TWSAData;
begin
WSAStartup($101, WSAData);
SockAddrIn.sin_addr.s_addr := inet_addr(PAnsiChar(IPAddr));
HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
if HostEnt <> nil then
Result := StrPas(Hostent^.h_name)
else
Result := '';
end;
<!--CodeE-->
HostEnt가 널값으로 넘어옵니다.
아마도 2009버전부터 유니코드로 바뀌면서 뭔가 문제가 되나봅니다.
결국 유니코드 문제였습니다.
<!--CodeS-->
function IPAddressToHostName( IPAddr : AnsiString ) : AnsiString;
var
SockAddrIn : TSockAddrIn;
HostEnt : PHostEnt;
WSAData : TWSAData;
begin
WSAStartup( $101, WSAData );
SockAddrIn.sin_addr.s_addr := inet_addr( PAnsiChar( IPAddr ) );
HostEnt := GetHostByAddr( @SockAddrIn.sin_addr.s_addr, 4, AF_INET );
if HostEnt <> nil then
begin
Result := StrPas( HostEnt^.h_name );
end
else
begin
Result := '';
end;
end;
<!--CodeE-->
아래는 실행 이벤트 입니다.
<!--CodeS-->
Edit1.Text := String( IPAddressToHostName( AnsiString( Edit2.Text ) ) );
<!--CodeE-->