0

クライアントの MAC アドレスと IP アドレスを表示するクライアント サーバー プログラムを作成しました。コンピューターの MAC アドレスを取得する機能がありますが、リスト ボックスに MAC アドレスを出力するのに問題があります。以前は機能していた印刷機能を作成しましたが、MACアドレスを見つけるためのコードを変更したところ、機能しなくなりました(正しい場所でprintMACaddressを呼び出しているかどうかもわかりません)。2 つのリスト ボックスがあります。1 つは IP アドレスを表示し、もう 1 つは MAC アドレスを表示します。IPアドレスをクリックすると、そのコンピューターのMACアドレスが表示されますが、現在は表示されません。IP アドレスをクリックしても何も起こりません

    void CmfcServerDlg::OnLbnSelchangeListClientaddr()
    {
        bool GetMACFromIP(BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH], const std::string &selected_ip_adr);
    }


    void CmfcServerDlg::PrintMACaddress(unsigned char MACData[])
        {
            CString

 strText;
        strText.Format("%02X-%02X-%02X-%02X-%02X-%02X\n",MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
        m_ClientIdList.AddString(strText); 
    }


    bool CmfcServerDlg::GetMACFromIP(BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH], const std::string &selected_ip_adr)
    {
        IP_ADAPTER_INFO AdapterInfo[16];            
        DWORD dwBufLen = sizeof(AdapterInfo);       

        DWORD dwStatus = GetAdaptersInfo(           
            AdapterInfo,                            
            &dwBufLen);                             
        assert(dwStatus == ERROR_SUCCESS);          

        PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
        bool found = false;
        do {
            const IP_ADDR_STRING *addr_str = &pAdapterInfo->IpAddressList; 
            while(addr_str != NULL)
            {
              if(selected_ip_adr == addr_str->IpAddress.String) 
              {
                found = true;
                break;
              }
            }
            if(found)
            {
              memcpy(Address, pAdapterInfo->Address, MAX_ADAPTER_ADDRESS_LENGTH); 
              PrintMACaddress(pAdapterInfo->Address); //problem here
              break;
            }
            else
            {
                PrintMACaddress(pAdapterInfo->Address);
                pAdapterInfo = pAdapterInfo->Next;      
            }
        }
        while(pAdapterInfo);                        
        return found; 
    }
4

1 に答える 1

1

コメントで述べた目標 (「サーバーに接続する任意のコンピューターの MAC アドレスを見つけようとしています」) が不可能であることを認識していますか? MAC アドレスは IP アドレスよりも下位レベルであり、「メディア ポート」、つまりケーブルが置かれている場所を識別します。

スイッチの反対側にあるクライアントの MAC アドレスを取得することはできません。インターネット経由ではなおさらです。

于 2013-03-25T14:54:28.933 に答える