2012年3月20日 星期二

[VC(Visual C++) ]- 抓取網卡MAC

[VC(Visual C++) ]- 抓取網卡MAC



本篇分享抓取網卡MAC範例有興趣的(C/P)同好歡迎來http://filemarkets.com/file/jashliao/b4c7a9b3/索取因為我不會上傳檔案分享哈哈 ^ ^












主要程式碼



001    // ShowMACDlg.cpp : implementation file                

002    //                

003                    

004    #include "stdafx.h"                

005    #include "ShowMAC.h"                

006    #include "ShowMACDlg.h"                

007    ////////////////////////////                

008    #include < windows.h >                

009    #include < wincon.h >                

010    #include < stdlib.h >                

011    #include < stdio.h >                

012    #include < time.h >                

013    #include < nb30.h >                

014    ///////////////////////////                

015    #ifdef _DEBUG                

016    #definenew DEBUG_NEW                

017    #undef THIS_FILE                

018    staticchar THIS_FILE[] = __FILE__;                

019    #endif                

020    /////////////////////////////////////////////////                

021    typedefstruct _ASTAT_{                    

022        ADAPTER_STATUS adapt;                

023        NAME_BUFFER    NameBuff [30];            

024    }ASTAT, * PASTAT;                

025    ASTAT Adapter;                

026    /////////////////////////////////////////////////                

027    /////////////////////////////////////////////////////////////////////////////                

028    // CAboutDlg dialog used for App About                

029                    

030    class CAboutDlg : public CDialog                

031    {                

032    public:                

033        CAboutDlg();            

034                    

035    // Dialog Data                

036        //{{AFX_DATA(CAboutDlg)            

037        enum { IDD = IDD_ABOUTBOX };            

038        //}}AFX_DATA            

039                    

040        // ClassWizard generated virtual function overrides            

041        //{{AFX_VIRTUAL(CAboutDlg)            

042        protected:            

043        virtualvoid DoDataExchange(CDataExchange* pDX);    // DDX/DDV support            

044        //}}AFX_VIRTUAL            

045                    

046    // Implementation                

047    protected:                

048        //{{AFX_MSG(CAboutDlg)            

049        //}}AFX_MSG            

050        DECLARE_MESSAGE_MAP()            

051    };                

052                    

053    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)                

054    {                

055        //{{AFX_DATA_INIT(CAboutDlg)            

056        //}}AFX_DATA_INIT            

057    }                

058                    

059    void CAboutDlg::DoDataExchange(CDataExchange* pDX)                

060    {                

061        CDialog::DoDataExchange(pDX);            

062        //{{AFX_DATA_MAP(CAboutDlg)            

063        //}}AFX_DATA_MAP            

064    }                

065                    

066    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)                

067        //{{AFX_MSG_MAP(CAboutDlg)            

068            // No message handlers        

069        //}}AFX_MSG_MAP            

070    END_MESSAGE_MAP()                

071                    

072    /////////////////////////////////////////////////////////////////////////////                

073    // CShowMACDlg dialog                

074                    

075    CShowMACDlg::CShowMACDlg(CWnd* pParent /*=NULL*/)                

076        : CDialog(CShowMACDlg::IDD, pParent)            

077    {                

078        //{{AFX_DATA_INIT(CShowMACDlg)            

079        m_MAC = _T("");            

080        //}}AFX_DATA_INIT            

081        // Note that LoadIcon does not require a subsequent DestroyIcon in Win32            

082        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);            

083    }                

084                    

085    void CShowMACDlg::DoDataExchange(CDataExchange* pDX)                

086    {                

087        CDialog::DoDataExchange(pDX);            

088        //{{AFX_DATA_MAP(CShowMACDlg)            

089        DDX_Text(pDX, IDC_EDIT1, m_MAC);            

090        //}}AFX_DATA_MAP            

091    }                

092                    

093    BEGIN_MESSAGE_MAP(CShowMACDlg, CDialog)                

094        //{{AFX_MSG_MAP(CShowMACDlg)            

095        ON_WM_SYSCOMMAND()            

096        ON_WM_PAINT()            

097        ON_WM_QUERYDRAGICON()            

098        ON_BN_CLICKED(IDC_BUTTON1, OnButton1)            

099        //}}AFX_MSG_MAP            

100    END_MESSAGE_MAP()                

101                    

102    /////////////////////////////////////////////////////////////////////////////                

103    // CShowMACDlg message handlers                

104                    

105    BOOL CShowMACDlg::OnInitDialog()                

106    {                

107        CDialog::OnInitDialog();            

108                    

109        // Add "About..." menu item to system menu.            

110                    

111        // IDM_ABOUTBOX must be in the system command range.            

112        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);            

113        ASSERT(IDM_ABOUTBOX < 0xF000);            

114                    

115        CMenu* pSysMenu = GetSystemMenu(FALSE);            

116        if (pSysMenu != NULL)            

117        {            

118            CString strAboutMenu;        

119            strAboutMenu.LoadString(IDS_ABOUTBOX);        

120            if (!strAboutMenu.IsEmpty())        

121            {        

122                pSysMenu->AppendMenu(MF_SEPARATOR);    

123                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);    

124            }        

125        }            

126                    

127        // Set the icon for this dialog.  The framework does this automatically            

128        //  when the application's main window is not a dialog            

129        SetIcon(m_hIcon, TRUE);            // Set big icon

130        SetIcon(m_hIcon, FALSE);        // Set small icon    

131                    

132        // TODO: Add extra initialization here            

133                    

134        return TRUE;  // return TRUE  unless you set the focus to a control            

135    }                

136                    

137    void CShowMACDlg::OnSysCommand(UINT nID, LPARAM lParam)                

138    {                

139        if ((nID & 0xFFF0) == IDM_ABOUTBOX)            

140        {            

141            CAboutDlg dlgAbout;        

142            dlgAbout.DoModal();        

143        }            

144        else            

145        {            

146            CDialog::OnSysCommand(nID, lParam);        

147        }            

148    }                

149                    

150    // If you add a minimize button to your dialog, you will need the code below                

151    //  to draw the icon.  For MFC applications using the document/view model,                

152    //  this is automatically done for you by the framework.                

153                    

154    void CShowMACDlg::OnPaint()                 

155    {                

156        if (IsIconic())            

157        {            

158            CPaintDC dc(this); // device context for painting        

159                    

160            SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);        

161                    

162            // Center icon in client rectangle        

163            int cxIcon = GetSystemMetrics(SM_CXICON);        

164            int cyIcon = GetSystemMetrics(SM_CYICON);        

165            CRect rect;        

166            GetClientRect(&rect);        

167            int x = (rect.Width() - cxIcon + 1) / 2;        

168            int y = (rect.Height() - cyIcon + 1) / 2;        

169                    

170            // Draw the icon        

171            dc.DrawIcon(x, y, m_hIcon);        

172        }            

173        else            

174        {            

175            CDialog::OnPaint();        

176        }            

177    }                

178                    

179    // The system calls this to obtain the cursor to display while the user drags                

180    //  the minimized window.                

181    HCURSOR CShowMACDlg::OnQueryDragIcon()                

182    {                

183        return (HCURSOR) m_hIcon;            

184    }                

185                    

186    void CShowMACDlg::OnButton1()                 

187    {                

188        // TODO: Add your control notification handler code here            

189        NCB Ncb;            

190        UCHAR uRetCode;                

191        //char NetName[50];                

192        LANA_ENUM lenum;                

193        int i;                

194        char sMacAddress[100];            

195        memset( &Ncb, 0, sizeof(Ncb) );                

196        Ncb.ncb_command = NCBENUM;                

197        Ncb.ncb_buffer = (UCHAR *)&lenum;                

198        Ncb.ncb_length = sizeof(lenum);                

199        uRetCode = Netbios( &Ncb );                

200        for(i=0; i < lenum.length ;i++)                

201        {                

202            memset( &Ncb, 0, sizeof(Ncb) );        

203            Ncb.ncb_command = NCBRESET;        

204            Ncb.ncb_lana_num = lenum.lana[i];        

205            uRetCode = Netbios( &Ncb );        

206                    

207            memset( &Ncb, 0, sizeof (Ncb) );        

208            Ncb.ncb_command = NCBASTAT;        

209            Ncb.ncb_lana_num = lenum.lana[i];        

210                    

211            strcpy( (char*)Ncb.ncb_callname, "* " );        

212            Ncb.ncb_buffer = (unsignedchar *) &Adapter;        

213            Ncb.ncb_length = sizeof(Adapter);        

214            uRetCode = Netbios( &Ncb );        

215        }            

216        if ( uRetCode == 0 )            

217        {            

218         sprintf(sMacAddress, "MAC : %02x-%02x-%02x-%02x-%02x-%02x\n",                

219         Adapter.adapt.adapter_address[0],                

220         Adapter.adapt.adapter_address[1],                

221         Adapter.adapt.adapter_address[2],                

222         Adapter.adapt.adapter_address[3],                

223         Adapter.adapt.adapter_address[4],                

224         Adapter.adapt.adapter_address[5] );                

225                    

226        }            

227        UpdateData(true);            

228            m_MAC=sMacAddress;        

229        UpdateData(false);            

230    }


 


沒有留言:

張貼留言