简单的修改方法
读者可以在桌面上的“网上邻居”图标上单击右键,选择“属性”,在弹出的“网络连接”的对话框中,在“本地连接”图标上单击右键,选择“属性”,会弹出一个“本地连接属 [img]http://adsp.online.sh.cn/04052704.gif[/img] ([url]http://ads.online.sh.cn/event.ng/Type=click&FlightID=2663&AdID=3291&TargetID=418&Segments=1[/url],89,442,899&Targets=126,418,864&Values=31,43,51,60,72,91,100,110,150,193,210,355,397,441,609,625&RawValues=&Redirect=http://www.sia.sh.cn/) 性”的对话框,单击“配置”按钮,选择“高级”,选中左栏“属性”中“Network Address”(其实,并非所有的网卡,对物理地址的描述都用“Network Address”,如Intel的网卡便用“Locally Administered Address”来描述,只要在右栏框中可以找到“值”这个选项就可以了),然后选中右栏框“值”中的上面一个单选项(非“不存在”),此时便可在右边的框中输入想改的网卡MAC地址,形式如“000B6AF6F4F9”。点击“确定”按钮,修改就完成了。
不过,有一些网卡没有这个选项,不要着急,可以先更新网卡的驱动程序试试,一般情况下,更新驱动之后都会出现这个选项。但是依然有特殊情况,无论怎么修改都没有这个选项,那怎么办呢?接着往下看,下面的方法可以说是万能的!
注册表修改方法
第1步,单击“开始”,选中“运行”,键入“regedit”调出注册表。
第2步,在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0000、0001、0002 等主键下,查找 DriverDesc ,内容为要修改的网卡的描述,如Intel的网卡会被描述成“Intel(R) PRO/100+ Management Adapter”,3Com的网卡会被描述成“3Com EtherLink XL 10/100 PCI For Complete PC Management NIC (3C905C-TX)”等。
注:上面提到的关于网卡描述的选项出现的位置,和网卡本身以及操作系统有关。不同的网卡可能出现在不同的主键下,而同一网卡用不同版本的操作系统(如OEM版,VOL或者VLK等)也会出现在不同的位置。而这一步的任务就是找到含有网卡描述的主键。
第3步,选中在第二步找到的主键,在右栏框中添加一个字符串,命名为“Network Address”,其值设为要改的MAC地址,形式如“000B6AF6F4F9”。
注:到这一步,修改网卡物理地址的任务可以说是完成了,有的网卡需要重启以下才能正常的工作,而有的只需一点点的时间“反应”一下而已。下面的几步是为了以后再修改物理地址方便用的,如果读者不再需要再次修改,到这里可以止步了。
第4步,在“第一步选中的主键”/Ndi/params下添加一项名为“NetworkAddress”的主键,此时一般都会随着在右栏框中产生一个“(默认)”的字符串,将其值设置为最终想要修改的MAC地址,形式如“000B6AF6F4F9”。如果没有此字符串,读者也可自行添加此字符串。
注:此步骤就是为网卡设置一个初始MAC地址。
第5步,在“NetworkAddress”的主键下继续添加名为“ParamDesc”的字符串,其作用为指定“NetworkAddress”主键的描述,其值可自己命名,如“Network Address”,这样在网卡的高级属性中就会出现“Network Address”选项,就是刚在注册表中加的新项“NetworkAddress”,以后只要在此修改MAC地址就可以了。
第6步,在“NetworkAddress”的主键下继续添加名为“Optional”的字符串,其值设为“1”,则以后在网卡的高级属性中选择“Network Address”项时,右边会出现“不存在”选项。
第7步,重新启动计算机(不是一定要重新启动,但要视不同网卡的要求而定,不过,重启没有任何差错。),按照第一种方法找到“高级”选项就可发现此时“属性”栏中已有“Network Address”的选项,现在读者可以用来直接修改MAC地址或恢复原来的地址。
二:局域网大盗技术分析5--修改网卡的物理地址
找了不少方法,也没有有效快捷的修改网卡物理地址的方法。因为网卡的物理地址实际上不可重复的,但是在window启动网络连接的时候,会读取注册表,如果在注册表设置了数据,就会将其写入网卡的eeprom中。所以最终我还是选择了修改注册表的方法来修改MAC地址。
这段程序也来自网络,应该是个中国人写的,虽然我在国外网站上搜到的。再次感谢原作者和google。
#Region "修改网卡的物理地址"
Public Function ChangeMac(ByVal macs As String) As Boolean
ApMAC = macs
If IsOkay() = False Then
Return False
Exit Function
End If
Dim regKey As Microsoft.Win32.RegistryKey
Dim Addr As String
Addr = GetRoot(Form1.Lab_Wangka.Text)
regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(Addr, True)
regKey.SetValue("NetworkAddress", macs.Replace(":", ""))
Return True
End Function
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 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", "False").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 ApMAC = "" Then
MsgBox("You didn't enter a MAC Address", MsgBoxStyle.Critical)
Return False
End If
Dim ed As String = ApMAC.Replace(":", "")
If ed.Length <> 12 Then
MsgBox("A MAC Address must have a length of 12", MsgBoxStyle.Critical)
Return False
End If
Try
If Form1.Lab_Wangka.Text = "" 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
#End Region