0

利用可能なすべてのワイヤレス ネットワークの 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 文字) のみを出力できる正規表現を実装する必要があります。MAC アドレスを C++ の配列に格納する必要があります。
 
私の現在のコードは、出力を取得するための次のようなものです。

#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);
    }

ブースト正規表現を実装して配列内の MAC アドレスのみを取得するためのコード スニペットを提供してもらえますか? 私の意図は、これらの MAC アドレスを google geo-locate API に渡して場所を取得することです。

何か案は?

ありがとう!

4

3 に答える 3

1

おお、カヤサックスが近い!問題は、出力の先頭にスペースがあることです....

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

そのスペースを削除する必要があります。

netshKayasaxが提案する方法でファイル名をコマンドに置き換えると、これでも機能するはずです...

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)

ご存知、カヤサックスが提唱したnetsh...コマンド。

于 2014-01-20T09:37:58.040 に答える