Netbios

#include <windows.h>
#pragma comment(lib, "Netapi32.lib")namespace
{bool GetAdapterInfo(int adapterNum, std::string& macOUT)
{NCB Ncb;memset(&Ncb, 0, sizeof(Ncb));Ncb.ncb_command = NCBRESET; // 重置网卡,以便我们可以查询Ncb.ncb_lana_num = adapterNum;if (Netbios(&Ncb) != NRC_GOODRET)return false;// 准备取得接口卡的状态块memset(&Ncb, sizeof(Ncb), 0);Ncb.ncb_command = NCBASTAT;Ncb.ncb_lana_num = adapterNum;strcpy((char *) Ncb.ncb_callname, "*");struct ASTAT{ADAPTER_STATUS adapt;NAME_BUFFER nameBuff[30];}adapter;memset(&adapter,sizeof(adapter), 0);Ncb.ncb_buffer = (unsigned char *)&adapter;Ncb.ncb_length = sizeof(adapter);if (Netbios(&Ncb) != 0)return false;char acMAC[32];sprintf(acMAC, "%02X-%02X-%02X-%02X-%02X-%02X",int (adapter.adapt.adapter_address[0]),int (adapter.adapt.adapter_address[1]),int (adapter.adapt.adapter_address[2]),int (adapter.adapt.adapter_address[3]),int (adapter.adapt.adapter_address[4]),int (adapter.adapt.adapter_address[5]));macOUT = acMAC;return true;
}
}bool GetMacByNetBIOS(std::string& macOUT)
{// 取得网卡列表LANA_ENUM adapterList;NCB Ncb;memset(&Ncb, 0, sizeof(NCB));Ncb.ncb_command = NCBENUM;Ncb.ncb_buffer = (unsigned char *)&adapterList;Ncb.ncb_length = sizeof(adapterList);Netbios(&Ncb);// 取得MACfor (int i = 0; i < adapterList.length; ++i){if (GetAdapterInfo(adapterList.lana[i], macOUT))return true;}return false;
}

DeviceIoControl

#include <stdio.h>
#include <locale.h>
#include <tchar.h>#include <windows.h>
#include <shlwapi.h>
#include <setupapi.h>
#pragma comment(lib, "setupapi.lib")
#include <devguid.h>
#pragma comment(lib, "uuid.lib")
#include <ntddndis.h>
#include <ndisguid.h>
#include <iptypes.h>
#include <regstr.h>using DIDD_TYPE_BASE = SP_DEVICE_INTERFACE_DETAIL_DATA;
using DIDD_TYPE_CHAR = decltype(*static_cast<DIDD_TYPE_BASE *>(nullptr)->DevicePath);static constexpr SIZE_T DIDD_SIZE_HEAD = offsetof(DIDD_TYPE_BASE, DevicePath);
static constexpr SIZE_T DIDD_SIZE_BODY = sizeof(DIDD_TYPE_CHAR) * MAX_PATH;
static constexpr SIZE_T DIDD_SIZE_FULL = DIDD_SIZE_HEAD   DIDD_SIZE_BODY;using DEVICE_INTERFACE_DETAIL_DATA = union DEVICE_INTERFACE_DETAIL_DATA {inline SP_DEVICE_INTERFACE_DETAIL_DATA *operator->() { return &DetailData; }inline SP_DEVICE_INTERFACE_DETAIL_DATA *operator &() { return &DetailData; }SP_DEVICE_INTERFACE_DETAIL_DATA DetailData;BYTE Buffer[DIDD_SIZE_FULL];
};static void SetupDiOutputDeviceAddress(LPCTSTR DevicePath)
{HANDLE hFile = CreateFile(DevicePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);if (hFile != INVALID_HANDLE_VALUE){BOOL bResult = FALSE;BYTE bAddress[MAX_ADAPTER_ADDRESS_LENGTH] = { 0 };DWORD dwCtls[] = { OID_802_3_PERMANENT_ADDRESS, OID_802_3_CURRENT_ADDRESS };for (DWORD i = 0; i < ARRAYSIZE(dwCtls); i  ){DWORD dwCode = dwCtls[i];DWORD cbRead = 0;bResult = DeviceIoControl(hFile, IOCTL_NDIS_QUERY_GLOBAL_STATS, &dwCode, sizeof(dwCode), bAddress, sizeof(bAddress), &cbRead, nullptr);if (bResult){wprintf(L"网卡地址 [%02X-%02X-%02X-%02X-%02X-%02X]\n", bAddress[0], bAddress[1], bAddress[2], bAddress[3], bAddress[4], bAddress[5]);break;}}DWORD dwType = 0;DWORD dwCode = OID_GEN_PHYSICAL_MEDIUM;DWORD cbRead = 0;bResult = DeviceIoControl(hFile, IOCTL_NDIS_QUERY_GLOBAL_STATS, &dwCode, sizeof(dwCode), &dwType, sizeof(dwType), &cbRead, nullptr);CloseHandle(hFile);if (bResult){BOOL bWireless = FALSE;switch (dwType) {case NdisPhysicalMediumWirelessLan:case NdisPhysicalMediumWirelessWan:case NdisPhysicalMediumNative802_11:case NdisPhysicalMediumBluetooth:case NdisPhysicalMediumWiMax:case NdisPhysicalMediumUWB:bWireless = TRUE;default:wprintf(L"是否无线 [%d]\n", bWireless);break;}}}
}

ipconfig /all

类似的还有 :getmac /v /fo list

bool GetMacByCmd(std::string& macOUT)
{bool ret = false;//初始化返回MAC地址缓冲区SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; //创建管道HANDLE hReadPipe,hWritePipe;if(CreatePipe(&hReadPipe, &hWritePipe, &sa, 0) == TRUE){//控制命令行窗口信息STARTUPINFO si; //返回进程信息PROCESS_INFORMATION pi;si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdError = hWritePipe; si.hStdOutput = hWritePipe; si.wShowWindow = SW_HIDE; //隐藏命令行窗口si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;//创建获取命令行进程if (CreateProcess(NULL, "ipconfig /all", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi) == TRUE) { WaitForSingleObject(pi.hProcess, 3000); // 设置超时时间,防止Vista、Win7等操作系统卡死unsigned long count;CloseHandle(hWritePipe);std::string strBuffer(1024 * 10, '\0'); // 准备足够大的缓冲区if(ReadFile(hReadPipe, const_cast<char*>(strBuffer.data()), strBuffer.size() - 1, &count, 0) == TRUE){strBuffer.resize(strBuffer.find_first_of('\0')); // 截掉缓冲区后面多余的'\0'ret = ParseMac(strBuffer, macOUT);//提取MAC地址串}CloseHandle(pi.hThread); CloseHandle(pi.hProcess); }CloseHandle(hWritePipe); // VS2010下调试,此处会有“An invalid handle was specified”的中断,直接运行正常,原因未知。VS2008上正常。CloseHandle(hReadPipe);}return ret;
}

SNMP

#include <snmp.h>
#pragma comment(lib, "snmpapi.lib")
#pragma comment(lib, "Ws2_32.lib")bool GetMacBySNMP(std::string& macOUT)
{bool ret = false;WSADATA WinsockData;if (WSAStartup(MAKEWORD(2, 0), &WinsockData) != 0) return false;// Load the SNMP dll and get the addresses of the functions necessaryconst HINSTANCE m_dll = LoadLibrary("inetmib1.dll");if (m_dll < (HINSTANCE) HINSTANCE_ERROR)return false;const PFNSNMPEXTENSIONINIT f_SnmpExtensionInit = (PFNSNMPEXTENSIONINIT) GetProcAddress(m_dll, "SnmpExtensionInit");const PFNSNMPEXTENSIONINITEX f_SnmpExtensionInitEx = (PFNSNMPEXTENSIONINITEX) GetProcAddress(m_dll, "SnmpExtensionInitEx");const PFNSNMPEXTENSIONQUERY f_SnmpExtensionQuery = (PFNSNMPEXTENSIONQUERY) GetProcAddress(m_dll, "SnmpExtensionQuery");const PFNSNMPEXTENSIONTRAP f_SnmpExtensionTrap = (PFNSNMPEXTENSIONTRAP) GetProcAddress(m_dll, "SnmpExtensionTrap");HANDLE pollForTrapEvent;AsnObjectIdentifier supportedView;f_SnmpExtensionInit(GetTickCount(), &pollForTrapEvent, &supportedView);// Initialize the variable list to be retrieved by f_SnmpExtensionQueryconst AsnObjectIdentifier MIB_NULL = { 0, 0 };RFC1157VarBind varBind[2];varBind[0].name = MIB_NULL;varBind[1].name = MIB_NULL;RFC1157VarBindList varBindList;varBindList.list = varBind;UINT OID_ifEntryType[] = { 1, 3, 6, 1, 2, 1, 2, 2, 1, 3 };UINT OID_ifEntryNum[] = { 1, 3, 6, 1, 2, 1, 2, 1 };UINT OID_ipMACEntAddr[] = { 1, 3, 6, 1, 2, 1, 2, 2, 1, 6 };AsnObjectIdentifier MIB_ifMACEntAddr = { sizeof(OID_ipMACEntAddr) / sizeof(UINT), OID_ipMACEntAddr };AsnObjectIdentifier MIB_ifEntryType = { sizeof(OID_ifEntryType) / sizeof(UINT), OID_ifEntryType };AsnObjectIdentifier MIB_ifEntryNum = { sizeof(OID_ifEntryNum) / sizeof(UINT), OID_ifEntryNum };// Copy in the OID to find the number of entries in the Inteface tablevarBindList.len = 1;        // Only retrieving one itemSnmpUtilOidCpy(&varBind[0].name, &MIB_ifEntryNum);AsnInteger errorStatus;AsnInteger errorIndex;f_SnmpExtensionQuery(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, &errorIndex);varBindList.len = 2;// Copy in the OID of ifType, the type of interfaceSnmpUtilOidCpy(&varBind[0].name, &MIB_ifEntryType);// Copy in the OID of ifPhysAddress, the addressSnmpUtilOidCpy(&varBind[1].name, &MIB_ifMACEntAddr);for(int j = 0; j < varBind[0].value.asnValue.number; j++){// Submit the query.  Responses will be loaded into varBindList.// We can expect this call to succeed a # of times corresponding to the # of adapters reported to be in the systemif(f_SnmpExtensionQuery(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, &errorIndex) == FALSE)continue;// Confirm that the proper type has been returnedif(SnmpUtilOidNCmp(&varBind[0].name, &MIB_ifEntryType, MIB_ifEntryType.idLength) != 0)continue;// Type 6 describes ethernet interfacesif(varBind[0].value.asnValue.number != 6) continue;// Confirm that we have an address hereif(SnmpUtilOidNCmp(&varBind[1].name, &MIB_ifMACEntAddr, MIB_ifMACEntAddr.idLength) != 0)continue;if(varBind[1].value.asnValue.address.stream == NULL)continue;// Ignore all dial-up networking adaptersif ((varBind[1].value.asnValue.address.stream[0] == 0x44)&& (varBind[1].value.asnValue.address.stream[1] == 0x45)&& (varBind[1].value.asnValue.address.stream[2] == 0x53)&& (varBind[1].value.asnValue.address.stream[3] == 0x54)&& (varBind[1].value.asnValue.address.stream[4] == 0x00)) continue;// Ignore NULL addresses returned by other network interfacesif ((varBind[1].value.asnValue.address.stream[0] == 0x00)&& (varBind[1].value.asnValue.address.stream[1] == 0x00)&& (varBind[1].value.asnValue.address.stream[2] == 0x00)&& (varBind[1].value.asnValue.address.stream[3] == 0x00)&& (varBind[1].value.asnValue.address.stream[4] == 0x00)&& (varBind[1].value.asnValue.address.stream[5] == 0x00)) continue;char buf[32];sprintf(buf, "%02X-%02X-%02X-%02X-%02X-%02X",varBind[1].value.asnValue.address.stream[0],varBind[1].value.asnValue.address.stream[1],varBind[1].value.asnValue.address.stream[2],varBind[1].value.asnValue.address.stream[3],varBind[1].value.asnValue.address.stream[4],varBind[1].value.asnValue.address.stream[5]);macOUT = buf;ret = true;break;}// Free the bindingsSnmpUtilVarBindFree(&varBind[0]);SnmpUtilVarBindFree(&varBind[1]);return ret;
}

GetAdaptersInfo

#include <winsock2.h>
#include <iphlpapi.h>
#pragma comment(lib, "IPHLPAPI.lib")bool GetMacByGetAdaptersInfo(std::string& macOUT)
{bool ret = false;ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO));if(pAdapterInfo == NULL)return false;// Make an initial call to GetAdaptersInfo to get the necessary size into the ulOutBufLen variableif(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {free(pAdapterInfo);pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);if (pAdapterInfo == NULL) return false;}if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == NO_ERROR){for(PIP_ADAPTER_INFO pAdapter = pAdapterInfo; pAdapter != NULL; pAdapter = pAdapter->Next){// 确保是以太网if(pAdapter->Type != MIB_IF_TYPE_ETHERNET)continue;// 确保MAC地址的长度为 00-00-00-00-00-00if(pAdapter->AddressLength != 6)continue;char acMAC[32];sprintf(acMAC, "%02X-%02X-%02X-%02X-%02X-%02X",int (pAdapter->Address[0]),int (pAdapter->Address[1]),int (pAdapter->Address[2]),int (pAdapter->Address[3]),int (pAdapter->Address[4]),int (pAdapter->Address[5]));macOUT = acMAC;ret = true;break;}}free(pAdapterInfo);return ret;
}

GetAdaptersAddresses

#include <winsock2.h>
#include <iphlpapi.h>
#pragma comment(lib, "IPHLPAPI.lib")bool GetMacByGetAdaptersAddresses(std::string& macOUT)
{bool ret = false;ULONG outBufLen = sizeof(IP_ADAPTER_ADDRESSES);PIP_ADAPTER_ADDRESSES pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen);if (pAddresses == NULL) return false;// Make an initial call to GetAdaptersAddresses to get the necessary size into the ulOutBufLen variableif(GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW){free(pAddresses);pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen);if (pAddresses == NULL) return false;}if(GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == NO_ERROR){// If successful, output some information from the data we receivedfor(PIP_ADAPTER_ADDRESSES pCurrAddresses = pAddresses; pCurrAddresses != NULL; pCurrAddresses = pCurrAddresses->Next){// 确保MAC地址的长度为 00-00-00-00-00-00if(pCurrAddresses->PhysicalAddressLength != 6)continue;char acMAC[32];sprintf(acMAC, "%02X-%02X-%02X-%02X-%02X-%02X",int (pCurrAddresses->PhysicalAddress[0]),int (pCurrAddresses->PhysicalAddress[1]),int (pCurrAddresses->PhysicalAddress[2]),int (pCurrAddresses->PhysicalAddress[3]),int (pCurrAddresses->PhysicalAddress[4]),int (pCurrAddresses->PhysicalAddress[5]));macOUT = acMAC;ret = true;break;}} free(pAddresses);return ret;
}

socket

int getMac(char* mac){int sockfd;struct ifreq tmp;char macAddr[30];sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0){cout<<"create socket fail"<<endl;return -1;}memset(&tmp,0,sizeof(struct ifreq));strncpy(tmp.ifr_name,"eth0",sizeof(tmp.ifr_name)-1);if((ioctl(sockfd,SIOCGIFHWADDR,&tmp))<0){cout<<"mac ioctl error"<<endl;return -1;}sprintf(macAddr,"%02x%02x%02x%02x%02x%02x",(unsigned char)tmp.ifr_hwaddr.sa_data[0],(unsigned char)tmp.ifr_hwaddr.sa_data[1],(unsigned char)tmp.ifr_hwaddr.sa_data[2],(unsigned char)tmp.ifr_hwaddr.sa_data[3],(unsigned char)tmp.ifr_hwaddr.sa_data[4],(unsigned char)tmp.ifr_hwaddr.sa_data[5]);close(sockfd);memcpy(mac,macAddr,strlen(macAddr));return 0;
}

SendARP

include "stdio.h"
#include "winsock2.h"
#include "iphlpapi.h"
// #pragma comment(lib,"C:\Program Files\Borland\CBuilder6\Lib\Psdk\iphlpapi.lib")
#pragma comment(lib,"iphlpapi.lib")int Stat[255];
String IPs[255];
String MACs[255];#define maxThread 60
Mthread *thread[maxThread]; // 线程地址String GetMAC(String IP,int & rs) // 取IP地址对应的MAC地址
{unsigned char mac[6];ULONG MacLen=6;ULONG DestIP=inet_addr(IP.c_str());rs=SendARP(DestIP,(ULONG)NULL,(PULONG)mac,(PULONG)&MacLen);String MACs="";if (rs==0){char buf[32];sprintf(buf,"%02X-%02X-%02X-%02X-%02X-%02X",(unsigned int)mac[0],(unsigned int)mac[1],(unsigned int)mac[2],(unsigned int)mac[3],(unsigned int)mac[4],(unsigned int)mac[5]);MACs=buf;}return(MACs);
}

WMI

#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#include <string>#pragma comment(lib, "wbemuuid.lib")int main(int argc, char **argv)
{HRESULT hres;// Initialize COM.hres = CoInitializeEx(0, COINIT_APARTMENTTHREADED);if (FAILED(hres)){cout << "Failed to initialize COM library. "<< "Error code = 0x"<< hex << hres << endl;return 1;              // Program has failed.}// Initialize hres = CoInitializeSecurity(NULL,-1,      // COM negotiates service                  NULL,    // Authentication servicesNULL,    // ReservedRPC_C_AUTHN_LEVEL_DEFAULT,    // authenticationRPC_C_IMP_LEVEL_IMPERSONATE,  // ImpersonationNULL,             // Authentication info EOAC_NONE,        // Additional capabilitiesNULL              // Reserved);if (FAILED(hres)){cout << "Failed to initialize security. "<< "Error code = 0x"<< hex << hres << endl;CoUninitialize();return 1;          // Program has failed.}// Obtain the initial locator to Windows Management// on a particular host computer.IWbemLocator *pLoc = 0;hres = CoCreateInstance(CLSID_WbemLocator,0,CLSCTX_INPROC_SERVER,IID_IWbemLocator, (LPVOID *)&pLoc);if (FAILED(hres)){cout << "Failed to create IWbemLocator object. "<< "Error code = 0x"<< hex << hres << endl;CoUninitialize();return 1;       // Program has failed.}IWbemServices *pSvc = 0;// Connect to the root\cimv2 namespace with the// current user and obtain pointer pSvc// to make IWbemServices calls.hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), // WMI namespaceNULL,                    // User nameNULL,                    // User password0,                       // LocaleNULL,                    // Security flags                 0,                       // Authority       0,                       // Context object&pSvc                    // IWbemServices proxy);if (FAILED(hres)){cout << "Could not connect. Error code = 0x"<< hex << hres << endl;pLoc->Release();CoUninitialize();return 1;                // Program has failed.}cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;// Set the IWbemServices proxy so that impersonation// of the user (client) occurs.hres = CoSetProxyBlanket(pSvc,                         // the proxy to setRPC_C_AUTHN_WINNT,            // authentication serviceRPC_C_AUTHZ_NONE,             // authorization serviceNULL,                         // Server principal nameRPC_C_AUTHN_LEVEL_CALL,       // authentication levelRPC_C_IMP_LEVEL_IMPERSONATE,  // impersonation levelNULL,                         // client identity EOAC_NONE                     // proxy capabilities     );if (FAILED(hres)){cout << "Could not set proxy blanket. Error code = 0x"<< hex << hres << endl;pSvc->Release();pLoc->Release();CoUninitialize();return 1;               // Program has failed.}// Use the IWbemServices pointer to make requests of WMI. // Make requests here:// For example, query for all the running processesIEnumWbemClassObject* pEnumerator = NULL;hres = pSvc->ExecQuery(bstr_t("WQL"),bstr_t("SELECT * FROM Win32_NetworkAdapter"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator);if (FAILED(hres)){cout << "Query for processes failed. "<< "Error code = 0x"<< hex << hres << endl;pSvc->Release();pLoc->Release();CoUninitialize();return 1;               // Program has failed.}else{IWbemClassObject *pclsObj;ULONG uReturn = 0;while (pEnumerator){hres = pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);if (0 == uReturn){break;}VARIANT vtProp;VARIANT vtProp2;// Get the value of the Name propertyhres = pclsObj->Get(L"Description", 0, &vtProp, 0, 0);WCHAR* des;  des = vtProp.bstrVal;hres = pclsObj->Get(L"MACAddress", 0, &vtProp2, 0, 0);WCHAR* mac;mac = vtProp2.bstrVal;if (mac != NULL && des != NULL){wcout << "Description: " << des << endl;wcout << "Description: " << mac << endl;}VariantClear(&vtProp);VariantClear(&vtProp2);}}// Cleanup// ========pSvc->Release();pLoc->Release();CoUninitialize();return 0;
}

[机器码] 获取 MAC 地址的几种方法相关推荐

  1. Java 跨平台获取 MAC 地址的两种方法

    前言 有时我们因为软件授权或者其它需要获取主机唯一标识而需要获取用户主机的MAC地址,而本文则将介绍如何通过Java来实现跨平台获取MAC地址的两种方法,同时具体的代码也已上传到GitHub. 如果不 ...

  2. android 取mac地址,Android手机获取Mac地址的几种方法,androidmac

    Android手机获取Mac地址的几种方法,androidmac 最常用的方法,通过WiFiManager获取: /** * 通过WiFiManager获取mac地址 * @param context ...

  3. 获取MAC地址的四种方法(转)

    https://www.cnblogs.com/zlshmily/p/10058560.html zlshmily 在实际的应用系统中,我们往往会需要在程序运行时获取当前机器的网卡的MAC地址,以便作 ...

  4. android 手机固定mac地址吗,Android手机获取Mac地址的几种方法

    最常用的方法,通过WiFiManager获取: /** * 通过WiFiManager获取mac地址 * @param context * @return */ private static Stri ...

  5. android 4g获取mac地址,Android手机获取Mac地址的几种方法

    最常用的方法,通过WiFiManager获取: /** * 通过WiFiManager获取mac地址 * @param context * @return */ private static Stri ...

  6. Android手机获取IP地址的两种方法

    Android手机获取IP地址的两种方法 本文章讲解了WIFI和GPRS两种情况下获取手机IP地址的方法 1.使用WIFI 1,首先设置用户权限 AndroidManifest.xml添加: < ...

  7. 【转载】取得系统中网卡MAC地址的三种方法

    From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...

  8. win7修改mac地址的三种方法

    Win7修改MAC地址方法有以下三种: 方法一:使用Win7MAC地址修改工具 1,只适用于windows7系统的网卡MAC地址修改.XP的可以用,但没做什么测试. 2,部分windows7下的无线网 ...

  9. 给RTL8111网卡固定MAC地址的一种方法

    一些嵌入式主板集成了RTL8111网卡,出于成本原因没有加EEPROM,这样其MAC地址就无法固定,可能是随机数或全0,不利于使用.当然也可以利用脚本给它设置个MAC地址,但有时不记得修改,就有可能存 ...

最新文章

  1. 计算机连上网没网络连接,电脑显示本地网络连接但是宽带没连上怎么办? 爱问知识人...
  2. django实现长链接
  3. Linux 下关闭防火墙设置
  4. 提高Python运行效率的六个窍门
  5. OpenERP 中的on_change方法总结
  6. [论文泛读] Dynamic placement of virtual machines for managing sla violations (IM, 2007)
  7. H3C交换机MAC VLAN原理及配置示例
  8. 10年建模师给想学次世代游戏建模同学的一些忠告,太受益了!
  9. WPS表格(Excel)常用函数与技巧总结
  10. 35岁老年程序员的绝地翻身之路
  11. 《多媒体在初中数学中的运用研究》课题研究方案
  12. 小蛋机器人app_阿尔法蛋编程APP
  13. gridsome(三)——plugins
  14. Python中正确显示中文和负号
  15. 一、安装Centos
  16. 个人中心布局android,Android实现个人中心设置界面
  17. 【图解UDS】UDS汽车诊断标准协议(ISO 14229)带你入门到精通
  18. Html5 获取手机短信号码
  19. FileSizeUtil
  20. 2021年下半年信息系统项目管理师《综合知识》《案例分析》《论文》真题与答案

热门文章

  1. Vue.js(菜鸟自学)
  2. PDF文档怎么添加水印?手机就能轻松操作
  3. notepad++ , MarkdownPad2
  4. element自定义el-dialog标题样式,实现在title部分放置按钮
  5. jenkins+maven+gitlab+harbor+k8s的 CI/CD
  6. 基于LAMP环境搭建qq农场(小白教程)
  7. 福昕PDF阅读器无法修改、注释文档,解决办法!
  8. 背包问题状态转移方程
  9. 《渗透测试实践指南 必知必会的工具与方法 (原书第2版)》读书摘录
  10. Android感应检测Sensor(简单介绍),Android系统面试题