작성일: 2009.04.21 (http://ospace.tistory.com/), ospace114@엠팔.컴
인터페이스 관련 API
API 명 |
Flatform | 설명 | 비고 |
---|---|---|---|
GetFriendlyIfIndex | Win98 이상/NT sp4 이상 | 인터페이스 인덱스 받아서 하위호환된 인터페이스 인덱스를 반환. | 24비트 이하로된 값. |
GetIfEntry | Win98 이상/NT sp4 이상 | 특정 인터페이스 정보를 획득. | |
GetIfTable | Win98 이상/NT sp4 이상 | MIB-II 인터페이스 테이블를 획득. | GetIfEntry에서 각각 인터페이스 목록을 가져옴. |
GetInterfaceInfo | Win98 이상/Win 2k 이상 | 인터페이스 목록을 얻음. | |
GetNumberOfInterfaces | Win98 이상/NT sp4 이상 인터페이스 개수를 얻음. | ||
SetIfEntry | Win98 이상/NT sp4 이상 | 인터페이스의 관리 상태를 설정 |
환경 요구사항:
- 헤더: Iphlpapi.h
- 라이브러리: Iphlpapi.lib
관련 구조체
MIB_IFROW 구조체
- 관련API: GetIfEntry,
typedef struct _MIB_IFROW {
WCHAR wszName[MAX_INTERFACE_NAME_LEN]; // 유니코드 인터페이스 이름
DWORD dwIndex; // 인터페이스 식별하는 값
DWORD dwType; // 인터페이스 타입 (아래 참조)
DWORD dwMtu; // MTU(최대 전송 단위)
DWORD dwSpeed; // 인터페이스 속도, bps
DWORD dwPhysAddrLen; // bPhysAddr의 멤버 개수
BYTE bPhysAddr[MAXLEN_PHYSADDR]; // 물리주소
DWORD dwAdminStatus; // administratively 가능, 불가능 지정
DWORD dwOperStatus; // 인터페이스 작동 상태 (아래 참조)
DWORD dwLastChange; // 작동 상태가 변경된 최근 시간
DWORD dwInOctets; // 수신된 데이터 옥텍 수
DWORD dwInUcastPkts; // 수신된 유니케스트 옥텍 수
DWORD dwInNUcastPkts; // 수신된 유니케스트가 아닌 옥텍 수
DWORD dwInDiscards; // 에러가 없이 수신되도 취소된 패킷 수
DWORD dwInErrors; // 에러로 최소된 수신 패킷 수
DWORD dwInUnknownProtos; // 프로토콜을 알지 못해 최소된 수신 패킷 수
DWORD dwOutOctets; // 전송된 데이터 옥텍 수
DWORD dwOutUcastPkts; // 전송된 유니케스트 옥텍 수
DWORD dwOutNUcastPkts; // 전송된 유니케스트가 아닌 옥텍 수
DWORD dwOutDiscards; // 에러없어도 취소된 출력 옥텍 수
DWORD dwOutErrors; // 에러로 취소된 출력 옥텍 수
DWORD dwOutQLen; // 출력 큐 길이
DWORD dwDescrLen; // bDescrip 길이
BYTE bDescr[MAXLEN_IFDESCR]; // 인터페이스 설명
} MIB_IFROW, *PMIB_IFROW;
MIB_IFTABLE 구조체
- 관련 API: GetIfTable
typedef struct _MIB_IFTABLE {
DWORD dwNumEntries; // table 엔트리 개수
MIB_IFROW table[ANY_SIZE]; // 인터페이스 테이블
} MIB_IFTABLE, *PMIB_IFTABLE;
IP_ADAPTER_INDEX_MAP 구조체
- 관련 API: GetInterfaceInfo
typedef struct _IP_ADAPTER_INDEX_MAP {
ULONG Index; // 어뎁터에 연관된 인덱스
WCHAR Name[MAX_ADAPTER_NAME]; // 유니코드 어뎁터 이름
} IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP;
IP_INTERFACE_INFO 구조체
- 관련 API: GetInterfaceInfo
typedef struct _IP_INTERFACE_INFO {
LONG NumAdapters; // 목록에 들어 있는 어뎁터 개수
IP_ADAPTER_INDEX_MAP Adapter[1]; // 각 구조체는 어덱터 인덱스를 이름으로 매핑시켜줌.
} IP_INTERFACE_INFO, *PIP_INTERFACE_INFO;
인터페이스 타입
- 헤더: ipifcons.h
#define MIB_IF_TYPE_OTHER 1 // 기타 등등
#define MIB_IF_TYPE_ETHERNET 6 // 이더넷(무선 포함)
#define MIB_IF_TYPE_TOKENRING 9 // 토큰링
#define MIB_IF_TYPE_FDDI 15 // 광
#define MIB_IF_TYPE_PPP 23 // PPP
#define MIB_IF_TYPE_LOOPBACK 24 // 루프백 (localloop)
#define MIB_IF_TYPE_SLIP 28 // SLIP
인터페이스 작동 상태
- 헤더: ipifcons.h
#define IF_OPER_STATUS_NON_OPERATIONAL 0 // 작동 불능 (주소 충돌 등)
#define IF_OPER_STATUS_UNREACHABLE 1 // WAN이 연결 불능
#define IF_OPER_STATUS_DISCONNECTED 2 // LAN 어뎁터인 경우 네트워크 케이블 연결끈김, WAN 어뎁터는 캐리어가 없음.
#define IF_OPER_STATUS_CONNECTING 3 // WAN 어뎁터가 연결중
#define IF_OPER_STATUS_CONNECTED 4 // WAN 어뎁터가 원격 상대방에 연결됨
#define IF_OPER_STATUS_OPERATIONAL 5 // LAN 어뎁터 기본 상태
#define MIB_IF_OPER_STATUS_NON_OPERATIONAL 0
#define MIB_IF_OPER_STATUS_UNREACHABLE 1
#define MIB_IF_OPER_STATUS_DISCONNECTED 2
#define MIB_IF_OPER_STATUS_CONNECTING 3
#define MIB_IF_OPER_STATUS_CONNECTED 4
#define MIB_IF_OPER_STATUS_OPERATIONAL 5
API Signature
DWORD GetFriendlyIfIndex(DWORD IfIndex);
- 인자:
IfIndex[in]: 하위호환 혹은 익숙한 인터페이스 인덱스에서의 인터페이스 인덱스 - 반환:
성공이면, NO_ERROR를 반환.
실패면, FormatMessage 함수로 메시지를 얻을 수 있다.
이걸 어떻게 쓰라는 거야 ㅡ.ㅡㅋ
DWORD GetIfEntry(PMIB_IFROW pIfRow);
- 인자:
pIfRow[in, out]: pIfRow에서 dwIndex를 설정하면, 해당 인터페이스 정보를 얻을 수 있다. - 반환:
성공이면, NO_ERROR를 반환.
실패면, FormatMessage 함수로 메시지를 얻을 수 있다.
DWORD GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder);
- 인자:
pIfTable[out]: 인터페이스 테이블 목록 버퍼 포인터 (MIB_IFTABLE 구조체)
pwdSize[in, out]: pIfTable 버퍼 크기, 버퍼가 충분하지 않으면 해당 버퍼 크기 값을 저장. 이때 ERROR_INSUFFICIENT_BUFFER를 리턴.
bOrder[in]: 인터페이스 테이블을 인덱스에 따라서 오름차순으로 정렬 여부 설정.(true이면 정렬) 특별한 경우가 아니면 정렬할 필요는 없다. - 반환:
함수가 성공이면, NO_ERROR 반환.
실패면, FormatMessage 함수로 메시지를 얻을 수 있다.
DWORD GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen);
- 인자:
pfIfTable[out]: 어뎁터 목록이 들어 있는 버퍼 포인터
dwOutBufLen[in,out]: GetIfTable의 pwdSize와 같다. 역시 버퍼가 충반하지 않으면 알맞는 버퍼크기를 설정한다. - 반환:
함수가 성공이면, NO_ERROR 반환.
실패면, FormatMessage 함수로 메시지를 얻을 수 있다.
DWORD GetNumberOfInterfaces( PDWORD pdwNumIf );
- 인자:
pwdNumIf[out]: 인터페이스 개수 - 반환:
함수가 성공이면, NO_ERROR 반환.
실패면, FormatMessage 함수로 메시지를 얻을 수 있다.
DWORD SetIfEntry( PMIB_IFROW pIfRow );
- 인자:
pIfRow[in]: pIfRow의 dwIndex에 해당하는 인터페이스에 관리 상태를 설정. dwAdminStatus 멤버에 새로운 관리 상태를 지정한다. - 반환:
함수가 성공이면, NO_ERROR 반환.
실패면, FormatMessage 함수로 메시지를 얻을 수 있다.
참조
[1] MSDN
History:
ospace 09.04.21 최초 작성, api 시그니처과 관련 구조체 등을 추가.
반응형
'4.개발 및 운영 환경' 카테고리의 다른 글
NSIS에서 윈도우 방화벽 제어 플러그인 (0) | 2009.07.16 |
---|---|
Eclipse용 Plugin (0) | 2009.06.19 |
Windows 버전 정보 (0) | 2009.04.13 |
실행시간 측정 (0) | 2009.04.13 |
VMWare대신 사용할 수 있는 coLinux (0) | 2009.04.06 |