C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[5070] Re:[질문] 한 컴퓨터에서 여러 개의 ip 사용하기에 대해서
[] 4456 읽음    2001-02-01 11:30
nassol 님이 쓰신 글 :
: 위와 같은 게 가능한지
:
: 제가 어딘가에 질문을 올렸는데 어떤 분이 한 컴퓨터에 NIC을 여러 개 꽂으면
:
: 가능하다고 말씀해주셨거든요. NIC은 랜카드라고 생각이 되는데,
:
: 그럼 프로그램에서 자기 ip를 어떻게 컨트롤 할 수 있을까요?
:
: 자기 ip를 프로그램 자체적으로 지정해서 사용할 수 있나요? ip가 만약
:
: 랜카드 하나당 하나씩 부여받는 것이라면요.
:
: 아는 분은 조언 부탁드립니다.
:
:
:

안녕하세요. 98 을 기준으로 설명드리겠습니다.

제 컴퓨터에는 랜카드 하나가 달려있습니다만  장치관리자에보면 네트워크어댑터 밑에

1. RealTech8139A
2. 천리안 어댑터
3. 전화접속 어댑터

위와 같이 쭉 달려있죠.

자 ∼ 그럼 이것들이 어떻게 레지스트리에서 연결되어있는지 추척해 봅시다.

HKEY_DYN_DATA\Config Manager\Enum 아래에는 C29어쩌구... 하는 Key들이 있습니다.
  GetKeyNames()를 통해 모든 Key를 읽어들입니다.

각 Key마다 HardWareKey 라는 Value가 있죠.
  string=ReadString() 으로 값을 읽습니다.

HKEY_LOCAL_MACHINE\Enum Key 아래에서 위에서 읽어들인 string 에 해당하는
  Key를 찾아갑니다.
  그 아래에 있는 Value 중에서 Class 에 해당되는 스트링이 "Net" 인 것을 찾아냅니다.
  이게 바로 네트워크 어댑터에 해당되는 것들이죠...


위와같이 하면 시스템에 등록된 하드웨어중 네트워크 어댑터가 검색이 됩니다.
제컴퓨터에서는 3개가 검색이 되겠죠...

먼저 RealTech 는 HardWareKey가
PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\BUS_00&DEV_0B&FUNC_00
엄청 복잡하죠...

다음으로 천리안 어댑터는
ROOT\NET\0000 이라고 되있습니다. 히히 이건 간단하죠.

전화접속 어댑터는
ROOT\NET\0001 이라고 되어있구요.
그러고 보니까 천리안 어댑터는 전화접속 어댑터를 따라 만든것 같군요...

여기까지는 장치관리자에 등록된 목록입니다.

자.. 다음으로 ... 네트워크 환경에 등록된 목록을 찾아보도록 하죠...

제컴에서 네트워크 환경 등록정보를 보면
...
RealTech8139A 어댑터
천리안 어댑터
전화접속 어댑터

TCP/IP -> RealTech8139A
TCP/IP -> 천리안 어댑터
TCP/IP -> 전화접속 어댑터
...

위와 같이 잡혀있습니다.

*** 먼저 어댑터는 ***
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net 아래
0000
0001
0002
세개가 있군요

그런데 여기서 중요하죠....

장치관리자에 있는 어댑터와 네트워크 환경에 있는 어댑터가 어떻게 매치가
되는걸까요????

그건 다음과 같습니다.

전화접속 어댑터의 경우...장치관리자에 해당하는 것이
HKEY_LOCAL_MACHINE\Enum\Root\Net\0001 입니다.

그 아래에 Driver 라는 value 가 있죠...
스트링 값을 읽어보면 "Net\0002" 라고 되어있습니다.
이값이 네트워크 환경에서 그 어댑터에 해당하는 곳을 찾는 열쇠가 되겠죠.
다음과 같습니다.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\0002


*** 프로토콜을 찾아봅시다. ***
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans 아래를 보면
0000
0001
0002
0003
0004
위와 같은 키들이 있군요.
각각 순서대로
TCP/IP -> RealTech8139A
IPX/SPX -> RealTech8139A
TCP/IP -> 천리안어댑터
TCP/IP -> 전화접속어댑터
IPX/SPX -> 전화접속어댑터

그렇다면 프로토콜과 어댑터(장치관리자의 어댑터)가 위와같이 매치가 되는지는
어떻게 알수있을까요...

이번에도 전화접속 어댑터를 예로 들어봅시다.
전화접속 어댑터의 경우...장치관리자에 해당하는 것이
HKEY_LOCAL_MACHINE\Enum\Root\Net\0001 입니다.

이 키 아래에는 Bindings 라는 키가 있습니다.
이 키는 그 어댑터가 어떤 프로토콜과 바인딩이 되어있는지를 나타내주는 역할을 하겠죠.
보면 .. 2개의 value가 있습니다.
MSTCP\0002
NWLINK\0001
첫번째 것은 Tcp/ip...두번째 것은 IPX 를 뜻합니다.
첫번째 value 에 해당하는 키를 찾아가 볼까요.
이곳으로 가면 됩니다.

HKEY_LOCAL_MACHINE\Enum\Network\MSTCP\0002

이아래에는 Driver 라는 value 가 있고 그것의 스트링값은
"NetTrans\0003" 이더군요..
즉 다음으로 가면 되겠군요.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\0003
즉 이 곳이 전화접속 어댑터의 TCP/IP 설정에 관련된 레지스트리입니다.


하하하... 지금까지 제가 너무 복잡하게 설명 드렸나요??
저도 지금 쓰면서 엄청 헷갈리는군요.
다시한번 요약을 해드리겠습니다.


1. 장치관리자에서 볼수 있는 "네트워크 어댑터" 에 해당하는 레지스트리 키는

HKEY_LOCAL_MACHINE\Enum 아래에 value가Class에 해당되는값이 "Net" 인 Key



2. 네트워크 환경에서 볼수 있는 "네트워크 어댑터" 에 해당하는 레지스트리 키는

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net
   +
1번의 Key 아래 value가Driver에 해당되는 스트링 (예: Net\0002)


3. 네트워크 환경에서 볼수 있는 "프로토콜"에 해당하는 레지스트리 키는

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans
   +
1번의 Key 아래 Bindings라는 키아래 Value



좀 복잡했죠...

참고로 장치관리자에 대해 몇가지 말씀드리죠..

레지스트리에 보면 HKEY_DYN_DATA 키 아래에는

컴퓨터가 부팅될때마다 하드웨어를 검색하여 서브키들을 새로 새로 새로 작성합니다.

그리고 HKEY_LOCAL_MACHINE\Enum 키 아래에 있는 하드웨어정보와 비교를 합니다.

근데 HKEY_LOCAL_MACHINE\Enum 키 아래에는 있지만 HKEY_DYN_DATA 키 아래에 없다면

그건 레지스트리에만 존재하는 하드웨어가 되겠죠.

예를 들어 랜카드를 RealTek 을 쓰다가 3COM 으로 바꿨으면

HKEY_LOCAL_MACHINE\Enum 키 아래에는 두개다 존재하지만

HKEY_DYN_DATA 키 아래에는 RealTek 이 존재하지 않는 것이죠.

+ -

관련 글 리스트
5023 [질문] 한 컴퓨터에서 여러 개의 ip 사용하기에 대해서 nassol 3197 2001/01/29
5070     Re:[질문] 한 컴퓨터에서 여러 개의 ip 사용하기에 대해서 4456 2001/02/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.