<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      讀取網卡的MAC地址

      [摘要]廣東深圳 溫衛江 ---- 在 實 際 的 應 用 系 統 中, 我 們 往 往 會 需 要 在 程 序 運 行 時 獲 取 當 前 機 器 的 網 卡 的MAC 地 址, 以 便 作 為 某 種 標 識 之 用, 如 控 制 程 序 的 合 法 性 等。 下 文 介 紹 如 何 用Micro...

      廣東深圳 溫衛江  

      ---- 在 實 際 的 應 用 系 統 中, 我 們 往 往 會 需 要 在 程 序 運 行 時 獲 取 當 前 機 器 的 網 卡 的MAC 地 址, 以 便 作 為 某 種 標 識 之 用, 如 控 制 程 序 的 合 法 性 等。 下 文 介 紹 如 何 用Microsoft Visual C + + 6.0 開 發 這 樣 的 程 序。

      ----這 里 采 用 的 方 法 是 通 過Windows 9x/NT/Win2000 中 內 置 的NetApi32.DLL 的 功 能 來 實 現 的。 首 先 通 過 發 送 NCBENUM 命 令, 獲 取 網 卡 的 數 目 和 每 張 網 卡 的 內 部 編 號, 然 后 對 每 個 網 卡 標 號 發 送NCBASTAT 命 令 獲 取 其MAC 地 址。 注 意: 這 里 的 網 卡 是 指 捆 綁 了NetBEIU 協 議 的 通 信 協 議 棧, 可 以 在 網 卡 的 屬 性 處 查 看 到。

      ----請 運 行VC + +, 打 開 一 個 新 的 工 程, 選 擇 創 建 一 個Win32 Console 程 序, 然 后 按 下 文 輸 入 代 碼, 并 請 參 見 其 中 的 注 釋:

      #include “stdafx.h"

      #include
      #include
      #include
      #include
      #include

      // 因 為 是 通 過NetAPI 來 獲 取 網 卡 信 息,
      所 以 需 要 包 含 其 題 頭 文 件nb30.h
      #include

      typedef struct _ASTAT_
      {
          ADAPTER_STATUS adapt;
          NAME_BUFFER    NameBuff [30];
      }ASTAT, * PASTAT;

      ASTAT Adapter;
      // 定 義 一 個 存 放 返 回 網 卡 信 息 的 變 量

      // 輸 入 參 數:lana_num 為 網 卡 編 號,
      一 般 地, 從0 開 始, 但 在Windows 2000 中
      并 不 一 定 是 連 續 分 配 的
      void getmac_one (int lana_num)
      {
          NCB ncb;
          UCHAR uRetCode;

          memset( &ncb, 0, sizeof(ncb) );
          ncb.ncb_command = NCBRESET;
      ncb.ncb_lana_num = lana_num;    
      // 指 定 網 卡 號

      // 首 先 對 選 定 的 網 卡 發 送 一 個
      NCBRESET 命 令, 以 便 進 行 初 始 化
          uRetCode = Netbios( &ncb );
      printf( “The NCBRESET
      return code is: 0x %x \n", uRetCode );

          memset( &ncb, 0, sizeof(ncb) );
          ncb.ncb_command = NCBASTAT;
          ncb.ncb_lana_num = lana_num;   // 指 定 網 卡 號

      strcpy((char *)ncb.ncb_callname,“ *      " );   
      ncb.ncb_buffer = (unsigned char *) &Adapter;      
      // 指 定 返 回 的 信 息 存 放 的 變 量
          ncb.ncb_length = sizeof(Adapter);

      // 接 著, 可 以 發 送NCBASTAT 命 令
      以 獲 取 網 卡 的 信 息
          uRetCode = Netbios( &ncb );
      printf( “The NCBASTAT return code is:
      0x %x \n", uRetCode );
          if ( uRetCode == 0 )
          {
              // 把 網 卡MAC 地 址 格 式 化  成
      常 用 的16 進 制 形 式, 如0010 -A4E4 -5802
      printf( “The Ethernet Number[ %d] is:
      %02X %02X - %02X %02X - %02X %02X\n",
                  lana_num,
                  Adapter.adapt.adapter_address[0],
                  Adapter.adapt.adapter_address[1],
                  Adapter.adapt.adapter_address[2],
                  Adapter.adapt.adapter_address[3],
                 Adapter.adapt.adapter_address[4],
                 Adapter.adapt.adapter_address[5] );
          }
      }

      int main(int argc, char * argv[])
      {
          NCB ncb;
          UCHAR uRetCode;
          LANA_ENUM lana_enum;

          memset( &ncb, 0, sizeof(ncb) );
          ncb.ncb_command = NCBENUM;

          ncb.ncb_buffer = (unsigned char *) &lana_enum;
          ncb.ncb_length = sizeof(lana_enum);

         // 向 網 卡 發 送NCBENUM 命 令,
         以 獲 取 當 前 機 器 的 網 卡 信 息,
         如 有 多 少 個 網 卡、 每 張 網 卡 的 編 號 等
          uRetCode = Netbios( &ncb );
      printf( “The NCBENUM return code is:
           0x %x \n", uRetCode );
             if ( uRetCode == 0 )
             {
             printf( “Ethernet Count is : %d\n\n", lana_enum.length);

             // 對 每 一 張 網 卡, 以 其 網 卡 編 號 為
               輸 入 編 號, 獲 取 其MAC 地 址
             for ( int i=0; i

      ----此 時, 按F7 編 譯, 按F5 運 行 即 可。

      ----這 段 代 碼 可 以 直 接 嵌 入 相 關 的 應 用 系 統 之 中, 或 封 裝 成.DLL 或COM 控 件, 以 便 可 以 在Visual Basic、Visual Foxpro、Power Builder 或Delphi 等 其 他 程 序 中 調 用。


      日韩精品一区二区三区高清