|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: x% P4 f9 V8 m- ?9 J% u2 q
( j$ G$ o0 Y$ _6 L* q' H! |
4 W4 x4 H! Z4 V' P' z// 头文件包含: g- R. | d0 Q. a m( c
#include "stdafx.h"
# h0 S2 H9 x! S#include <WinSock2.h>
2 T* @# A5 u" G7 z#include <Iphlpapi.h>9 }' X% c" ~% k8 c- w! @
#include <iostream>+ [ ~4 | M) y- ?9 G: F
using namespace std;+ K6 L' H- H( t) `. u+ G' @
// 函数声明
, i0 P- u. }( F5 \8 T* cvoid output(PIP_ADAPTER_INFO pIpAdapterInfo);" M! }3 Y) o3 o3 |3 w) }& W
// 程序入口
7 n* A- F1 z4 X* R1 j8 Fint _tmain(int argc, _TCHAR* argv[])/ w: u$ v7 Z" u( ?
{
( q4 S' t) S% |5 B3 w' z //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
4 ^/ R$ B" d( ?! Y3 M PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
6 u% Z9 }# i5 u //得到结构体大小,用于GetAdaptersInfo参数$ ~) s" W* `" p+ \$ N0 s1 z0 b
unsigned long stSize = sizeof(IP_ADAPTER_INFO);! i1 d) [- j, l" k/ U1 x1 L
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量 I/ N: C& U+ }8 {' D$ Y
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
; C6 p. O. i1 m) N if (ERROR_BUFFER_OVERFLOW==nRel)
" l- e j' W" A8 G& ]/ c {
6 b7 B& o2 d6 I //如果函数返回的是ERROR_BUFFER_OVERFLOW5 Y& H( u; N* i0 Z
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小8 A8 x. z7 T+ | Z/ Q# {
//这也是说明为什么stSize既是一个输入量也是一个输出量
5 p" s& a! B8 g ^7 l* @. D. Y //释放原来的内存空间1 l. \& [* V; ]- B, v
delete pIpAdapterInfo;! Y% t7 ^& G1 V
//重新申请内存空间用来存储所有网卡信息
- k; M) M/ C2 f3 ?8 t3 N( L pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
% g) ?$ e* _3 {2 a4 o( i //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
1 u) b% X3 f/ s nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
9 J {& S. V7 ~& T+ \" O* _$ s+ l: ]. U }3 ?+ Q# k& l' _* i0 u l
if (ERROR_SUCCESS==nRel)# @( Z u: @! Z8 P
{
; m9 h+ Z J+ p( [ //输出网卡信息9 ` _; T/ ?/ M' [7 J" c/ F# S
output(pIpAdapterInfo);2 x, N5 |3 w( o
}, w: O9 e7 w* [7 j# i3 @* ^& _
//释放内存空间+ i1 D* x ]3 }* ~4 {
if (pIpAdapterInfo)
% \1 k. u5 O% F {$ v0 S% e& k* c
delete pIpAdapterInfo;3 ]8 Z2 F$ Y8 u+ V" m- z+ b2 j
}
; V. y7 q* D1 [0 W! x6 j) { getchar();: D# d7 b& Q6 P, m9 F; k
return 0;' }1 e0 }1 [8 R# a' \3 B* I# V
}1 W! { M# w- Z9 E1 `% o" c* V
///函数作用,输出网卡信息- O: P5 g2 l% f
void output(PIP_ADAPTER_INFO pIpAdapterInfo)4 `$ Q4 x$ }+ Q0 I- A; O, \
{
) ?- d5 r! X: g6 z* X //可能有多网卡,因此通过循环去判断5 n p* {) o" i0 i" N8 z- X$ h
while (pIpAdapterInfo)
1 h: [/ X! R' G- d {
6 t4 {. g6 A& S# U- m, B7 _ cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
# t/ U7 U; w8 C+ \3 {7 p& v cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
, B( i* H/ b5 j6 s$ I! p cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;$ M- J8 Y [2 _" o7 b5 a
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)+ h& F0 S- o* W+ Z
if (i==pIpAdapterInfo->AddressLength-1)
' n) j, g- j6 y) U2 I$ M+ Q {
! d( L( u7 C, r printf("%02x\n", pIpAdapterInfo->Address);
/ N" y8 G4 S8 Q }3 N. L5 w0 j2 `% B: o/ {
else0 Q) p4 h2 Q, U- Q
{
* i p8 X$ q$ |2 q) P/ A printf("%02x-", pIpAdapterInfo->Address);# n; p) ^) y+ w6 m) _# F4 J
}! J$ i4 `: R3 _* q0 L+ \
cout<<"网卡IP地址如下:"<<endl;% j3 S( p4 p/ W0 _( O: N, b3 F
//可能网卡有多IP,因此通过循环去判断
9 |# W( L1 y; R2 n/ z IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
- a, c& A6 }2 G/ Q do $ @5 N1 o! ^; @, e5 ^+ W, q! u
{% z. g+ k r/ k: X
cout<<pIpAddrString->IpAddress.String<<endl;
* u, y0 K- `+ U0 k pIpAddrString=pIpAddrString->Next;* u5 c' G# U+ }0 c. y
} while (pIpAddrString);
) M4 Z/ `2 X& ~/ w. \ pIpAdapterInfo = pIpAdapterInfo->Next;
; A2 |+ X. l1 T3 g- C cout<<"*****************************************************"<<endl;( ~, ]3 L/ @" b! b
}
2 Y$ ~ r* {7 k; e+ z7 m5 K return;, p1 d6 T1 H# X% b& P0 E1 B
}
9 J" `2 |# r# h$ c) R0 y |
|