Q&A

  • IP 주소구하기..?
컴퓨터에 네트웍 카드가 2개가 들어있습니다.
indy ipwatch를 이용하면 두개중에 먼저 잡히는 ip 주소만 알수가 있던데
2개의 IP 주소를 다 알수 있는 방법과 특정카드의 IP주소를 알아낼수 있는
방법이 없을까요? ..꼭 도와주세요..^^
1  COMMENTS
  • Profile
    이중철 2005.11.25 21:43
    제가 쓰는 소스 일부 발체 입니다.
    사용목적이 틀려서.. 그러나 소스내부에 해당하는 부문이 있습니다.

    <!--CodeS-->
    function TUnitCommonUtil.GetNetworkInfo(SERVERIP : Cardinal): boolean;
    var
      RET_BETSTINTERFACE: DWORD;
      dwSize: ULONG;
      PIPAddrTable: PMIB_IPADDRTABLE;
      AdapterInfo: PIP_ADAPTER_INFO;
      i: integer;
      retvalue: integer;
      PBuf: PCHAR;
      PerAdapterInfo: IP_PER_ADAPTER_INFO;
      PIpAddr: PIP_ADDR_STRING;
    begin
      Result := false;
      if GetBestInterface(SERVERIP, RET_BETSTINTERFACE) = 0 then
      begin
        GetMem(PIPAddrTable, sizeof(MIB_IPADDRTABLE));
        dwSize := 0;
        retvalue := GetIpAddrTable(PIPAddrTable, dwSize, false);
        if (retvalue <> ERROR_INSUFFICIENT_BUFFER) then
        begin
          FreeMem(PIPAddrTable, sizeof(MIB_IPADDRTABLE));
          exit;
        end
        else
        begin
          try
            FreeMem(PIPAddrTable, sizeof(MIB_IPADDRTABLE));
            GetMem(PIPAddrTable, dwSize);
            if GetIpAddrTable(PIPAddrTable, dwSize, false) = NO_ERROR then
            begin
              for i := 0 to PIPAddrTable^.dwNumEntries - 1 do
              begin
                if RET_BETSTINTERFACE = PIPAddrTable^.table[i].dwIndex then
                begin

                  mIP := PIPAddrTable^.table[i].dwAddr;
                  mMask := PIPAddrTable^.table[i].dwMask;
                  mGateWay := 0;
                  GetMem(pBuf, sizeof(IP_ADAPTER_INFO));
                  dwSize := 0;
                  retvalue := GetAdaptersInfo(PIP_ADAPTER_INFO(PBuf), dwSize);
                  if (retvalue <> ERROR_INSUFFICIENT_BUFFER) and (retvalue = NO_ERROR) then
                  begin
                    FreeMem(pBuf, sizeof(IP_ADAPTER_INFO));
                    exit;
                  end;
                  try
                    FreeMem(pBuf, sizeof(IP_ADAPTER_INFO));
                    GetMem(pBuf, dwSize);
                    FillChar(pBuf^, dwSize, #0); // clear buffer
                    retvalue := GetAdaptersInfo(PIP_ADAPTER_INFO(PBuf), dwSize);
                    if retvalue = NO_ERROR then
                      AdapterInfo := PIP_ADAPTER_INFO(PBuf);
                    while (AdapterInfo <> nil) do
                    begin
                      if @AdapterInfo^.IpAddressList <> nil then
                        if (PIPAddrTable^.table[i].dwAddr = str2ipaddr('127.0.0.1')) or (str2ipaddr(strpas(@AdapterInfo^.IpAddressList.IpAddress.S[0])) = PIPAddrTable^.table[i].dwAddr) then
                        begin
                          if str2ipaddr(strpas(@AdapterInfo^.IpAddressList.IpAddress.S[0])) <> 0 then
                            mIP := str2ipaddr(strpas(@AdapterInfo^.IpAddressList.IpAddress.S[0]));
                          mAdaterName := strpas(AdapterInfo^.Description);
                          mAdaperIndexName := strpas(AdapterInfo^.AdapterName);
                          mMacLength := AdapterInfo^.AddressLength;
                          move(AdapterInfo^.Address[0], mMacAddr[0], AdapterInfo^.AddressLength);
                          if @AdapterInfo^.GatewayList <> nil then
                            mGateWay := str2ipaddr(strpas(@AdapterInfo^.GatewayList.IpAddress.S[0]));
                          mUseDHCP := AdapterInfo^.DhcpEnabled;
                          result := true;
                          mDNS1 := 0;
                          mDNS2 := 0;



                          if (osvi.dwPlatformId = VER_PLATFORM_WIN32_NT) then
                          begin
                            dwSize := SizeOf(PerAdapterInfo);
                            retvalue := GetPerAdapterInfo(AdapterInfo^.Index, @PerAdapterInfo, dwSize);
                            if retvalue = 0 then
                            begin
                              mUseDNS := PerAdapterInfo.AutoconfigEnabled or PerAdapterInfo.AutoconfigActive;
                              mDNS1 := 0;
                              mDNS2 := 0;
                              PIpAddr := @PerAdapterInfo.DnsServerList;
                              if PIpAddr <> nil then
                              begin
                                mDNS1 := str2ipaddr(strpas(@PIpAddr^.IpAddress.S[0]));
                                PIpAddr := PIpAddr^.Next;
                                if PIpAddr <> nil then
                                  mDNS2 := str2ipaddr(strpas(@PIpAddr^.IpAddress.S[0]));
                              end;
                            end;
                          end
                          else if osvi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then
                          begin
                            // Win98 DNS 가져와야 합니다.
                            mUseDNS := 0;
                            mDNS1 := 0;
                            mDNS2 := 0;
                          end;

                        end;
                      AdapterInfo := AdapterInfo^.Next;
                    end;
                  finally
                    freeMem(pBuf, dwSize);
                  end;

                end;
              end;
            end;
          finally
            FreeMem(PIPAddrTable, dwSize);
          end;
        end;
      end;
    end;
    <!--CodeE-->

    이소스는 Destination IP에 지칭되는 Adapter와 IP를 가져오는 함수의 소스 일부 입니다.
    님은 GetIpAddrTable, GetAdaptersInfo 이 두가지 Function으로 원하는 결과를 얻을수 있을 겁니다.


    • nilriri™
      2005.11.24 22:11
      ListBox는 컬럼이 없는뎅 ㅡㅡ; 컬럼을 옆으로 늘어 놓으실려면 리스트뷰를 사용하시구요.. 굳이 리...
    • 추종범
      2005.11.24 23:30
      답변주신거 감사합니다^^ 하지만 제가 원하는게 아니네요 ㅜㅜ;; 가리켜주신데로 하면 리스트박스에 1 ...
    • 김재영
    • 2005.11.24 20:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2005.11.25 21:43
      제가 쓰는 소스 일부 발체 입니다. 사용목적이 틀려서.. 그러나 소스내부에 해당하는 부문이 있습니다. ...
    • 박지용
      2005.11.25 00:14
      레코드의 내용을 디버깅(?) 용도나 기타 다른 용도로 전환하여 확인차 해보실려구 하나보네요.... 맞는...
    • 최용일
      2005.11.24 04:27
      안녕하세요. 최용일입니다. 무슨 말인지 질문 자체가 난해하네요... ㅠㅠ record 부분을 string 로 ...
    • 이중철
      2005.11.23 20:46
      <!--CodeS--> var i : integer; begin   for i := 0 to memo1.Lines.Count - 1 do &nb...
    • 임우식
      2005.11.23 20:59
      var i : integer; begin   for i := 0 to memo1.Lines.Count - 1 do     ...
    • 이중철
      2005.11.23 21:14
      name은 없습니다. name필요하면 집어 넣으시면 됩니다. name := memo1.Lines[i];  //중복되면 ...
    • 임우식
      2005.11.23 22:34
    • 이중철
      2005.11.23 20:41
      진수변환기를 원하시는 것 같네요 http://enter.ms98.net/leftmain/jinsoo.html 이사이트에 자바스크립...
    • 박종학
    • 2005.11.23 07:56
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2005.11.23 09:25
      안녕하세요. 최용일입니다. 흠... 올리신 테이블과 쿼리문만 보면 전혀 gruop by 가 필요한 문장이 아닌...
    • 박종학
      2005.11.23 19:11
      ---다시 질문--- DBLookupBOX 리스트에 대분류가 포유류인 중분류 레코드값을 출력하고 싶어서 그럽니다. ...
    • 이중철
      2005.11.23 19:51
      다음과 같이 바꾸세요(Group by 절은 Select절의 집계필드(Sum, Count등)를 제외한 모든 필드가 있어야 합...
    • 박종학
      2005.11.23 23:32
      문제점이 무엇인지 알았습니다. SQL 공부를 더 해야 겠군요.. 많은 도움이 됐습니다. 문제도 해결됐구요. ...
    • Marek
      2005.12.06 19:39
      Marek입니다. 제가 아는 바로는 없는것 같습니다. VB, VC에도 초기값 일괄세팅은 없었던것 같구요. ...
    • 이중철
      2005.11.23 03:59
      제가 알기로는 쓸만한 방법이 없네요 일단 고정 필드 스트링은 총 255자입니다. 그리고 첫바이트가 사이...
    • Marek
      2005.12.06 04:17
      Marek wrote. ShockwaveFlash ActiveX를 사용하면 어떤플랫폼이든 에러가 없습니다. Component -- Im...
    • 레미
      2005.12.07 19:36
      큰 도움이 되었습니다. 도움 주셔서 정말 감사합니다. 그런데.. 제가 초보라 잘못 이해한것일 수도 있...
    • 최봉덕
    • 2005.11.22 02:50
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김상진
    • 2005.11.22 02:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_BaSTaD
      2005.11.23 07:54
      저도 예전에 이렇게 질문했던 적이 있었습니다. ^^;; 그러니까... 머리 몸통 싹뚝 잘라놓고... 결론적...
    • 천희택
      2005.11.21 22:32
      질문이... 어렵습니다. 특정 시간... 즉 특정 시각을 랜덤하게  뽑으시는 건지.... 버튼을...
    • 뚜버기^^v
      2005.11.25 18:05
      감사합니다. 정말 잘 되고 있습니다. 그런데, 제가 설명이 약간 부족한거 같아서요.. 오전 8시 부...
    • 이지혜
    • 2005.11.20 11:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • Crazy™
      2005.11.21 19:35
      아랫분이 답변해 주셧는데.. 참고로 자료실인가? 한번 찾아보세요. mp3 tag까지 가져오는 멋진게 있어요 ...
    • 류종택
      2005.11.20 12:15
      mp3 player 말씀이시지요? 꼭 Active-X를 사용하지 않아도 됩니다. 다만 편하게 쓰자는 말이겠지요, 이를...
    • 박종학
    • 2005.11.19 23:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2005.11.22 02:02
      콤보박스의 데이터 소스 프로퍼티에 데이터 소스 컴포넌트를 연결하신거 아닌가요? 콤보박스에 보시면 ...
    • 박종학
      2005.11.23 03:57
      .
    • 최용일
      2005.11.20 14:27
      안녕하세요. 최용일입니다. 컴포넌트 팔레트의 Win32탭에 있는 XPManifest를 폼에 떨구어놓으세요. 그럼...
    • 최용일
      2005.11.20 14:20
      안녕하세요. 최용일입니다. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellc...
    • 가시나무 새
      2005.11.20 22:43
      감사해요 ..^^; 주말까지 ..ㅎㅎ ^_^:
    • 쿠나
    • 2005.11.19 08:16
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 허강우
      2005.11.28 18:27
      키보드를 사용하시려면 키보드를 누를 때마다 포커스를 해당 창에 먼저 준 이후에 키 메시지를 보내도록 ...
    • 최용일
      2005.11.20 14:19
      안녕하세요. 최용일입니다. 1번은 흠.... 키보드입력관련된 이벤트를 썼다고 하는것을 보면 키보드입력...
    • 쿠나
      2005.11.29 09:21
      해결되었습니다..... 친절한 답변 감사드립니다.
    • 최용일
      2005.11.20 14:07
      안녕하세요. 최용일입니다. 질문1: TPaintBox를 쓰고 더블버퍼링을 하시면 깜빡거림은 어느정도 해결 ...
    • 추종범
    • 2005.11.19 03:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2005.11.20 13:54
      안녕하세요. 최용일입니다. 폼이 근접했을때 붙는것은 한델/델마당/델코에서 자석폼으로 검색해보시면 ...
    • 박동호
    • 2005.11.19 00:32
    • 0 COMMENTS
    • /
    • 0 LIKES