根据MAC地址修改固定IP(附带IP&MAC扫描脚本)

因公司重新规划网络,以前的固定IP需重新分配,又不想一台台的去改,那个不是一般的累。用DHCP又不符合公司环境,所以就搞了这么个脚本出来。

一、VBS脚本,通过MAC地址来修改IP、子网掩码、网关和DNS.
'by Winters 2013-3-27 www.yltech.net
'为防止修改未成功而IP冲突,先修改IP获取为自动获取IP地址
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each objNetAdapter In colNetAdapters
errEnable = objNetAdapter.EnableDHCP()
errDNS = objNetAdapter.SetDNSServerSearchOrder(null)
Next

'取得本机器的网卡物理地址: MacAddress
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
For Each objNicConfig In colNicConfigs
Set objNic = objWMIService.Get _
("Win32_NetworkAdapter.DeviceID=" & objNicConfig.Index)

'本机器的网卡物理地址写入变量 : strMacAddress
strMacAddress = objNic.MACAddress

Next

'读取配置文件,这里需要有个IPlist.txt,最好是用绝对地址
Set fso = CreateObject("Scripting.filesystemobject")
Set fr = fso.OpenTextFile("iplist.txt", 1)
Do While fr.AtEndOfStream <> True
t = UCase(fr.ReadLine)
If InStr(t, strMacAddress) Then
t = Split(t, "|")
Name = t(0)
IPAddress = t(2)
Exit Do
End If
Loop

'修改IP地址
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
strIPAddress = Array(IPAddress)
strSubnetMask = Array("255.255.255.0")
strGateway = Array("192.168.0.1")
strGatewayMetric = Array(1)
strDNS = Array("192.168.0.1","192.168.0.2")

For Each objNetAdapter in colNetAdapters
errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
errDNS = objNetAdapter.SetDNSServerSearchOrder(strDNS)

Next

以上为VBS脚本部分,有同样需求的要根据自己的情况做些修改

一、IP&MAC扫描。以下为脚本:
@echo off&title 扫描MAC,IP,计算机名&color a&mode con: cols=60 lines=22
setlocal enabledelayedexpansion
echo.
echo ============== 制作者:http://www.yltech.net ===============
echo.
echo 扫描计算机名、MAC地址和内网IP,并保存到iplist.txt文件
echo.
echo ================== 制作不易,请保留版权 ==================
echo.
:: iqp -> 内网IP的前3位,ip1 -> 起始ip,ip2 -> 结束ip
set ipq=192.168.0
set /a ip1=1
set /a ip2=10
set /a con=0
set /a contotal=%ip2%-%ip1%+1
echo PCName MACAddress IPAddress >iplist.txt
for /l %%i in (!ip1!,1,!ip2!) do (
set ip=!ipq!.%%i
echo 扫描!ip!
ping !ip! -n 1 -w 1 >nul
if !errorlevel! equ 0 (
for /f "tokens=1" %%j in ('nbtstat -a !ip! ^| find /i "UNIQUE" ^| find /i "00"') do set pcname=%%j
for /f "tokens=4 delims=* " %%j in ('nbtstat -a !ip! ^| find /i "MAC Address"') do set mac=%%j
echo !pcname!;!mac:~0,-1!;!ip! >>iplist.txt
set /a con=!con!+1
)
)
echo 共%con%条记录
echo 共扫描:%contotal%台机器,扫描到:%con%个有效记录&pause >nul

1、修改脚本中IPQ(网段)\IP1(起始IP)和IP2(结束IP)
2、修改生成的iplist.txt文件,每行有两处需修改。第一是修改间隔符“;”为“|”,第二是修改获取的MAC地址中间的分隔符“-”为“:”另外可以的话清除IP地址后面的那个空格。

 

我个人博客也有一份http://www.yltech.net/2013/03/macipipmac.html,可能是我不会操作,贴上来的代码缩进位都没了。转到这里来了传一份附件吧。

你可能感兴趣的:(脚本,mac,bat,vbs,固定ip)