获取IP/MAC地址方法
来源:互联网 发布:mac 蓝光播放器 编辑:程序博客网 时间:2024/05/22 16:39
1. 获取主机名称
//得到计算机名称//或者通过gethostname()获取CString GetMyComputerName(){DWORD dwSize = INTERNET_MAX_HOST_NAME_LENGTH;char szHostName[INTERNET_MAX_HOST_NAME_LENGTH];memset(szHostName, 0, INTERNET_MAX_HOST_NAME_LENGTH);GetComputerName(szHostName, &dwSize);return szHostName;}
2. 获取本机IP地址
//得到本机IP地址BOOL GetLocalIpAddr(char* szIP, int nLen){//初始化SocketWSADATA wsaData;WORD wVerReq = MAKEWORD(2, 2);int nRet = WSAStartup(wVerReq, &wsaData);if (0 != nRet){return FALSE;}//校验Socket版本 if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {return FALSE;}//获取主机名称char szHost[INTERNET_MAX_HOST_NAME_LENGTH] = { 0 };nRet = gethostname(szHost, INTERNET_MAX_HOST_NAME_LENGTH - 1);if (SOCKET_ERROR == nRet){return FALSE;}//获取本机地址PHOSTENT pHostInfo = gethostbyname(szHost);if (NULL == pHostInfo || NULL == pHostInfo->h_addr_list[0]){return FALSE;}//获取IP地址strcpy_s(szIP, nLen - 1, inet_ntoa(*(struct in_addr *)pHostInfo->h_addr_list[0]));return TRUE;}
3. 获取本机MAC地址
//得到本机MAC地址BOOL GetLocalMacAddr(char *szMac, int nMacLen){//获取IPchar szIP[MAX_PATH] = { 0 };GetLocalIpAddr(szIP, MAX_PATH);//获取MACreturn GetMacAddrByIp(szIP, szMac, nMacLen);}
4. 根据IP获取MAC地址(可获取远程主机MAC地址)
//根据IP获取MAC地址(可获取远程主机MAC地址)BOOL GetMacAddrByIp(const char *szIPAddr, char *szMacAddr, int nMacLen){IPAddr ipAddr = inet_addr(szIPAddr);ULONG szMac[2] = {0};ULONG ulLen = 6;HRESULT hr = SendARP(ipAddr, 0, szMac, &ulLen);if (hr != NO_ERROR){return FALSE;}unsigned char * mac_addr = (unsigned char*)szMac;sprintf_s(szMacAddr, nMacLen, "%02X-%02X-%02X-%02X-%02X-%02X", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);return TRUE;}
5.获取网卡详细信息
//获取网卡详细信息typedef struct tag_strAdpterInfo{string sAdpterName;string sAdpterDesc;string sMacAddr;string sIPAddr;string sIpMask;string sGateway;}strAdpterInfo_S;#include "Iphlpapi.h" #pragma comment(lib, "Iphlpapi.lib")
//获取本机网卡详细信息BOOL GetAdapterInfo(vector<strAdpterInfo_S> &vecAdpterInfo){// 初始化winsockPIP_ADAPTER_INFO pAdapterInfo;PIP_ADAPTER_INFO pAdapter = NULL;ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);pAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulOutBufLen);// 第一次调用GetAdapterInfo获取ulOutBufLen的具体大小DWORD 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;vecAdpterInfo.clear();while (pAdapter){strAdpterInfo_S strAdpter;strAdpter.sAdpterName = pAdapter->AdapterName;strAdpter.sAdpterDesc = pAdapter->Description;char szMac[20] = { 0 };sprintf_s(szMac, "%02x-%02x-%02x-%02x-%02x-%02x\n",pAdapter->Address[0],pAdapter->Address[1],pAdapter->Address[2],pAdapter->Address[3],pAdapter->Address[4],pAdapter->Address[5]);strAdpter.sMacAddr = szMac;strAdpter.sIPAddr = pAdapter->IpAddressList.IpAddress.String;strAdpter.sIpMask = pAdapter->IpAddressList.IpMask.String;strAdpter.sGateway = pAdapter->GatewayList.IpAddress.String;vecAdpterInfo.push_back(strAdpter);pAdapter = pAdapter->Next;}}if (pAdapterInfo){free(pAdapterInfo);}return TRUE;}
6. 获取本机MAC地址,相对复杂的做法
//得到本机MAC地址,相对复杂//参考: http://blog.csdn.net/neicole/article/details/7587414//使用结构NCB和函数Netbios()需要加载:#include <Nb30.h>#pragma comment(lib, "netapi32.lib") //定义两个存放返回网卡信息的变量typedef struct _ASTAT_{ADAPTER_STATUS adapt;//网络适配器状态NAME_BUFFER NameBuff[30];//名字表信息}ASTAT, *PASTAT;CString GetMacAddress(){//NCB结构,用于设置执行的NetBIOS命令和参数NCB ncb;memset(&ncb, 0, sizeof(ncb));//初始化ncb结构体ncb.ncb_command = NCBRESET;//设置执行NCBRESET,复位网络适配器ncb.ncb_lana_num = 0;//指定网卡序号//首先对选定的网卡发送一个NCBRESET命令,以便进行初始化UCHAR uRetCode = Netbios(&ncb);//执行Netbios()的返回值//printf("The NCBRESET return code is: 0x%x \n", uRetCode);//重新初始化ncbmemset(&ncb, 0, sizeof(ncb));ncb.ncb_command = NCBASTAT;//执行NCBASTAT命令,获取网络适配器状态ncb.ncb_lana_num = 0; //指定网卡序号//设置执行NCBASTAT命令的参数,将获取到的网络适配器数据保存到Adapter结构体中strcpy_s((char *)ncb.ncb_callname, sizeof(ncb.ncb_callname), "*");//指定返回的信息存放的变量 ASTAT Adapter;ncb.ncb_buffer = (unsigned char *)&Adapter;ncb.ncb_length = sizeof(Adapter);//发送NCBASTAT命令以获取网卡的信息 uRetCode = Netbios(&ncb);//printf("The NCBASTAT return code is: 0x%x \n", uRetCode);CString strMacAddr;if (uRetCode == 0){//把网卡MAC地址格式化成常用的16进制形式,如0010-A4E4-5802 strMacAddr.Format("%02X-%02X-%02X-%02X-%02X-%02X\n",Adapter.adapt.adapter_address[0],Adapter.adapt.adapter_address[1],Adapter.adapt.adapter_address[2],Adapter.adapt.adapter_address[3],Adapter.adapt.adapter_address[4],Adapter.adapt.adapter_address[5]);return strMacAddr;}return "";}
0 0
- 获取IP/MAC地址方法
- 获取ip、mac、地址
- Android获取本机Mac地址及IP地址方法
- android:获取本机Mac地址及IP地址方法
- JS获取MAC地址、IP地址及主机名的方法
- Android获取本机Mac地址及IP地址方法
- 获取系统IP地址和MAC地址方法总结
- 获取客户端网卡MAC地址和IP地址的方法
- android获取IP地址和MAC地址的方法
- Android 获取本机Mac 地址方法及ip地址
- 获取IP地址和MAC地址的三种方法
- ASP.NET获取IP与MAC地址的方法
- ASP.NET获取IP与MAC地址的方法
- ASP.NET技术获取IP与MAC地址的方法
- ASP.NET技术获取IP与MAC地址的方法
- ASP.NET获取IP与MAC地址的方法
- ASP.NET获取服务器IP与MAC地址的方法
- ASP.NET获取IP与MAC地址的方法
- Duplicating a Database
- 开始学习swift开发
- 大规模网站架构的缓存机制
- Jquery 选择器介绍
- Qt 解析json
- 获取IP/MAC地址方法
- MFC应用程序放置rich edit 2.0 control控件,对话框就不显示
- 多线程 学习笔记<2> API 与 MFC 下的一些区别
- Android之开源类库Pinyin4j的使用----搜索联系人
- RHEL6.0使用centos的YUM更新源
- 十个最值得阅读学习的C开源项目代码
- JAVA相关技术面试汇总
- 教你创建qq好友桌面快捷方式
- p-value解析