网吧怎样批量更改IP里的DNS

2022-08-16 教育 108阅读
你是不是觉得每次网吧更换系统都很麻烦呢。所以想到这点晚上加了一个通宵的班做了一个自动修改计算机信息的脚本。希望给出意见

1,配置文件的名字不可以改动为:start.ini
1-7行的顺序不要改动。。
配置文件的内容格式如下

实在太无聊了。现在来跟大家仔细说说吧
电脑名称=A '这里呢是改成你计算机名的前面一个字母。
'有的网吧是分区来设置IP的这样的就高重新改下脚本就可以达到这个目的了

子网掩码=255.255.255.0
默认网关=192.168.0.1
首选 DNS=202.96.128.86
备用 DNS=202.96.128.166
内部网络号=00000000
路油 MAc=00-0F-E2-55-55-B6
这上面的七行大家都可以根据自己的配置和地区来改.
'注意内部网络号的话因该是一样的所以应该不用改
MAX=00,19,e0,70,3e,b7 ip=192.168.0.175
MAX=00,19,e0,75,3e,b8 ip=192.168.0.178
MAX=00,19,e0,70,34,b8 ip=192.168.0.177
MAX=00,19,50,70,3e,b8 ip=192.168.0.174
MAX=00,19,e0,50,3e,b8 ip=192.168.0.173
MAX=00,19,e0,70,3e,b8 ip=192.168.0.172
MAX=00,19,40,70,3e,b8 ip=192.168.0.171
MAX=00,19,e0,50,37,b8 ip=192.168.0.170
MAX=00,49,e0,70,4e,b8 ip=192.168.0.174
MAX=00,19,e0,70,3e,b8 ip=192.168.0.175
MAX=40,19,e0,40,3e,b8 ip=192.168.0.179
这里的IP注意一定要按照排序来写.中间有个空格大家别给丢了
'把上面保存为start.ini在加上你整个网吧的MAC地址及IP地址
'把下面保存为*.vbs放在ini配置文件同一目录。

On Error Resume next '防止错误.如果有错误继续执行下一条
dim macname,nfile,reip,mright
Dim nf,macs,fso,mins,WshShell
Dim arrDNSServers,colComputers
Dim ARP,GatewayIP,IPXV,myipname
Dim mnetmask,MDNS1,NDNS2'定义变量方便我们存放对象或是得到的返回值.也可以不定义,
'是养成习惯比叫好,因为脚本语言终究不是较高级的语言如果你以后想学别的语言的话
'都要严格按照每种语言的规定来定义常量,变量等
Set fso=CreateObject("scripting.filesystemobject") '引用一个文件系统类并且赋值的方式给变量FSO
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") '引用WMI命名空间CIMV2,一旦引用了
'WMI名空间那个我们就可以使用空间里面存放的各种类,关于WMI的详细资料请大家在论坛里下载
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") '这个是使用WQL
'查询语句来查询你想查询的相关类的属性并把返回值以一个对象的形式赋给一个变量.这样我们
'就可以用FOR循环来检测我们想要的属性或方法了.WQL查询有好多种,最常有的有异步,半步等,
'在这里就不把话题拉开啦.只要你们知道就行了
'上面这句WQL的大体意思就是 查询网卡等的相关属性都在这个类里.这一个类就有几十种属性,
'没种属性都是不同的功能,我们就不每种都去说了
Set colComputers = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem") 'WQL查询返回一个系统用户等相关属性给一个对象变量
Set objNetworkSettings = objWMIService.Get("Win32_NetworkAdapterConfiguration")'WQL查询
Set WshShell = WScript.CreateObject("WScript.Shell")' 引用一个SHELL
Set objquery=objWMIService.execquery _
("select * from Win32_NetworkAdapterConfiguration where index=8") 'WQL查询
For Each objarray In objquery
macs=objarray.MACAddress '这里就是枚举出NetworkAdapter....类的网卡属性,还有别的很多属性
'大家有兴趣的自己在论坛下工具一个一个的看.没个属性都说得很清楚的

Next
macname=Replace(macs,":","-")'将得到本机的网卡地址中的[:]替换成[-],
'因为我本得到的格式为00:19:e5:b6:f4:2e这样的格式
If fso.fileexists(".\start.ini")<>true Then MsgBox "配置文件不存在" '检测配制文件是否存在
Set nf=fso.opentextfile(".\start.ini",1) '打开配制文件
If Err.number<>0 Then MsgBox "打开出错":wscript.quit(1) '如果出现错误就提示,退出
Do While nf.AtEndOfStream<>True '当文件指针不是文件尾,因为我们文本是N多行和N多列组成的
'所以我们要用一个循环来读取里面的信息,打开文件的时候文件指针都是默认指向文件的第一行一列
'如果打开一个文件AtEndOfStream返回的是false的话呢表示这个这个指针不在文件尾如果返回TRUE
'那么指针指向文件结尾..如果一个文本是空的话你打开的时候AtEndOfStream的返回值因该总是tRUE
nfile=UCase(nf.readline()) '一行一行读入,为大写
mins=InStr(nfile,macname) '检测是否有网卡地址的存在
If mins=0 Or mins="" Or mins=Null Then '判断是否读到了网卡地址,如果=0 或是空又或是NULL
minstr=InstrRev(nfile,"=") '检测读入的一行里面的=在这行最后出现的地方,不包括=返回一个数字
mright=Right(nfile,Len(nfile)-minstr) 'lan返回一整行的个数.在减去我们刚搜索的及↑面这条
i=i+1 '将I设置为一个循环记数器.将我们所循环的次数存在I里面,
Select Case i '下面的是一个判断语句,当i的值是下面其中的一个对应的话就执行相应的操作
Case 1 '电脑名称
ocsname=mright
Case 2 '子网掩码
mnetmask=mright
strSubnetMask = Array(mright)
Case 3 '默认网关
GatewayIP=mright
strGateway = Array(GatewayIP)
Case 4 '首选DNS
MDNS1=mright
Case 5 '备用DNS
NDNS2=mright
Case 6 '内部网络号
IPXV=mright
If IPXV="" Then IPXV="00000000"
Case 7 '路油绑定的MAC地址
ARP=mright
Case else
End Select '结束查询语句select
arrDNSServers=Array(MDNS1,NDNS2) 'DNS '将DNS存放在一个数组里面方便等下设置DNS
'的函数调用
else '这里值得注意的是 IF语句...记得看清楚哪个IF是个那个是一对
minstr=InstrRev(nfile,"=")
mright=Right(nfile,Len(nfile)-minstr)
myipname=mright'IP地址
strIPAddress = Array(myipname)
qname=InstrRev(mright,".")
ipright=Right(mright,Len(mright)-qname) '读去IP的后面数字来做电脑名注意这里,如果你想IP等于192.168.0.2
'计算机名要等于 A001的话这里就减去1也就是myipname=mright-1
If ipright<10 Then '判断如果读得的数小去于10 就在前面加两个00
mipname="00" & ipright
ElseIf ipright<100 Th

en'判断如果读得的数小去于100 就在前面加一个00
mipname="0" & ipright
ElseIf ipright>100 Or ipright <255 Then'判断如果读得的数大于100或等于<255不加
mipname=ipright '这里是读得的计算机名
End If
End If
If mipname<>"" Then '判断有没读到IP数据 '如果有执行变量
setcsname=ocsname & mipname '最后得到的电脑名称 也就是START.INI读到的前蕞加上IP的后面一个数值
End if
Loop
'这里是弹出开始
mybox=MsgBox("信息将改变如以下,是否执行修改呢?" _
&vbcrlf&"更改后的电脑名称为 :"&setcsname&vbcrlf _
&"更改后的 IP 地址为 :" &myipname&vbcrlf&"更改后的子网掩码为 :" _
&mnetmask&vbcrlf&"更改后的默认网关为 :" _
&Space(1)&GatewayIP&vbcrlf&"更改后的首选 DNS为 :" &MDNS1&vbcrlf _
&"更改后的备选 DNS为:"&NDNS2&vbcrlf&"更改后内部网络号为 :"&Space(2)&IPXV&vbcrlf _
&"物理网卡地址为 :" &ARP &vbcrlf&Space(6)&"将要绑定的ARP地址为 :" _
&vbcrlf&Space(2)&GatewayIP _
&" "&ARP,vbyesno,"『迈思技术论坛之脚本技术交流』")
'弹出到这里结束
If mybox=6 Then
'如过你不想弹出提示的话你就直接把mybox和IF删除就可以了,但是如果你觉得还不够你可以加代码
myres colNetAdapters,colComputers,objNetworkSettings, _
WshShell,setcsname,arrDNSServers,strIPAddress, _
strSubnetMask,strGateway,IPXV,ARP,GatewayIP,myipname,macname '这里是给函数传递实际参数,
'就是把我们上面所读到的文本我们想要的部分,按照函数的参数规定传递给函数,,这里的函数规定就是
'好像你上网的时候要设置IP,而且IP也不能随便设置,,
Else
wscript.quit(1)
End if

下面才是真正的主题,下面就是这个自定义函数来设置各项操作,把得到的参数做你想得到的功能,
Function myres(colNetAdapterss,colComputerss,objNetworkSettingss, _
WshShells,setcsnames,arrDNSServerss,strIPAddresss, _
strSubnetMasks,strGateways,IPXVs,ARPs,GatewayIPs,myipnames,macss)
'这里我把对象也以参数的形式传递给这个函数,在函数内部来执行WQL返回的一个对象,,
For Each objComputer in colComputerss
objComputer.rename setcsnames
'上面是计算机名字
For Each objNetAdapter in colNetAdapterss
errDNS=objNetAdapter.SetDNSServerSearchOrder(arrDNSServerss)'设置DNS
errEnable = objNetAdapter.EnableStatic(strIPAddresss, strSubnetMasks)'设置IP
errGateways = objNetAdapter.SetGateways(strGateways, strGatewaymetric)'默认网关
Next
Next
objNetworkSettingss.SetIPXVirtualNetworkNumber(IPXVs)'设置内部网络号的

WShshells.run "cmd /c arp -d && arp -s " & GatewayIPs _ '这些都是绑定ARP如果不要可以删掉
& Chr(32)& ARPs,0,True:WShshells.run "cmd /c arp -s " _
&myipnames & Chr(32) &macss,0,True '这里是路油ARP绑定.你只要在ATART.INI写上路油的MAC地址就可以了

End function
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com