PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

PLM之家PLMHome-国产软件践行者

[转载电子书] C++获得本机所有网卡MAC地址信息的实现方法

[复制链接]

2017-10-17 21:05:45 3384 0

admin 发表于 2017-10-17 21:05:45 |阅读模式

admin 楼主

2017-10-17 21:05:45

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
#include <WinSock2.h>
' \  ^( U& W# u#include <Iphlpapi.h>7 M* [" Z2 T1 I
#include <iostream>
" k$ y" `' P! ~2 G, k7 j5 gusing namespace std;
1 I: q" \+ k# s  Y#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
+ ~$ V: h' l9 j* p/ Z3 \4 H! C' |3 Q9 a
int main(int argc, char* argv[])0 }1 C$ a. ^5 Z/ q5 k; R
{
6 k6 r9 X8 F& ^. c: F, B7 }  //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
. _, J' U( o2 _  PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
/ u$ T# i2 |9 {" l8 g  //得到结构体大小,用于GetAdaptersInfo参数( Z5 Q' y+ w! I. U- N
  unsigned long stSize = sizeof(IP_ADAPTER_INFO);  \' Q) n' D" j8 L* x0 t! C
  //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量: d0 x! Q6 _% w8 C
  int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);5 ^4 s  K; z/ u1 W% ^
  //记录网卡数量4 Q$ n% h8 J4 [: p) s
  int neTCardNum = 0;
* g: Z* w4 ~8 m( ]/ m/ o% \9 M. g9 M  //记录每张网卡上的IP地址数量
( I0 U# a0 ~& n& R: x6 p8 S  int IPnumPerNetCard = 0;# p9 V3 R/ S$ s. k. R7 P
  if (ERROR_BUFFER_OVERFLOW == nRel)4 ]# F8 w+ p4 y; Z
  {' }% w! Z' ?% m9 @% l! f" ]
    //如果函数返回的是ERROR_BUFFER_OVERFLOW. {. p6 {3 \8 o8 K# ?: t& |- b. V
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小* i* ^8 r% `- A) U) L; @
    //这也是说明为什么stSize既是一个输入量也是一个输出量# c. ^. l5 }) y3 u9 t2 S4 c6 B
    //释放原来的内存空间4 U6 j, i, D! w! Z8 R8 z5 c+ m
    delete pIpAdapterInfo;
$ M- N" W2 G1 S' z    //重新申请内存空间用来存储所有网卡信息9 I% B3 z4 B" c1 F; h1 ~
    pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];9 x* _$ n, S8 O5 L
    //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
! _) r' o% c$ @# q' W. z2 r  f" D    nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);  
6 ]& X  Z" Y" L; r1 [% _/ P2 O  }& B, g- |: {9 b1 D6 j: D" [
  if (ERROR_SUCCESS == nRel)
* Z. F  E& `; ^$ c  {
* B& g! v$ b+ o8 X) z    //输出网卡信息
5 T& E' M) Q& n4 ^; P     //可能有多网卡,因此通过循环去判断1 b% `+ u8 `/ J' R( f. F4 }6 \: ?, l) J
  while (pIpAdapterInfo)  e0 c: _% v0 j' k- a9 P( L1 Q2 I
  {
/ A; m8 d& P% l, i, R+ p    cout<<"网卡数量:"<<++netCardNum<<endl;
$ `& p# k& ?! ]* v    cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
# ]! P+ f  I8 B$ Z  F+ K2 W" X! J    cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;" u9 M1 d* _2 N
    switch(pIpAdapterInfo->Type)  P2 G& W6 S5 b& g) O9 N
    {' W0 W4 G8 t  f$ u2 p3 Z
    case MIB_IF_TYPE_OTHER:
* a) U8 R) i1 I& }5 g      cout<<"网卡类型:"<<"OTHER"<<endl;6 ]/ x* N" x! x0 L0 j, [
      break;
7 O( G0 I/ w" U; |+ Q    case MIB_IF_TYPE_ETHERNET:
* n! h3 ~7 Q7 H0 S      cout<<"网卡类型:"<<"ETHERNET"<<endl;
7 Q- ^# s# L" E6 u2 E      break;, `0 O0 j3 r2 F# s) J6 Q
    case MIB_IF_TYPE_TOKENRING:
7 r: D! A: i# I6 ~4 @. M- p      cout<<"网卡类型:"<<"TOKENRING"<<endl;
% M4 j) D1 `% E      break;
' Z% V' P0 K/ E) c2 Y. [    case MIB_IF_TYPE_FDDI:! n) `8 x: I- d. x$ W9 F$ d, d) s
      cout<<"网卡类型:"<<"FDDI"<<endl;
9 s) v5 J% f) I5 }8 {      break;6 L/ ?  Y8 i5 W) S
    case MIB_IF_TYPE_PPP:+ b" `6 P3 u2 p5 y
      printf("PP\n");
* C0 Z/ N8 }' q6 {  c% C      cout<<"网卡类型:"<<"PPP"<<endl;! q! l/ I! E  f/ }! \( k
      break;
7 }& A0 U4 a8 |" Q' o0 r+ K    case MIB_IF_TYPE_LOOPBACK:- m8 ?7 E0 ~, ]0 q3 l" ^
      cout<<"网卡类型:"<<"LOOPBACK"<<endl;% _) t. q: P! x2 T5 r) Z* G$ ~$ ^
      break;
$ |* @. J' ~7 G% W    case MIB_IF_TYPE_SLIP:
; R4 w/ x5 z1 h" P: ~' Y      cout<<"网卡类型:"<<"SLIP"<<endl;) ?; z5 a2 ?$ A3 a4 T' `" n$ {; C
      break;( H  ]9 s$ G" v+ l
    default:
# m* Y% u9 H( h" t% L& A0 u5 ^4 k, k. t
      break;
. Y9 l! \1 B  E/ N! Y  U+ c9 T    }0 y- |9 h8 P4 Y4 p, R
    cout<<"网卡MAC地址:";; s% [7 \( G3 [
    for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
8 L+ \+ u7 Z% V3 s1 |      if (i < pIpAdapterInfo->AddressLength-1)
) _4 r4 Z  J, \! v+ ?& F      {
: B% E! B  f' j' I. q* L- U        printf("%02X-", pIpAdapterInfo->Address);: G+ H, {8 q& L7 }7 [  a  A* ~
      }
3 Y! C8 P7 p8 N2 [      else% `7 i8 ~9 A2 l2 d
      {
  b4 r, k7 f' Z7 x' T/ b- ^        printf("%02X\n", pIpAdapterInfo->Address);2 T+ q  h0 ^- c4 ~
      }7 e  `1 u. E2 W; f& E% `/ E) z  z4 G) Y
      cout<<"网卡IP地址如下:"<<endl;
$ Z# q4 y: V4 E; `      //可能网卡有多IP,因此通过循环去判断
( X  ]: S4 F) Z  I: s      IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
! D/ a1 S- I9 q      do1 x1 C1 ~5 |3 y/ K! x
      {4 U+ w' h; q/ b6 c
        cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;& c2 ]$ g, \/ d: m+ [# k: G8 P* b% X
        cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;" M- H$ b" n0 C) q( x; X
        cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;0 ]+ L4 J9 t: ]. z  _, u5 H
        cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
9 F* d. g! s. J1 S& |1 b& y, C3 H( Y5 t        pIpAddrString=pIpAddrString->Next;
) T% T$ R3 O1 j, S      } while (pIpAddrString);
% l9 T5 s. u" I2 X8 F$ r5 u8 r      pIpAdapterInfo = pIpAdapterInfo->Next;
, u+ j9 D$ ~$ E$ ~4 x      cout<<"--------------------------------------------------------------------"<<endl;8 w) V  s5 \! J8 g
  }- n. \) w/ \% N+ M) ^
   
- o9 \. J' M9 p0 J9 |+ u. U# Q  }
4 L7 r0 C& e) z+ M( ]* A  //释放内存空间
; E# [' r' u( |) K. k  if (pIpAdapterInfo)
9 [9 _3 l1 M1 C6 {6 L  {
+ g: [2 M# u7 @+ t+ H  p7 [    delete pIpAdapterInfo;
! X0 a; y, B! V9 F  }' i5 ~( j% Q" ]& c
  
" w* Q& T, E0 M7 Z8 L  g" G  return 0;
* X$ y2 o: J% l}  `& f* k; n6 h
4 d# n- ^( n' E4 u, z" m1 T3 H
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了