我试图获取所有可用无线网络的MAC地址。
目前正在使用:
netsh wlan show networks mode=bssid | findstr 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 regex以仅获取阵列中的MAC地址吗? 我的目的是将这些MAC地址传递给谷歌地理定位API并获取位置。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
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 ......命令。
答案 1 :(得分:0)
您可以使用此方法在字符:
处“拆分”字符串(假设您可以将命令的输出保存到文件c:\ temp \ mac.txt)
for /f "tokens=2,* delims=:" %%i in (c:\temp\mac.txt) do echo %%i:%%j
或者你可以做(我无法测试)
for /f "tokens=2,* delims=:" %%i in ('netsh wlan show networks mode=bssid ^| findstr BSSID') do echo %%i:%%j
答案 2 :(得分:0)
我终于成功了。 这是我使用的代码片段:
#include <iostream>
#include <string>
#include <stdio.h> // for _popen() and _pclose()
#include <regex>
#include <iterator>
using namespace std;
int main()
{
char buff[512];
buff[0]=0;
string MacOutput;
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;
while(fgets(buff,sizeof(buff),fpipe)!=NULL){
string temp = string(buff);
MacOutput.append(temp);
}
_pclose(fpipe);
regex mac_regex("([0-9a-f]{2}[:-]){5}[0-9a-f]{2}");
auto words_begin =
sregex_iterator(MacOutput.begin(), MacOutput.end(), mac_regex);
auto words_end = sregex_iterator();
int j=0;
for (sregex_iterator i = words_begin; i != words_end; ++i) {
smatch match = *i;
string match_str = match.str(); //Can store the outputs in an array here!
cout << match_str << '\n';
}
}
感谢所有帮助过的人! &安培;那些我在整个stackoverflow中使用过它的片段!