c++ - 正则表达式从 netsh wlan 获取 MAC 地址

标签 c++ regex windows boost bssid

我正在尝试获取周围所有可用无线网络的 MAC 地址。

目前正在使用: netsh wlan 显示网络模式=bssid |找到str BSSID

我得到的输出(为了隐私隐藏了真正的 MAC):

BSSID 1                 : 2c:ab:25:xx:xx:xx
BSSID 1                 : 00:22:2d:xx:xx:xx
BSSID 1                 : c4:3d:c7:xx:xx:xx
BSSID 1                 : 00:27:22:xx:xx:xx
BSSID 1                 : 84:c9:b2:xx:xx:xx
BSSID 1                 : 00:25:5e:xx:xx:xx
BSSID 1                 : 00:06:5a:xx:xx:xx
BSSID 2                 : 00:06:5a:xx:xx:xx
BSSID 1                 : 00:06:5a:xx:xx:xx
BSSID 2                 : 00:06:5a:xx:xx:xx
BSSID 1                 : 00:06:5a:xx:xx:xx
BSSID 2                 : 00:06:5a:xx:xx:xx
BSSID 1                 : 00:06:5a:xx:xx:xx
BSSID 2                 : 00:06:5a:xx:xx:xx
BSSID 3                 : 00:25:5e:xx:xx:xx
BSSID 4                 : 00:25:5e:xx:xx:xx
BSSID 5                 : 00:25:5e:xx:xx:xx
BSSID 1                 : 00:27:22:xx:xx:xx
BSSID 1                 : 00:27:22:xx:xx:xx
BSSID 1                 : fc:b0:c4:xx:xx:xx
BSSID 1                 : fc:b0:c4:xx:xx:xx

我需要实现一个只能输出 MAC 地址的正则表达式(即每行的最后 17 个字符) 需要在 C++ 中将 MAC 地址存储在数组中。

我当前的代码是这样获取输出的:

#include <iostream>
#include <string>
#include <stdio.h>  // for _popen() and _pclose()
using namespace std;

    int main()
    {
        char buff[512];
        buff[0]=0;
        string cmd="netsh wlan show networks mode=bssid | findstr BSSID";
        FILE *fpipe = _popen(cmd.c_str(),"rt");

        if(fpipe==NULL)
            cout<<"Failed to open"<<endl;
        else
            cout<<"Opened pipe successfully";
        while(fgets(buff,sizeof(buff),fpipe)!=NULL){
            cout<<buff<<endl;
        }

        _pclose(fpipe);
    }

有人可以为我提供一个代码片段来实现 boost 正则表达式以仅获取数组中的 MAC 地址吗? 我的目的是将这些 MAC 地址传递给 google geo-locate API 并获取位置。

有什么想法吗?

谢谢!

最佳答案

哦 - Kayasax 太近了!问题是输出有一个前导空格....

FOR /f "tokens=1*delims=:" %%a IN (c:\temp\mac.txt) DO (
 FOR /f "tokens=*" %%c IN ("%%b") DO ECHO %%c)

应该删除那个空间。

以 Kayasax 建议的方式用 netsh 命令替换文件名也应该适用于此...

FOR /f "tokens=1*delims=:" %%a IN (
'netsh wlan show networks mode=bssid ^| findstr BSSID') DO (
 FOR /f "tokens=*" %%c IN ("%%b") DO ECHO %%c)

您知道 - Kayasax 提倡的 netsh... 命令。

关于c++ - 正则表达式从 netsh wlan 获取 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21228948/

相关文章:

c++ - 我如何告诉编译器 MyCustomType 是quality_comparable_with SomeOtherType?

c++ - 如何摆脱 Djinni 生成的不必要函数 - ToString (in Java)/Description (in Objc)?

c++ - 形状不匹配,同时从 caffe 中自己训练的网络复制权重

regex - 查找缺少 0 的电话号码

javascript - 正则表达式 - 如何过滤数字和 "-"?

匹配 *RandomName($variable1, $variable2) 的正则表达式

c++ - 是否可以在编译时获取时间(当天)和日期?

windows - Emacs 23.1.50.1 在 Windows XP 上随机挂起 6-8 秒

c++ - 使用采用指向对象基类的函数在 shared_ptr 的 vector 上使用累积

c++ - Windows Vista+ IFileOpenDialog 和大堆栈的内存问题