1

私はLAN上のデバイスのMACアドレスを取得しようとしていますが、SendARP関数を使用してこれを行っていますが、奇妙な理由で間違ったMACアドレスを取得し、LAN上にあるラップトップのMACを取得するように指示していますしかし、それは機能しません:/

SendARP関数(MSDN)へのリンク:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366358%28v=vs.85%29.aspx

ラップトップのMacは実際には次のとおりです。e0:94:67:18:a7:dc SendARPによるMac出力:e9:ad:2d:01:c8:11

これは、IPアドレスからMacをフェッチするために作成した関数です:P

BYTE* GetMacAddress(IPAddr destination, IPAddr source) {
Sleep(500);
ULONG DestMacAddr[2];
ULONG PhysicalLength = 6;

memset(&DestMacAddr, 0xff, sizeof(DestMacAddr));

DWORD returnValue = SendARP(destination, source, &DestMacAddr, &PhysicalLength);

if(returnValue == NO_ERROR) {
    cout << "Fetched destination mac" << endl;
}else {
    printf("Error: %d\n", returnValue);

    if(returnValue == ERROR_BAD_NET_NAME) {
        printf("ERROR_BAD_NET_NAME\n trying to fetch mac address...");
        return GetMacAddress(destination, source);
    }

    if(returnValue == ERROR_BUFFER_OVERFLOW) {
        printf("ERROR_BUFFER_OVERFLOW\n");
    }

    if(returnValue == ERROR_GEN_FAILURE) {
        printf("ERROR_GEN_FAILURE\n");
    }

    if(returnValue == ERROR_INVALID_PARAMETER) {
        printf("ERROR_INVALID_PARAMETER\n");
    }

    if(returnValue == ERROR_INVALID_USER_BUFFER) {
        printf("ERROR_INVALID_USER_BUFFER\n");
    }

    if(returnValue == ERROR_NOT_FOUND) {
        printf("ERROR_NOT_FOUND\n");
    }

    if(returnValue == ERROR_NOT_SUPPORTED) {
        printf("ERROR_NOT_SUPPORTED\n");
    }
}
BYTE *bMacAddr = (BYTE *) &DestMacAddr;

return bMacAddr;

}

ネットワークバイトオーダーか何かが原因かもしれないと思っていましたが、nothl()も機能しませんでした:/ここで私を助けてください:/

4

2 に答える 2

1

あなたはこれを行うことはできません:

BYTE *bMacAddr = (BYTE *) &DestMacAddr;

return bMacAddr;

GetMacAddress()関数のスタックにあるものへのポインターを返しています。これは、関数が終了すると消えます。

于 2013-03-07T18:27:07.503 に答える
0

コマンドプロンプトで「arp-a」と入力して、ローカルarpテーブル上のラップトップのMACアドレスを確認します。それが元のファイルと異なる場合は、「arp -d」(VistaおよびWin7 / 8の管理者権限を使用)と入力してarpテーブルをクリアし、yoSendARPアプリを使用してMACを再確認してください。

于 2013-03-07T18:19:37.727 に答える