MFC 获取本机IP、网络ip和物理地址
2024-09-05 18:44:17
获取本机Ip
CString CNet::GetLocalIP()
{
WSADATA wsaData;
int err = WSAStartup(MAKEWORD(, ), &wsaData);
if (err != )
{
return "";
} char szHostName[MAX_PATH] = { };
int nRetCode;
nRetCode = gethostname(szHostName, sizeof(szHostName)); char* lpLocalIP;
PHOSTENT hostinfo; if (nRetCode != )
{
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[] = { };
char chURL[] = {"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(, chURL, strPath, , NULL); std::string str_ip("");
CString strLine;
CStdioFile file;
int iCount = ;
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 != -)
{
str_ip = ascii.substr(index + strlen("本机IP") + );
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[] = { };
CString strMac;
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = ;
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[], pAdapter->Address[], pAdapter->Address[], pAdapter->Address[], pAdapter->Address[], pAdapter->Address[]);
strMac = MAC;
pAdapter = pAdapter->Next;
}
}
else
{
strMac = "";
}
free(pAdapterInfo);
return strMac;
}
GetAdaptersInfo函数需要引入的头文件和lib文件如下;
#include <IPHlpApi.h>
#pragma comment(lib,"Iphlpapi.lib")
最新文章
- BZOJ 2002 &;&; BZOJ 2409 LCT &;&; BZOJ 3282 初步练习
- 对restful的理解
- 格式化namenode,造成无法启动datanode
- 3kb jQuery代码搞定各种树形选择。
- 在getView方法产生给用户item的视图以及数据
- 设置myeclipse 项目编码(UTF-8)
- JSTL 核心标签库
- zw版【转发&#183;台湾nvp系列Delphi例程】HALCON AffineTransImage
- Java基础-事件处理
- MSP430推荐网站
- Java [leetcode 23]Merge k Sorted Lists
- CSS实现圆角,三角,五角星,五边形,爱心,12角星,8角星,圆,椭圆,圆圈,八卦
- Task schedule
- Java中对象的上转型对象
- React.js小书总结
- python url监控 并邮件报警
- SP2-0734: 未知的命令开头 ";exp wlc/ra..."; - 忽略了剩余的行。
- alias重命名命令
- Spring 环境与profile(二)——Properties with Spring
- Oracle Data Integrator学习资料