Форум программистов, компьютерный форум CyberForum.ru

Изменение mac адреса - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Sahr_2011
1 / 1 / 0
Регистрация: 21.09.2011
Сообщений: 31
05.04.2012, 10:31     Изменение mac адреса #1
Стоит задача программно изменить mac адрес устройства.
Помогите чем небуть url или примерчиком может кто то Даст вектор куда копать ))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 10:31     Изменение mac адреса
Посмотрите здесь:

C++ Objective C MAC OS
Mac OS Timers C++
Ошибка с получением Mac-адреса сетевого адаптера вызовом NetBIOS C++ Builder
C++ Получение Mac-адреса сетевого адаптера.
Проверка mac адреса C++
C++ Написать программу на Си под unix (вывод, ip, маски, широковещательного адреса, mac)
Изменение адреса указателя C++
mac-adres локалки C++ Builder
C++ Компиляция на mac в терминале
C++ Определение MAC адреса
C++ Определение mac-адреса (ARP)
C++ Builder Определение mac-адреса сетевой карты

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
05.04.2012, 17:03     Изменение mac адреса #2
А ты гуглить пробовал? Нашел код по первой же ссылки. У нас запрещены ссылки на другие форумы, поэтому вот код, который нашел:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
 #include <iostream.h>
   #include <stdio.h>
   #include <windows.h>
   #include <setupapi.h>
   #include <devguid.h>
   #include <regstr.h>
   #include <stdlib.h>
   #include "string.h"
 
   unsigned long enableDisable = -1;
   char* newAddr;
 
   int main( int argc, char *argv[ ], char *envp[ ] )
   {
      if(argc > 2){
         enableDisable = atoi(argv[1]);
         newAddr = argv[2];
      }
      else{
         cout << "CHMAC - Change MAC address. Also sounds cool when pronounced as one word.\r\nUSAGE: chmac adapter address\r\nwhere adapter is the desired adapter number from the list below,\r\nand address is a MAC address in the format dd11223344f8 or RESET to reset\r\nto the default value. NOTE: A MAC address can only contain hexadecimals\r\n(0123456789ABCDEF). There is NO automatic checking!\r\nDisclaimer: This program is provided \"AS-IS\". Anything that may or may not\r\nhappen because of it is entirely the user's fault.\r\n\r\n";
      }
 
       HDEVINFO hDevInfo;
       SP_DEVINFO_DATA DeviceInfoData;
       SP_PROPCHANGE_PARAMS Param;
       DWORD i;
 
       // Create a HDEVINFO with all present devices.
       hDevInfo = SetupDiGetClassDevs(NULL,
           0, // Enumerator
           0,
           DIGCF_PRESENT | DIGCF_ALLCLASSES );
       
       if (hDevInfo == INVALID_HANDLE_VALUE)
       {
           return 1;
       }
       
       // Enumerate through all devices in Set.
       
       DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
       for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
           &DeviceInfoData);i++)
       {
           DWORD DataT;
           LPTSTR buffer = NULL;
           DWORD buffersize = 0;
           
           unsigned long netguid = 1295444338;
 
           while (!SetupDiGetDeviceRegistryProperty(
               hDevInfo,
               &DeviceInfoData,
               SPDRP_DEVICEDESC,
               &DataT,
               (PBYTE)buffer,
               buffersize,
               &buffersize))
           {
               if (GetLastError() == 
                   ERROR_INSUFFICIENT_BUFFER)
               {
                   if (buffer) LocalFree(buffer);
                   buffer = (LPTSTR)LocalAlloc(LPTR,buffersize);
               }
               else
               {
                   break;
               }
           }
 
           if(DeviceInfoData.ClassGuid.Data1 == netguid && enableDisable == -1) cout << i << ": " << buffer << endl;
 
 
 
         if(i == enableDisable && DeviceInfoData.ClassGuid.Data1 == netguid){
            HKEY k = SetupDiOpenDevRegKey(hDevInfo, &DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DRV, KEY_ALL_ACCESS);
            if(k == INVALID_HANDLE_VALUE){
               cout << "ERROR: Cannot open driver information for editing!" << endl;
               exit(1);
            }
            TCHAR regData[128];
            unsigned long regDataLen = sizeof(regData);
            if(RegQueryValueEx(k, "NetworkAddress", NULL, NULL, (unsigned char*)&regData, &regDataLen) == 0){
               //something exists; KILL IT!!!
               cout << "Previous value exists; deleting..." << endl;
               RegDeleteValue(k, "NetworkAddress");
            }
            if(stricmp((const char*)newAddr, "reset") != 0){
               if(RegSetValueEx(k, "NetworkAddress", 0, REG_SZ, (const unsigned char*)newAddr, strlen((const char*)newAddr)) != ERROR_SUCCESS){
                  cout << "ERROR: Could not set new MAC address!" << endl;
                  exit(1);
               }
            }
            else{
               cout << "MAC reset successful. Proceeding..." << endl;
            }
            cout << "Change successful. Rebooting adapter..." << endl;
            RegCloseKey(k);
            Param.ClassInstallHeader.cbSize = sizeof(Param.ClassInstallHeader);
            Param.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
            Param.HwProfile = 0;
            Param.Scope = DICS_FLAG_GLOBAL;
            //disable it:
            Param.StateChange = DICS_DISABLE;
            SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER *)&Param, sizeof(Param));
            SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DeviceInfoData);
            //reenable it:
            Param.StateChange = DICS_ENABLE;
            SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER *)&Param, sizeof(Param));
            SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DeviceInfoData);
            cout << "CHMAC complete." << endl;
         }
 
 
           if (buffer) LocalFree(buffer);
       }
       
       
       if ( GetLastError()!=NO_ERROR &&
            GetLastError()!=ERROR_NO_MORE_ITEMS )
       {
           return 1;
       }
       
       SetupDiDestroyDeviceInfoList(hDevInfo);
       
       return 0;
   }
особо не вникал, работоспособность не проверял, но автор утверждает, что код рабочий и меняет MAC адрес.
Yandex
Объявления
05.04.2012, 17:03     Изменение mac адреса
Ответ Создать тему
Опции темы

Текущее время: 00:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru