• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 讀取網卡的MAC地址

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    廣東深圳 溫衛江 ---- 在 實 際 的 應 用 系 統 中, 我 們 往 往 會 需 要 在 程 序 運 行 時 獲 取 當 前 機 器 的 網 卡 的MAC 地 址, 以 便 作 為 某 種 標 識 之 用, 如 控 制 程 序 的 合 法 性 等。 下 文 介 紹 如 何 用Microsoft Visual C + +

    廣東深圳 溫衛江  

    ---- 在 實 際 的 應 用 系 統 中, 我 們 往 往 會 需 要 在 程 序 運 行 時 獲 取 當 前 機 器 的 網 卡 的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 ", 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 ", uRetCode );
        if ( uRetCode == 0 )
        {
            // 把 網 卡MAC 地 址 格 式 化  成
    常 用 的16 進 制 形 式, 如0010 -A4E4 -5802
    printf( “The Ethernet Number[ %d] is:
    %02X %02X - %02X %02X - %02X %02X ",
                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 ", uRetCode );
           if ( uRetCode == 0 )
           {
           printf( “Ethernet Count is : %d ", lana_enum.length);

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

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

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

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>