Q&A

  • [질문] IP주소로 컴퓨터 이름 찾기
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버전부터 유니코드로 바뀌면서 뭔가 문제가 되나봅니다.
1  COMMENTS
  • Profile
    cdrd 2009.10.01 20:15
    아래와 같이 함수를 수정하였습니다.
    결국 유니코드 문제였습니다.

    <!--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-->
    • cdrd
    • 2009.10.14 18:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 아르스
    • 2009.10.13 19:57
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 초보임당
      2009.11.10 05:34
      흠...저도 그문제 때문에 골치가 좀 아팠는데요.. 리모트 데이터모듈 소스 보시면 updateRegistry ...
    • 초보임당
      2009.11.18 18:20
      리모트데이터모듈 을 등록하는 방법을 알아냈네요.. 그냥 exe 화일을 실행하지 마시고.. 실행시 실...
    • 아르스
      2009.11.27 22:51
      감사합니다 ^^ 레지스트리에 강제로 등록하는 프로그램을 만들어서 등록을 했었는데 /regserver ...
    • 강중규
    • 2009.10.13 18:49
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.10.16 19:45
      TMemo 의 OnMouseUp 이벤트에서 마우스 우클릭이 일어났을때 캐럿의 위치를 저장하고, 숨겨두었던 TStri...
    • 강중규
      2009.10.17 02:39
      procedure TSangSik_Get.ContentMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState...
    • 구창민
      2009.10.20 03:21
      메모장에서 우클릭시 컨텍스트 메뉴가 안나오게 하고 싶단 의미라면.. 아래처럼 TMemo 의 ContextPopup...
    • 강중규
      2009.10.20 07:11
      감사합니다. 컨텍스트 메뉴가 안나오게 하고 싶었거든요. 그런데, 우클릭시 스트링그리드가 나오고, 그...
    • 강중규
      2009.10.20 16:18
      Content.SetSelTextBuf()를 사용하니 되내요. 그런데, 스트링그리의 목록중 하나를 했을때의 코딩 Cont...
    • 구창민
      2009.10.20 18:22
      델파이 7 버전이신가봐요? SetSelTextBuf 는 아마도 인자가 PAnsiChar 이어서 그럴겁니다. code_grid....
    • 강중규
      2009.10.21 16:37
      답변 감사합니다. 위와 같이 하니 되내요. 즐거운 하루 되세요.
    • 이강석
    • 2009.10.13 02:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.10.16 03:51
      관련 내용을 팁게시판에 올려둘께요 참고하시기 바랍니다. 그럼 즐거운 프로그래밍 하시구요~
    • 백록화
      2009.10.13 18:55
      해당 url을 호출하고 완료되는 시점을 확인하실려는것인가요? 아님 그 결과값을 알고자 하시는것인지?? ...
    • ▷◁병부잡이
      2009.10.13 19:52
      var s : string; begin s := IdHTTP1.Get('http://222.122.111.123/pb_reg.jsp?aid=abc&pwd=1234'...
    • phono
      2009.10.10 02:50
      단순히 시간을 클라이언트에 set 하는 방법은 NET TIME \\서버명 /SET /YES 로 하시면 되는데 ...
    • 윤중현
      2009.10.10 03:19
      와우~ 저희 회사에도 도움이 되겠는데요~ 저도 플리즈~~ 헬 ~~ 프~~ 미~~ ^^;; 도움이 안되는 댓글 죄송...
    • 강중규
    • 2009.10.07 22:02
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박종철
    • 2009.10.07 19:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박종철
      2009.10.07 19:21
      어이쿠 자답입니다. ISNULL에다가 ''만 넣었네요... ㅠ_ㅠ 왜 이런 실수를 했을까... ''''로 변경...
    • 강중규
    • 2009.10.06 20:22
    • 12 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2009.10.06 23:14
      '스트링 그리드 콤보 박스' 검색해도 많이 나오는데요....자료실에 제가 예전에 올린 테스트 소스도 있습...
    • 강중규
      2009.10.07 05:45
      답변 감사합니다. 그런데, 버튼을 하나 만들고, 버튼을 누르면 쇼메시지에 보이게는 어떻게 하죠. show...
    • 홍성락
      2009.10.07 18:20
      객체를 Tcombobox형으로 해서 읽어보세요 showmessage( Tcombobox(test_gred.objects[1,test_gred.row])...
    • 강중규
      2009.10.07 18:54
      감사합니다. 그건 해결을 했습니다. 그런데, 콤보박스의 목록중 하나를 선택하면, 그리드의 콤보박스...
    • 홍성락
      2009.10.07 22:18
      조금 수정했습니다 1. 한번만 생성되도록 2. 동적 콤보박스 생성시 부모가 윈도우 클래스냐에 따라 이...
    • 강중규
      2009.10.08 05:24
      답변 감사합니다. procedure TForm1.MyComboBoxChange(Sender: TObject); begin test_grid.Cell...
    • 홍성락
      2009.10.08 05:54
      스트링 그리드의 OnClick에서 처리하신다고 하지 않나요. OnClick이라면 MyComboBoxChange 이후 사라질거...
    • • • •
    • 최용일
      2009.10.06 04:18
      그냥 정수로 바꾸시면 될듯하네요. ...+#$30+#$ㅁㅁ+#$67+... ...+#$30+Char(StrToInt(Edit1.Text))+...
    • 오델로
      2009.10.06 17:39
      답변과 관심 감사드리구요 제가 생각하는건 만약 13을 입력하면 1과3으로 분리한후 ...+#$ㅅㅅ+#$...
    • 홍성락
      2009.10.06 21:01
      # 는 ASC코드로, $ 는 16진수를 10진수로.... #$20는 $20(16진수 20을 10진수값 32)의 아스키코드...
    • 오델로
      2009.10.07 03:27
      최용일님 말씀처럼 해보면 ...+#$30+Char(StrToInt(Edit1.Text))+#$67+... 요부분에서 [Pascal ...
    • 최용일
      2009.10.07 03:59
      1의 헥사값 31이 mm에들어가고 3의 헥사값 34이 ss자리에 들어가도록 하고싶습니다.... 위 질문대로라...
    • 홍성락
      2009.10.07 04:09
      mm은 Char형이구요. 1과 3의 헥사를 구해 넘긴다면 Chr와 StrToint와 '$' + IntToHex() 등등을 사용하겠...
    • 김홍균
      2009.10.07 14:27
      보낼 때 var ss : word; H_ss, L_ss : word; begin ss :=strtoint('$'+(Edit1.Text)); // ...
    • • • •
    • 배경
    • 2009.10.02 00:59
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Elpira
    • 2009.10.01 21:13
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 정경철
    • 2009.10.01 16:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오병주
      2009.10.14 01:55
      미들웨어는 그냥 CORBA로 사용해도 충분히 될것은데요 그리고 데몬프로그램은 소켓통신을 이용하는게 제...
    • cdrd
    • 2009.10.01 01:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • cdrd
      2009.10.01 20:15
      아래와 같이 함수를 수정하였습니다. 결국 유니코드 문제였습니다. <!--CodeS--> function IP...
    • 김동원
    • 2009.09.30 08:11
    • 3 COMMENTS
    • /
    • 0 LIKES
    • phono
      2009.09.30 22:12
      procedure DB_Open(adoConnect: TADOConnection; CONNECT_ADDR: string); var DBPW: string; i...
    • 김동원
      2009.10.05 22:49
      대단히 감사합니다. 정말 귀한 정보 감사드립니다.
    • phono
      2009.10.05 23:54
      GetDBCONNID, GetDBCONNDB, GetDBCONNPW는 제가 임의 사용하는 함수 입니다. SQL서버에 등록한 ID, 생...
    • 한만희
    • 2009.09.30 02:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 엽기블랙
      2009.09.30 18:59
      DoubleBuffered := TRUE; 델파이에서는 하시면 대부분 해결됩니다.
  • profile cdrd
    2009/10/01 01:07
  • Views3455
    Likes0
    Comments1
    Reports0
  • Tag List
  • 목록으로