VC++ 获取网卡IP、DNS、适配器名称
2014-06-30 15:35
597 查看
VS2008--Unicode-- bool GetPcNetInfo() { bool bRt = true; /******************************************* *通过Iphlpapi库获取网卡信息和个数 ********************************************/ PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO(); ULONG stSize = sizeof(IP_ADAPTER_INFO); int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize); //获得其大小 if (ERROR_BUFFER_OVERFLOW == nRel) //重新申请所需要的空间 { delete pIpAdapterInfo; pIpAdapterInfo = (PIP_ADAPTER_INFO) new BYTE[stSize]; nRel=GetAdaptersInfo(pIpAdapterInfo, &stSize); } if (ERROR_SUCCESS == nRel) //获取信息成功 { m_AdapterInfo.pIpAdapterInfo = pIpAdapterInfo; m_AdapterInfo.iCount = 0; while (pIpAdapterInfo) //获取网卡个数 { m_AdapterInfo.iCount++; pIpAdapterInfo = pIpAdapterInfo->Next; } } /******************************************* *通过mprapi库获取连接名称 *并通过index将网卡信息和连接名称相关联 ********************************************/ HANDLE hMprConfig; //连接信息的句柄 DWORD dwRet=0; //返回值 PIP_INTERFACE_INFO plfTable = NULL; //接口信息表 DWORD dwBufferSize=0; //接口信息表空间大小 m_AdapterInfo.csConnectName = new TCHAR [m_AdapterInfo.iCount] [256]; //申请空间存储连接名 dwRet = MprConfigServerConnect(NULL, &hMprConfig); //获得句柄 dwRet = GetInterfaceInfo(NULL, &dwBufferSize); //获得接口信息表大小 if(dwRet == ERROR_INSUFFICIENT_BUFFER) //获得接口信息 { plfTable = (PIP_INTERFACE_INFO)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBufferSize); GetInterfaceInfo(plfTable, &dwBufferSize); } TCHAR szFriendName[256]; //接口名称 DWORD tchSize = sizeof(TCHAR) * 256; ZeroMemory(&szFriendName, tchSize); for (UINT i = 0; i < plfTable->NumAdapters; i++) { IP_ADAPTER_INDEX_MAP AdaptMap; //接口信息 AdaptMap = plfTable->Adapter[i]; dwRet = MprConfigGetFriendlyName(hMprConfig, AdaptMap.Name, (PWCHAR)szFriendName, tchSize); //获得连接名称unicode USES_CONVERSION; //char* pName = W2A((PWCHAR)szFriendName); //转换为ansi InsertConnectName(AdaptMap.Index, szFriendName); //根据Index存储名字信息 } HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, plfTable); //********************************************************************* //*******写网络配置相关信息到文件************************************** PIP_ADAPTER_INFO pIpAdapterInfoWt = m_AdapterInfo.pIpAdapterInfo; for (UINT i = 0;i < m_AdapterInfo.iCount;i++) { //写网络适配器的名称 CString str_adpname = _T(""); str_adpname.Format(_T("AdapterName%d"),i); //是否自动获取IP信息DhcpEnabled CString str_dhcpenabled = _T(""); str_dhcpenabled.Format(_T("DhcpEnabled%d"),i); CString str_dhcpenabledvl = _T(""); str_dhcpenabledvl.Format(_T("%d"),pIpAdapterInfoWt->DhcpEnabled); //写MAC地址 CString str_mac = _T(""); str_mac.Format(_T("MAC%d"),i); CString str_macvl= _T(""); str_macvl.Format(_T("%02X%02X%02X%02X%02X%02X"), pIpAdapterInfoWt->Address[0], pIpAdapterInfoWt->Address[1], pIpAdapterInfoWt->Address[2], pIpAdapterInfoWt->Address[3], pIpAdapterInfoWt->Address[4], pIpAdapterInfoWt->Address[5]); //写IP地址 CString str_ip = _T(""); str_ip.Format(_T("IP%d"),i); CString str_ipvl = _T(""); str_ipvl.Format(_T("%s"), CStringW(pIpAdapterInfoWt->IpAddressList.IpAddress.String)); //子网掩码 CString str_subnetmask = _T(""); str_subnetmask.Format(_T("SubnetMask%d"),i); CString str_subnetmaskvl = _T(""); str_subnetmaskvl.Format(_T("%s"),CStringW(pIpAdapterInfoWt->IpAddressList.IpMask.String)); //网关 CString str_gateway = _T(""); str_gateway.Format(_T("Gateway%d"),i); CString str_gatewayvl = _T(""); str_gatewayvl.Format(_T("%s"),CStringW(pIpAdapterInfoWt->GatewayList.IpAddress.String)); //Dns服务器 IP_PER_ADAPTER_INFO* pPerAdapt = NULL; ULONG ulLen = 0; int err = GetPerAdapterInfo( pIpAdapterInfoWt->Index, pPerAdapt, &ulLen); if( err == ERROR_BUFFER_OVERFLOW ) { pPerAdapt = ( IP_PER_ADAPTER_INFO* ) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, ulLen); err = GetPerAdapterInfo( pIpAdapterInfoWt->Index, pPerAdapt, &ulLen ); if( err == ERROR_SUCCESS ) { IP_ADDR_STRING* pNext = &( pPerAdapt->DnsServerList ); if (pNext && strcmp(pNext->IpAddress.String, "") != 0)//自动获取为false { //dsn是否自动获取 CString str_dnsdhcp = _T(""); str_dnsdhcp.Format(_T("DnsDhcpEnabled%d"),i); CString str_dnsdhcpvl = _T("0"); //dsn-PrimaryDns CString str_primaryDns = _T(""); str_primaryDns.Format(_T("PrimaryDns%d"),i); CString str_primaryDnsvl = _T(""); str_primaryDnsvl.Format(_T("%s"),CStringW(pNext->IpAddress.String)); //dns-backupdns CString str_backupdns = _T(""); str_backupdns.Format(_T("BackupDns%d"),i); if (pNext=pNext->Next) { CString str_backupdnsvl = _T(""); str_backupdnsvl.Format(_T("%s"),CStringW(pNext->IpAddress.String)); //m_pIniFile->WriteString(_T("System"),str_backupdns, str_backupdnsvl); } } else //dns自动获取为true { //dsn是否自动获取 CString str_dnsdhcp = _T(""); str_dnsdhcp.Format(_T("DnsDhcpEnabled%d"),i); CString str_dnsdhcpvl = _T("1"); } } HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, pPerAdapt); } pIpAdapterInfoWt = pIpAdapterInfoWt->Next; } return bRt; } void InsertConnectName(ULONG index, TCHAR *pName) { PIP_ADAPTER_INFO pIpAdapterInfo = m_AdapterInfo.pIpAdapterInfo; for (int i = 0; i < m_AdapterInfo.iCount; i++) { if (pIpAdapterInfo->Index == index) { wcscpy(m_AdapterInfo.csConnectName[i], pName);//适配器名称 } pIpAdapterInfo = pIpAdapterInfo->Next; } }
//备注:另外需要的.h及.cpp文件
<pre name="code" class="cpp">#ifndef _ADAPTERINFO_H_#define _ADAPTERINFO_H_#define MAX_IP_ADDR_LEN 16 //最大IP长度#define MAX_MAC_ADDR_LEN 13 //MAC最大长度#define MAX_NAME_LEN 256 //最大连接名称长度#define CONNECTNAME "CONNECTNAME"#define IPDHCP "IPDHCP"#define DNSDHCP "DNSDHCP"#define IPADDRESS "IPADDRESS"#define MASK "MASK"#define GATEWAY "GATEWAY"#define PRIMARYDNS "PRIMARYDNS"#define BACKUPDNS "BACKUPDNS"#define MACADDR "MACADDR"#define WM_MSG_MODIFY_COMPLETE WM_USER + 100 //设置完成消息typedef struct _AdapterInfo{PIP_ADAPTER_INFO pIpAdapterInfo; //通过iphlpapi库获取int iCount; //适配器个数TCHAR (*csConnectName)[MAX_NAME_LEN]; //连接名称}AdapterInfo;class PlanInfo{public:char m_PlanName[MAX_NAME_LEN]; //方案名称char m_ConnectName[MAX_NAME_LEN]; //连接名称BOOL m_IsIpDHCP; //IP是否自动获取BOOL m_IsDNSDHCP; //DNS是否自动获取char m_IpAddress[MAX_IP_ADDR_LEN]; //IP地址char m_Mask[MAX_IP_ADDR_LEN]; //子网掩码char m_GateWay[MAX_IP_ADDR_LEN]; //网关char m_PrimaryDns[MAX_IP_ADDR_LEN]; //主DNSchar m_BackupDns[MAX_IP_ADDR_LEN]; //附属DNSchar m_MacAddr[MAX_MAC_ADDR_LEN]; //MAC地址PlanInfo();~PlanInfo();BOOL SetConnectName(char *pName);BOOL SetDHCPFlag(BOOL flag);BOOL SetIpInfo(char *pIpAddr, char *pMask, char *pGateWay);BOOL SetDns(char *pPrimaryDns, char *pBackupDns);BOOL SetMacAddr(char *pMac);};#endif
<pre name="code" class="cpp">#include "stdafx.h"#include "AdapterInfo.h"PlanInfo::PlanInfo(){m_IsDNSDHCP = TRUE;m_IsDNSDHCP = TRUE;strcpy(m_IpAddress, "0.0.0.0");strcpy(m_Mask, "0.0.0.0");strcpy(m_GateWay, "0.0.0.0");strcpy(m_MacAddr, "");}PlanInfo::~PlanInfo(){;}BOOL PlanInfo::SetConnectName(char *pName){strcpy(m_ConnectName, pName);return TRUE;}BOOL PlanInfo::SetDHCPFlag(BOOL flag){m_IsIpDHCP = flag;return TRUE;}BOOL PlanInfo::SetIpInfo(char *pIpAddr, char *pMask, char *pGateWay){strcpy(m_IpAddress, pIpAddr);strcpy(m_Mask, pMask);strcpy(m_GateWay, pGateWay);return TRUE;}BOOL PlanInfo::SetDns(char *pPrimaryDns, char *pBackupDns){strcpy(m_PrimaryDns, pPrimaryDns);strcpy(m_BackupDns, pBackupDns);return TRUE;}BOOL PlanInfo::SetMacAddr(char *pMac){strcpy(m_MacAddr, pMac);return TRUE;}
相关文章推荐
- 批处理获取网卡名称的代码(附修改IP、网关、DNS脚本)
- 批处理获取网卡名称(附修改IP、网关、DNS脚本)
- 获取当前可使用的网卡并检查网卡设置(网卡的IP,网关,子网掩码,DNS,备用DNS信息)
- Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP
- java根据网卡名称获取IP
- linux 环境下 用gethostbyname函数获取 DNS的服务器列表 名称 IP
- 使用WMI控制网络适配器的类(获取所有启用的网络适配器及其信息。设置IP、子网掩码,网关,DNS)
- 获取网卡,网络设置,ip设置,dns,wins
- shell获取本地网卡IP,mac,掩码,dns,外网IP
- Python获取网卡信息(名称、MAC、IP、网关等) 推荐
- 获取网卡物理位址与网关掩码 DNS IP
- window命令修改ip,dns,查看适配器名称
- Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP
- c#获取和设置网卡ip/dns等信息
- Linux 下获取LAN中指定IP的网卡的MAC(物理地址)
- c#中获取cpu序列号、网卡mac地址、ip地址、硬盘序列号、登录用户名、pc类型、计算机名称、物理内存
- C#中获取CPU序列号、网卡Mac地址、IP地址、硬盘序列号、登录用户名、PC类型、计算机名称、物理内存
- FreeBSD 设置网卡IP,网关和DNS
- 获取网卡信息(网卡MAC,ip,index,devicename)的一般方法(利用IP HELPER api)
- 用VB 写程序 获取MAC ,IP ,hd ,CPU,内存,电脑名称等信息