MFCローカルIP、ネットワークと物理アドレスのIPを取得

ローカルIPへのアクセス

CString CNetの:: GetLocalIP()
{ 
    WSADATA WSADATA。
    INT ERR = WSAStartupの(MAKEWORD(20)、&WSADATA)。
    もし(!=誤る0 
    { 
        リターン "" ; 
    } 

    チャー szHostName [MAX_PATH] = { 0 }。
    int型nRetCode; 
    nRetCode =のgethostname(szHostName、はsizeof (szHostName))。

    char * lpLocalIP。
    PHOSTENTののHostInfo。

    もし(!nRetCode = 0 
    { 
        WSACleanup(); 
        リターン "" ; 
    } 

    のHostInfo = のgethostbyname(szHostName)。
    lpLocalIP = INET_NTOA(*(構造体 in_addr形式*)* hostinfo-> h_addr_list); 

    WSACleanup(); 

    返すlpLocalIPを。
}

外部ネットワークのIPを取得します。原則は、その後、ダウンロードしたファイルを解析し、マシンのIPを見つけるために、このページを置く、マシンのIPの下にBaiduの検索を使用することです。

CString CNetの:: GetInternetIP()
{ 
    チャー BUF [ 2048 ] = { 0 }。 
    チャー下司[ 1024 ] = { " https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E6%9C%AC%E6%9C%BAip&rsv_pq=bf583ea000057300&rsv_t=a528kuIZ1osYq0OKQDWPTA3DASK7g6NwL8LPMmrOCGIYzoh8w9D %2FjTTt2tk&rqlang = CN&rsv_enter = 1&rsv_sug3 = 1 " }。
    CString strPath = " html.tmp " 

    URLDownloadToFile(0、下司、strPath、0 、NULL); 

    std :: 文字列 str_ip("" );
    CStringのstrLine変数の値。
    CStdioFileファイル。
    int型 ICOUNT = 0 ;
    もし(file.Open(strPath、のCFile :: modeRead))
    { 
        一方(file.ReadString(strLine変数の値))
        { 
            ICOUNT ++ 
            std :: 文字列 SLINE = strLine変数の値。
            std :: 文字列のアスキー= UTF_82ASCII(SLINE)。
            int型のインデックス= ascii.find(" 本机IP " );
            もし(! -インデックス= 1 
            { 
                str_ip = ascii.substr(インデックス+ strlenを(" 本机IP ")+ 1);
                破ります; 
            } 
        } 
    } 
    file.Close()。
    CStringのストリップ; 
    ストリップ = str_ip.c_str()。
    ストリップ = strIP.Trim()。
    strIP.Replace("  """ ); 
    strIP.Replace(" </ span>を""  " );
    返すストリップを。
}

 

MACアドレスを取得します:GetAdaptersInfo関数の使用は、当然のことながら、この機能は情報のうち、取得もローカルIPが含まれています

CString CNetの:: GetMacAdress()
{ 
    char型 MAC [ 32 ] = { 0 }。
    CStringのstrMac; 
    PIP_ADAPTER_INFO pAdapterInfo; 
    PIP_ADAPTER_INFO pAdapter = NULL; 
    DWORD dwRetVal = 0 
    pAdapterInfo =(IP_ADAPTER_INFO *)はmallocはsizeof (IP_ADAPTER_INFO))。
    ULONG ulOutBufLen = はsizeof (IP_ADAPTER_INFO)。

    dwRetVal = GetAdaptersInfo(pAdapterInfo、&ulOutBufLen)。

    もし(dwRetVal == ERROR_BUFFER_OVERFLOW)
    { 
        フリー(pAdapterInfo)。
        pAdapterInfo =(IP_ADAPTER_INFO *)のmalloc (ulOutBufLen)。
        dwRetVal = GetAdaptersInfo(pAdapterInfo、&ulOutBufLen)。
    } 

    であれば(dwRetVal == NO_ERROR)
    { 
        pAdapter = pAdapterInfo。
        一方、(pAdapter)
        { 
            sprintf_s(MAC、" %02X-%02X-%02X-%02X-%02X-%02X "、pAdapter-> [アドレス0 ]、pAdapter-> [アドレス1 ]、pAdapter-> [住所2 ]、pAdapter-> [住所3 ]、pAdapter->アドレス[ 4]、pAdapter->アドレス[ 5 ])。
            strMac = MAC; 
            pAdapter = pAdapter-> 次に、
        } 
    } 
    
    { 
        strMac = "" ; 
    } 
    フリー(pAdapterInfo)。
    返すstrMacを。
}
GetAdaptersInfo関数は、次のヘッダファイルとlibを導入する必要があります。

書式#include <IPHlpApi.h>

#pragmaコメント(libに、 "Iphlpapi.lib")

 

おすすめ

転載: www.cnblogs.com/ahcc08/p/11330848.html