Hola,
Encontre un codigo que supuestamente lo cambia pero no funciona, supongo que en Windows XP si pero para Windows 7 en adelante no, alguna sugerencia.
Saludos
Imports System.Management
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FillNetworkAdapters()
End Sub
Private Sub FillNetworkAdapters()
Dim mc As System.Management.ManagementClass
Dim mo As ManagementObject
mc = New ManagementClass("Win32_NetworkAdapterConfiguration")
Dim moc As ManagementObjectCollection = mc.GetInstances()
For Each mo In moc
If mo.Item("IPEnabled") = True Then
Dim strAdapter As String
strAdapter = mo.Item("Caption").ToString().Substring(11)
combo_network.Items.Add(strAdapter)
End If
Next
End Sub
Private Function GetMACAddress(ByVal Adapter As String) As String
Dim mc As System.Management.ManagementClass
Dim mo As ManagementObject
mc = New ManagementClass("Win32_NetworkAdapterConfiguration")
Dim moc As ManagementObjectCollection = mc.GetInstances()
For Each mo In moc
If mo.Item("IPEnabled") = True Then
Dim strAdapter As String
strAdapter = mo.Item("Caption").ToString().Substring(11)
If strAdapter = Adapter Then
Return mo.Item("MacAddress").ToString()
End If
End If
Next
End Function
Private Sub combo_network_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles combo_network.SelectedIndexChanged
label_mactext.Text = GetMACAddress(combo_network.SelectedItem.ToString)
End Sub
Private Function DoPadding(ByVal x As String) As String
Dim Ret As String
Dim z As Integer
Ret = x
If Len(x) < 4 Then
For z = 1 To 4 - Len(x)
Ret = "0" & Ret
Next
End If
Return Ret
End Function
Private Sub ShowRestart()
Dim res As MsgBoxResult = MsgBox("Your MAC Address has been
changed. In order to make the changes take effect, either restart your
computer or enable and disable the changed Network Adapter.",
MsgBoxStyle.Information)
End Sub
Private Function GetRoot(ByVal Adapter As String) As String
Dim regKey As Microsoft.Win32.RegistryKey
Dim i As Integer = 0
Do
Dim Root As String = "SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\"
Dim Last As String = DoPadding(i)
regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(Root & Last, True)
Try
Dim cAdapter As String = regKey.GetValue("DriverDesc").ToString()
If cAdapter = Adapter Then
Return Root & Last
End If
Catch
Exit Do
End Try
i += 1
Loop
End Function
Private Function IsOkay() As Boolean
If mac_text.Text = "" Then
MsgBox("You didn't enter a MAC Address", MsgBoxStyle.Critical)
Return False
End If
Dim ed As String = mac_text.Text.Replace(":", "")
If ed.Length <> 12 Then
MsgBox("A MAC Address must have a length of 12", MsgBoxStyle.Critical)
Return False
End If
Try
If combo_network.SelectedItem.ToString = "" Then
MsgBox("No Network Adapter selected", MsgBoxStyle.Critical)
Return False
End If
Catch
MsgBox("No Network Adapter selected", MsgBoxStyle.Critical)
Return False
End Try
Dim noerror As Boolean = True
Dim i As Integer
For i = 0 To ed.Length - 1
If IsHex(ed.Substring(i, 1)) = False Then
MsgBox("MAC Address in wrong format", MsgBoxStyle.Critical)
Return False
End If
Next
Return True
End Function
Private Function IsHex(ByVal l As String) As Boolean
Dim table As String = "0123456789ABCDEF"
Dim i As Integer
For i = 0 To table.Length - 1
If l = table.Substring(i, 1) Then
Return True
End If
Next
Return False
End Function
Private Sub bt_defaultmac_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_defaultmac.Click
If IsOkay() = False Then
Exit Sub
End If
Dim regKey As Microsoft.Win32.RegistryKey
Dim Addr As String = GetRoot(combo_network.SelectedItem.ToString())
regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(Addr, True)
Try
regKey.DeleteValue("NetworkAddress")
Catch
'Do NOTHING
End Try
ShowRestart()
End Sub
Private Sub bt_update_Click(sender As Object, e As EventArgs) Handles bt_update.Click
If IsOkay() = False Then
Exit Sub
End If
Dim regKey As Microsoft.Win32.RegistryKey
Dim Addr As String = GetRoot(combo_network.SelectedItem.ToString())
regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(Addr, True)
regKey.SetValue("NetworkAddress", mac_text.Text.Replace(":", ""))
ShowRestart()
End Sub
End Class
A mi conocimiento, creo que depende del driver de la tarjeta de red. En mi experiencia he podido cambiarla en Windows XP, al parecer los drivers para ese sistema operativo no tienen esa protección.
Nota: nunca he probado con una tarjeta ethernet, lo he hecho con tarjetas para conexiones wi-fi. Aunque debería seguir el mismo principio
Hola,
Pues si funciona fue un error al parecer del sistema estaba mareado disculpa la demora.
Saludos
Se me olvidó comentarte que tienes que Deshabilitar el dispositivo y vovlerlo a Habilitar. Quizas fue por eso que dices que "el sistema estaba mareado" y quizas se actualizo el cambio al reiniciar la PC. Salu2s
Hola,
Gracias por el detalle, pues nada hace dias que habia resuelto se me paso por completo responder aqui.
Pues la MAC si se puede cambiar sin problema alguno en cualquier Windows PERO:
Si es un adaptador NO WIRELESS todo va super
Si se trata de un adaptador wireless ya la cosa cambia supongo que a partir del Windows 7 se introdujo una protección para esto, estuve Googleando y no encontre algun paper al respecto supongo que para evitar el MAC SPOOFING de esta forma. Aclarar que puedes cambiarlo pero tienes que setear el 2do caracter de la MAC con algunos predefinidos un 2 o D no recuerdo ahora bien y estoy trabajando.. :-X
Si alguien sabe mas sobre esto y si hay alguna forma de burlar esa protección...
Saludos