xiaomingtt 发表于 2024-8-26 14:24

【VBS】修改IP地址~适用于其他工具无法修改IP时

本帖最后由 xiaomingtt 于 2024-8-27 10:03 编辑

当网卡的属性页面被禁用,netsh命令被禁用,更改适配器设置后切换的网络连接页面一片空白,测试了一下在论坛找的几款修改工具
【7.29更新】IP地址修改器_5.0.6.9 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
【开源】IP配置工具_2.6__一键切换IP、改Mac、计算机名 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
ip切换工具ipwhiz1.72绿色免费版 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
NetMagic网络地址快速切换工具 - 『原创发布区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
局域网IP扫描&一键更换本机IP小工具 - 『原创发布区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
本机IP一键设置 - 『原创发布区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
全部修改失败。
看下面两款软件截图,无法获取网卡信息,其他的有的可以获取网卡但均无法修改IP和掩码。


鉴于我们单位修改IP是刚需,于是写了段VBS代码,但正常修改IP失败后会通过修改注册表达到修改IP的目的(通过注册表修改需要重启电脑),代码自用的,需要的请自行修改。
strComputer = "."
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")

Do
    strIP = InputBox("请输入IP地址", "IP地址修改器", "192.168.118.111")
    If strIP = False Then Wscript.Quit
Loop Until ValidateIP(strIP)

strDNS1 = "1.2.4.8"
strDNS2 = "1.1.1.1"

a = Split(strIP, ".")(2)
If a = "118" Or a = "119" Then
    strMask = "255.255.254.0"
    strGW = "192.168.119.254"
Else
    strMask = "255.255.255.0"
    strGW = Left(strIP, InStrRev(strIP, ".") - 1) & ".254"
End If

Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=true")
For Each objItem in colItems
    If (InStr(objItem.Description, "PCI") > 0) Then MAC = objItem.MACAddress
Next

Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where MACAddress='" & MAC & "'")
For Each objNetAdapter In colNetAdapters
    AdapterGUID = objNetAdapter.SettingID
    Exit For
Next

If ChangeNetworkConfig(objWMIService, strIP, strMask, strGW, strDNS1, strDNS2, MAC) Then
    MsgBox "IP地址已更改。", 64, "IP地址修改器"
Else
    RegBasePaths = Array("SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & AdapterGUID, _
                         "SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\" & AdapterGUID, _
                         "SYSTEM\ControlSet002\Services\Tcpip\Parameters\Interfaces\" & AdapterGUID)
    For Each RegBasePath in RegBasePaths
      Msg = Msg & vbCrLF & ChangeIPWithREG(RegBasePath, strIP, strMask, strGW, strDNS1, strDNS2)
    Next
    MsgBox Msg, 64, "IP地址修改器"
End If

Function ValidateIP(strIP)
    Set re = New Regexp
    re.Pattern = "^192\.168\.(?:11|12)\.(?:25|2|1{2}|?)$"
    re.IgnoreCase = True
    re.Global = True
    ValidateIP = re.Test(strIP)
    If Not ValidateIP Then MsgBox "地址非法", 16, "IP地址修改器"
End Function

Function ChangeNetworkConfig(objWMIService, strIP, strMask, strGW, strDNS1, strDNS2, MAC)
    Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where MACAddress='" & MAC & "'")
    strIPAddress = Array(strIP)
    strSubnetMask = Array(strMask)
    strGateway = Array(strGW)
    strGatewayMetric = Array(1)
    arrDNSServers = Array(strDNS1, strDNS2)
    For Each objNetAdapter In colNetAdapters
      errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
      errGateways = objNetAdapter.SetGateways(strGateway, strGatewayMetric)
      errDNS = objNetAdapter.SetDNSServerSearchOrder(arrDNSServers)
      If errEnable = 0 And errGateways = 0 Then
            ChangeNetworkConfig = True
            Exit Function
      End If
    Next
    ChangeNetworkConfig = False
End Function

Function ChangeIPWithREG(sPath, IPAddress, SubnetMask, Gateway, DNS1, DNS2)
    hKey = &H80000002
    Set objWMIService = GetObject("winmgmts:\\.\root\default:StdRegProv")
    v1 = objWMIService.SetMultiStringValue(hKey, sPath, "IPAddress", Array(IPAddress))
    v2 = objWMIService.SetMultiStringValue(hKey, sPath, "SubnetMask", Array(SubnetMask))
    v3 = objWMIService.SetMultiStringValue(hKey, sPath, "DefaultGateway", Array(Gateway))
    v4 = objWMIService.SetStringValue(hKey, sPath, "NameServer", DNS1 & "," & DNS2)
    If v1 = 0 And v2 = 0 And v3 = 0 And v4 = 0 Then
      ChangeIPWithREG = "IP设置成功,重启电脑后生效。"
    Else
      ChangeIPWithREG = "IP配置设置失败。"
    End If
End Function

j2017 发表于 2024-8-27 08:51



```vbscript
' 定义默认的计算机名称
strComputer = "."
' 通过WMI连接到本地计算机的CIMV2命名空间
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
' 循环直到用户输入有效的IP地址
Do
    ' 弹出输入框让用户输入IP地址
    strIP = InputBox("请输入IP地址", "IP地址修改器", "192.168.118.111")
    ' 如果用户点击取消,则退出脚本
    If strIP = False Then Wscript.Quit
Loop Until ValidateIP(strIP)
' 定义默认的DNS服务器地址
strDNS1 = "1.2.4.8"
strDNS2 = "1.1.1.1"
' 提取输入IP地址的第三段,用于判断子网掩码和默认网关
a = Split(strIP, ".")(2)
' 根据第三段地址设置子网掩码和默认网关
If a = "118" Or a = "119" Then
    strMask = "255.255.254.0"
    strGW = "192.168.119.254"
Else
    strMask = "255.255.255.0"
    ' 构建默认网关地址
    strGW = Left(strIP, InStrRev(strIP, ".") - 1) & ".254"
End If
' 查询启用的网络适配器配置
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=true")
' 遍历所有启用的网络适配器
For Each objItem in colItems
    ' 查找包含"PCI"描述的网络适配器并记录其MAC地址
    If (InStr(objItem.Description, "PCI") > 0) Then MAC = objItem.MACAddress
Next
' 查询具有特定MAC地址的网络适配器配置
Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where MACAddress='" & MAC & "'")
' 遍历查询结果,获取网络适配器的设置ID
For Each objNetAdapter In colNetAdapters
    AdapterGUID = objNetAdapter.SettingID
    ' 找到适配器后退出循环
    Exit For
Next
' 尝试更改网络配置
If ChangeNetworkConfig(objWMIService, strIP, strMask, strGW, strDNS1, strDNS2, MAC) Then
    ' 如果成功,则弹出消息框通知用户
    MsgBox "IP地址已更改。", 64, "IP地址修改器"
Else
    ' 如果失败,则尝试通过注册表更改配置
    RegBasePaths = Array("SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & AdapterGUID, _
                         "SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\" & AdapterGUID, _
                         "SYSTEM\ControlSet002\Services\Tcpip\Parameters\Interfaces\" & AdapterGUID)
    ' 遍历注册表路径并尝试更改配置
    For Each RegBasePath in RegBasePaths
      Msg = Msg & vbCrLF & ChangeIPWithREG(RegBasePath, strIP, strMask, strGW, strDNS1, strDNS2)
    Next
    ' 弹出消息框显示结果
    MsgBox Msg, 64, "IP地址修改器"
End If
' 验证IP地址是否合法的函数
Function ValidateIP(strIP)
    ' 创建正则表达式对象
    Set re = New Regexp
    ' 设置正则表达式模式
    re.Pattern = "^192\.168\.(?:11|12)\.(?:25|2|1{2}|?)$"
    re.IgnoreCase = True
    re.Global = True
    ' 测试输入的IP地址是否匹配
    ValidateIP = re.Test(strIP)
    ' 如果不匹配,则弹出错误消息
    If Not ValidateIP Then MsgBox "地址非法", 16, "IP地址修改器"
End Function
' 更改网络配置的函数
Function ChangeNetworkConfig(objWMIService, strIP, strMask, strGW, strDNS1, strDNS2, MAC)
    ' 查询具有特定MAC地址的网络适配器配置
    Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where MACAddress='" & MAC & "'")
    ' 定义IP地址、子网掩码、默认网关和DNS服务器数组
    str
```

xiaomingtt 发表于 2024-8-27 08:48

grrr_zhao 发表于 2024-8-26 20:28
第一个没有失效

对正常环境肯定没失效,但对我们特殊环境是没用的,看我的截图,网卡一个也没识别出来,就没办法修改了.

oks 发表于 2024-8-26 14:27

支持一下,还是这款软件好运

ibocai 发表于 2024-8-26 14:49

来个大佬解答一下,这个好不好用?目前还真没找到合适的好用的

xin1you1di1 发表于 2024-8-26 15:14

支持一下,还是这款软件好用

btqedu 发表于 2024-8-26 15:15

还不错,下载支持一下

ppquartz 发表于 2024-8-26 15:40

楼主 软件在哪里下载呀

rs0128 发表于 2024-8-26 16:42

我也经常在内网和外网中经常切换,急需一个改IP的软件。

zhangfangyu 发表于 2024-8-26 16:45

支持,我们公司电脑也是,经常打不开网络修改界面

sadffg 发表于 2024-8-26 17:39

感谢分享!!!

style123 发表于 2024-8-26 19:19

蹲个现成的:keai
页: [1] 2 3
查看完整版本: 【VBS】修改IP地址~适用于其他工具无法修改IP时