Windows10注册表修改网卡mac地址:
https://jingyan.baidu.com/article/84b4f56598958b60f6da32bd.html
xp 设置 修改网卡mack地址
https://jingyan.baidu.com/article/48a420579a90f1a924250484.html
vc++ 中如何读取和修改MAC的地址
读取mac地址方法:
CString GetMacByCmd()
{
//command buf size
const long lBufSize = 4096;
//command line string
char szFetCmd[] = "ipconfig /all";
//Search string
string str4Search = "Physical Address. . . . . . . . . : ";
CString strRet = _T("");
BOOL bRet;
SECURITY_ATTRIBUTES sa;
HANDLE hReadPipe,hWritePipe;
//Init
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
//Create pipe
bRet = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
if(FALSE == bRet)
{
return strRet;
}
//Get infomation
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWritePipe;
si.hStdOutput = hWritePipe;
si.wShowWindow = SW_HIDE; //Hide command windows
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
//Create command process
bRet = CreateProcess (NULL, szFetCmd, NULL, NULL, TRUE, 0, NULL,
NULL, &si, &pi );
char szBuffer[lBufSize + 1];
string strBuffer;
if (TRUE == bRet)
{
WaitForSingleObject (pi.hProcess, INFINITE);
//Read infomation
unsigned long count;
memset(szBuffer, 0x00, sizeof(szBuffer));
bRet = ReadFile(hReadPipe, szBuffer, lBufSize, &count, 0);
if(TRUE == bRet)
{
strBuffer = szBuffer;
long ipos;
ipos = strBuffer.find(str4Search);
//Get adress infomation
strBuffer = strBuffer.substr(ipos+str4Search.length());
ipos = strBuffer.find("\n");
strBuffer = strBuffer.substr(0, ipos);
strRet.Format("%s", strBuffer.c_str());
//remove“00-50-EB-0F-27-82”'-' get 0050EB0F2782
strRet.Remove('-');
strRet = strRet.Left(strRet.GetLength() - 2 );
}
}
//close handle
CloseHandle(hWritePipe);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hReadPipe);
return strRet;
}
VC获得正在使用的网卡的MAC地址
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
UINT i;
/* variables used to print DHCP time info */
struct tm newtime;
char buffer[32];
errno_t error;
ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
FREE(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
}
if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
pAdapter = pAdapterInfo;
while (pAdapter) {
if (pAdapter->DhcpEnabled) {
/*
printf("\t Lease Obtained: ");
/* Display local time
error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
if (error)
printf("Invalid Argument to _localtime32_s\n");
else {
// Convert to an ASCII representation
error = asctime_s(buffer, 32, &newtime);
if (error)
printf("Invalid Argument to asctime_s\n");
else
asctime_s returns the string terminated by \n\0
printf("%s", buffer);
}
*/
if( pAdapter->LeaseObtained > 10 ){
for (i = 0; i < pAdapter->AddressLength; i++) {
if (i == (pAdapter->AddressLength - 1))
printf("%.2X\n", (int) pAdapter->Address[i]);
else
printf("%.2X-", (int) pAdapter->Address[i]);
}
}
}
pAdapter = pAdapter->Next;
printf("\n");
}
} else {
printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);
}
if (pAdapterInfo)
FREE(pAdapterInfo);
修改IP、DNS、MAC工具VC源码实现
http://blog.csdn.net/cjf_iceking/article/details/7667522