zoukankan      html  css  js  c++  java
  • 输出电脑的所有Mac地址


    #include "stdafx.h"
    #include <iostream.h>
    #include <string>
    #include <vector>
    #include "windows.h"
    using namespace std;

    //命令行输出缓冲大小
    const long MAX_COMMAND_SIZE = 10000;

    //获取MAC命令行
    char szFetCmd[] = "ipconfig /all";
    //网卡MAC地址的前导信息
    const string str4Search = "Physical Address. . . . . . . . . : ";

    //用命令行方式获取网卡MAC地址
    BOOL GetMacByCmd(char *lpszMac);

    ////////////////////////////////////////////////////////////////////////////
    // 函数名: GetMacByCmd(char *lpszMac)
    // 参数:
    //      输入: void
    //      输出: lpszMac,返回的MAC地址串
    // 返回值:
    //      TRUE:  获得MAC地址。
    //      FALSE: 获取MAC地址失败。
    // 过程:
    //      1. 创建一个无名管道。
    //      2. 创建一个IPCONFIG 的进程,并将输出重定向到管道。
    //      3. 从管道获取命令行返回的所有信息放入缓冲区lpszBuffer。
    //      4. 从缓冲区lpszBuffer中获得抽取出MAC串。
    //
    //  提示:可以方便的由此程序获得IP地址等其他信息。
    //        对于其他的可以通过其他命令方式得到的信息只需改变strFetCmd 和
    //        str4Search的内容即可。
    ///////////////////////////////////////////////////////////////////////////

    BOOL GetMacByCmd(char *lpszMac)
    {
     //初始化返回MAC地址缓冲区
     memset(lpszMac, 0x00, sizeof(lpszMac));
     BOOL bret;

     SECURITY_ATTRIBUTES sa;
        HANDLE hReadPipe,hWritePipe;

        sa.nLength = sizeof(SECURITY_ATTRIBUTES);
        sa.lpSecurityDescriptor = NULL;
        sa.bInheritHandle = TRUE;
     
     //创建管道
     bret = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
     if(!bret)
     {
      return FALSE;
     }

     //控制命令行窗口信息
     STARTUPINFO si;
     //返回进程信息
        PROCESS_INFORMATION pi;

        si.cb = sizeof(STARTUPINFO);
        GetStartupInfo(&si);
        si.hStdError = hWritePipe;
        si.hStdOutput = hWritePipe;
        si.wShowWindow = SW_HIDE; //隐藏命令行窗口
        si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

     //创建获取命令行进程
     bret = CreateProcess (NULL, szFetCmd, NULL, NULL, TRUE, 0, NULL,
          NULL, &si, &pi );
     
     char szBuffer[MAX_COMMAND_SIZE+1]; //放置命令行输出缓冲区
     string strBuffer;
     vector<string> strBuffers;
     if (bret)
     {
      WaitForSingleObject (pi.hProcess, INFINITE);
      unsigned long count;
      CloseHandle(hWritePipe);

      memset(szBuffer, 0x00, sizeof(szBuffer));
      bret  =  ReadFile(hReadPipe,  szBuffer,  MAX_COMMAND_SIZE,  &count,  0);
      if(!bret)
      {
       //关闭所有的句柄
       CloseHandle(hWritePipe);
       CloseHandle(pi.hProcess);
       CloseHandle(pi.hThread);
       CloseHandle(hReadPipe);
       return FALSE;
      }
      else
      {
       strBuffer = szBuffer;
       long ipos = 0 ;

       while(1)
       {
        ipos = 0;
        ipos = strBuffer.find(str4Search,ipos);
        if(ipos == -1)
         break;
        //提取MAC地址串
        strBuffer = strBuffer.substr(ipos+str4Search.length());
        int ipos1 = strBuffer.find("\n");
        strBuffers.push_back(strBuffer.substr(0, ipos1));
        cout << strBuffers[strBuffers.size()-1].c_str();
        cout << endl;
       }
      }
     
     }
     memset(szBuffer, 0x00, sizeof(szBuffer));
     strcpy(szBuffer, strBuffers[0].c_str());

     //去掉中间的“00-50-EB-0F-27-82”中间的'-'得到0050EB0F2782
     int j = 0;
     for(int i=0; i<strlen(szBuffer); i++)
     {
      if(szBuffer[i] != '-')
      {
       lpszMac[j] = szBuffer[i];
       j++;
      }
     }

     //关闭所有的句柄
     CloseHandle(hWritePipe);
     CloseHandle(pi.hProcess);
     CloseHandle(pi.hThread);
     CloseHandle(hReadPipe);
     return TRUE;

    }

    extern BOOL GetMacByCmd(char *lpszMac);


    void main (int argc, char *argv[])
    {
     char lpszMac[128];
     memset(lpszMac, 0x00, sizeof(lpszMac));

     //获取MAC
     GetMacByCmd(lpszMac);

     //打印出MAC
     cout << lpszMac << endl;

    //写入文件
     FILE *fp = NULL;
     fp = fopen("c:\\1.txt", "w");
     fwrite(lpszMac, sizeof(char), strlen(lpszMac), fp);
     fclose(fp);
    }

  • 相关阅读:
    2020.04.11【NOIP普及组】模拟赛C组25总结
    【华为云技术分享】云图说 | 容器交付流水线ContainerOps,提升持续交付效率
    【USACO 2020 January Silver】Wormhole Sort 题解
    【华为云技术分享】计算python程序执行时间
    HTAP会成为数据库的未来吗?
    【华为云技术分享】现代富文本编辑器Quill的模块化机制
    Cow Evolution 题解
    【USACO 2020 January Silver】Loan Repayment
    VS2012 黑色护眼主题
    常用的正则表达式
  • 原文地址:https://www.cnblogs.com/pbreak/p/1734085.html
Copyright © 2011-2022 走看看