ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MFC 获取本机IP、网络ip和物理地址

2019-08-10 11:01:55  阅读:230  来源: 互联网

标签:IP MFC ip CString pAdapterInfo 物理地址 pAdapter strIP 本机


获取本机Ip

CString CNet::GetLocalIP()
{
    WSADATA wsaData;
    int err = WSAStartup(MAKEWORD(2, 0), &wsaData);
    if (err != 0)
    {
        return "";
    }

    char szHostName[MAX_PATH] = { 0 };
    int nRetCode;
    nRetCode = gethostname(szHostName, sizeof(szHostName));

    char* lpLocalIP;
    PHOSTENT hostinfo;

    if (nRetCode != 0)
    {
        WSACleanup();
        return "";
    }

    hostinfo = gethostbyname(szHostName);
    lpLocalIP = inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list);

    WSACleanup();

    return lpLocalIP;
}

获取外网ip:原理是到用百度搜索下本机ip,然后把这个网页下载下来,解析这个文件,找到本机ip。

CString CNet::GetInternetIP()
{
    char buf[2048] = { 0 }; 
    char chURL[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, chURL, strPath, 0, NULL);

    std::string str_ip("");
    CString strLine;
    CStdioFile file;
    int iCount = 0;
    if (file.Open(strPath, CFile::modeRead))
    {
        while (file.ReadString(strLine))
        {
            iCount++;
            std::string sLine = strLine;
            std::string ascii = UTF_82ASCII(sLine);
            int index = ascii.find("本机IP");
            if (index != -1)
            {
                str_ip = ascii.substr(index + strlen("本机IP") + 1);
                break;
            }
        }
    }
    file.Close();
    CString strIP;
    strIP = str_ip.c_str();
    strIP = strIP.Trim();
    strIP.Replace(" ", "");
    strIP.Replace("</span>", " ");
    return strIP;
}

 

获取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);

    if (dwRetVal == ERROR_BUFFER_OVERFLOW)
    {
        free(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
        dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
    }

    if (dwRetVal == NO_ERROR)
    {
        pAdapter = pAdapterInfo;
        while (pAdapter)
        {
            sprintf_s(MAC, "%02X-%02X-%02X-%02X-%02X-%02X", pAdapter->Address[0], pAdapter->Address[1], pAdapter->Address[2], pAdapter->Address[3], pAdapter->Address[4], pAdapter->Address[5]);
            strMac = MAC;
            pAdapter = pAdapter->Next;
        }
    }
    else
    {
        strMac = "";
    }
    free(pAdapterInfo);
    return strMac;
}
GetAdaptersInfo函数需要引入的头文件和lib文件如下;

#include <IPHlpApi.h>

#pragma comment(lib,"Iphlpapi.lib")

 

标签:IP,MFC,ip,CString,pAdapterInfo,物理地址,pAdapter,strIP,本机
来源: https://www.cnblogs.com/ahcc08/p/11330848.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有