|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
' w! x0 l# P7 S8 c2 L' C$ u& |1 D1 ]+ a2 b
0 {2 x3 k! c) {// 头文件包含
. P* N9 T. M4 ?#include "stdafx.h"
% ~" g! ~2 q7 P k#include <WinSock2.h>
' a2 w/ m$ W3 a6 B- |' ~' d#include <Iphlpapi.h>
( _1 w7 W( _! w5 S* P; A( L0 i#include <iostream>: y! x) c& c' X+ z
using namespace std;
$ q$ S- \. ~- r2 T2 T! |// 函数声明
, H6 H/ z, E3 m: @ k& [8 j8 E7 a4 g) Cvoid output(PIP_ADAPTER_INFO pIpAdapterInfo);
# w" S" J9 K' q! s: Z( V# S8 M// 程序入口
, P: _% l5 S9 p' k( [1 Cint _tmain(int argc, _TCHAR* argv[])
; i' V4 [0 z$ Y$ \9 e{# D# z# K1 K6 \" y
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
. l! i1 q+ K8 ?0 X PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();% x: t3 b; R2 _$ i9 n
//得到结构体大小,用于GetAdaptersInfo参数
. V: u6 g. Y6 r, h L unsigned long stSize = sizeof(IP_ADAPTER_INFO);
3 }: ^ o$ B3 o. r( o6 S5 L L8 u7 v //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量3 e( k+ U+ ?4 L; z4 ?7 Q" E5 W
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);8 e! x# T+ P* f5 X9 Q( R
if (ERROR_BUFFER_OVERFLOW==nRel)1 R" ?0 y) j% A1 Q3 B' ~
{; t5 K7 v6 o* {! Q* ~. ~
//如果函数返回的是ERROR_BUFFER_OVERFLOW
3 s/ P1 ?6 W$ h: V //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小. Z* j& x" {" R; x
//这也是说明为什么stSize既是一个输入量也是一个输出量
% q, G5 G/ U; S4 k L' K //释放原来的内存空间
L0 D2 z4 G }3 C3 Z: K, F4 b- _ delete pIpAdapterInfo;2 |3 K ~% t! }8 F0 \' r2 R
//重新申请内存空间用来存储所有网卡信息% n/ `/ S9 ?3 ]6 W- c9 o
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize]; Q! e2 @. Z6 ~8 m- z
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量9 _, U% d! L9 p2 ^
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
, Z K1 c, C. f0 R& T }
8 S! M6 D: \% B9 j3 \1 N) t9 f% Q if (ERROR_SUCCESS==nRel)
. R2 S: h+ b' j8 W8 _$ I3 g2 m# U {
6 t2 {; y- S' r& I //输出网卡信息
9 z( T- ^( [ I output(pIpAdapterInfo);
) o7 c. P }# s8 w }7 s) C1 I( a* m& {; Z% j
//释放内存空间
$ H% m* [; D$ b7 m if (pIpAdapterInfo)1 e' L1 D& Y" c! }# D3 e9 I% p
{
1 g% k8 z% R$ ^ ~. q! C% K delete pIpAdapterInfo;% i N0 i# L9 O) q, }( i' p2 S
}
7 p% f6 b, _7 c, Z getchar();1 ?( A" J" i3 A/ V* c6 T. g8 v
return 0;
( S9 ]: m2 _" }" s( G5 q}; j' U, j, F) f8 x& C' Y5 K
///函数作用,输出网卡信息
8 f! j2 [+ u4 }5 lvoid output(PIP_ADAPTER_INFO pIpAdapterInfo)7 h8 s t& X# L# p! N
{
) u9 {4 [% y0 T //可能有多网卡,因此通过循环去判断4 ^# d; n/ w- H5 E
while (pIpAdapterInfo)5 {& r0 B" H6 @3 V, h1 b
{8 T+ {/ _3 j/ Q+ E, l# m
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
- u3 j5 d0 G$ t1 U( I cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
) s, n" z H. J! c7 ~1 x) l cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;0 A( l0 ~5 K8 z- D$ f
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)' \) O6 S/ W" t' ]' [5 I- \0 b8 k
if (i==pIpAdapterInfo->AddressLength-1); l7 ^3 M8 J& A1 s: k5 k1 Y
{5 l4 ~( v: ^7 R& } c
printf("%02x\n", pIpAdapterInfo->Address);
1 {* T# h$ M0 N+ O0 t3 y }
1 Q( r( H- K) p else# D9 I1 p: a1 d8 Z' ]7 {6 S
{
I" D, f+ Y( @1 M printf("%02x-", pIpAdapterInfo->Address);
4 C( z$ B1 K! d! }0 G p }7 b8 A9 X) L" e: b( V! \; R! F
cout<<"网卡IP地址如下:"<<endl;
) O2 n w0 d+ L3 f5 i) a( c# N //可能网卡有多IP,因此通过循环去判断* }1 K: A/ {& Y% p* R e
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);) |: u' \7 O+ ~! O
do
j- I! R9 S6 m9 g# T {
& p' X' N, n, I* I cout<<pIpAddrString->IpAddress.String<<endl;
& N% I; p! Q2 E$ V1 l pIpAddrString=pIpAddrString->Next;
) }" K) v% w& b0 `( w- L# Y } while (pIpAddrString);
8 j/ Q' i) o1 e pIpAdapterInfo = pIpAdapterInfo->Next;7 X0 \+ k- U5 o' h9 {
cout<<"*****************************************************"<<endl;& K" l5 O i! `* m
}- L/ Q1 u; b1 q1 J b
return;
) k* y% w# }0 p/ ~; B6 X: P. }}1 d; E, W' g+ W. A
|
|