[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 } |
沒有留言:
張貼留言