Bat+Python修改机房IP
先说明不足之处
- 机房系统,保证程序兼容性,不安装Python,所以不采用bat脚本调用py脚本获取返回值的用法
- py脚本中调用bat,涉及管理员权限问题,传参不正常,不采用
- 纯py脚本在选择网卡和修改IP时极其心累繁琐,不采用
- bat脚本对字符串处理上,,还是两者混合写吧
- 传参问题,上述方法不能用后,采用比较慢一点的方法,文本传参,大佬勿喷
那么,为解决机房由于联想还原系统出问题而带来的IP混乱问题,开始干活
开始干活
准备工作
- 提取获取机房每台机器Mac地址(开机情况下扫描局域网即可)
- 准备一个txt文本将mac写入并在每一条Mac前分配一个IP,格式如下表,命名:ip.txt
IP | MAC |
---|---|
192.168.1.1 | d8-ce-8b-0g-18-61 |
- 编写py,bat脚本
- 打包py脚本为exe
- 将ip.txt与bat脚本、py打包文件(NIP_Get.exe)打包为exe,并设置开机自自启
NIP_Get.py
import uuid
import re
import os
try: # 代码中所有try供调试使用,可根据情况修改
address = hex(uuid.getnode())[2:]
mac = '-'.join(address[i:i+2] for i in range(0, len(address), 2))
print(mac)
except:
print("all Error!!!")
os.system("pause")
exit()
try:
f = open('ip.txt') #打开ip.txt读取本机mac和ip对应关系
lines = f.readlines()
except:
print("file read error!!!")
os.system("pause")
exit()
else:
f.close()
l_list = lines[0:] #从文本第一行开始读取
for l in l_list:
if mac.lower() in l: #如果存在
try: #匹配IP,提取
local_ip = re.findall(r"((?:(?:25[0-5]|2[0-4]\d|(?:1\d{2}|[1-9]?\d))\.){3}(?:25[0-5]|2[0-4]\d|(?:1\d{2}|[1-9]?\d)))",l)
get_ip = ''.join(local_ip)
print(get_ip) # str(local_ip)[2:-2]
except:
print("Get ip error!!!")
os.system("pause")
exit()
with open('local.txt', 'w') as f: #写入local文本传参
f.write(get_ip)
f.close()
exit()
print("未找到改IP")
os.system("pause")
exit()
Seriously.bat
@echo off
cd /d "%~dp0"
cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul
if %errorlevel%==0 goto Admin
if exist "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs"
echo Set RequestUAC = CreateObject^("Shell.Application"^)>"%temp%\getadmin.vbs"
echo RequestUAC.ShellExecute "%~s0","","","runas",1 >>"%temp%\getadmin.vbs"
echo WScript.Quit >>"%temp%\getadmin.vbs"
"%temp%\getadmin.vbs" /f
if exist "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs"
exit
:Admin
:: 上面代码表示让脚步已管理员模式运行
color 70
echo **************************************************************************
echo **************************************************************************
echo Start....
start "" "NIP_Get.exe"
echo 如果我卡住,不要管我,一切正常!!!不要关闭!!!
ping 1**.30.1**.1 -n 4
set /p local_IP=<local.txt
:: 代码中涉及ip部分数字用*代替
:: 上面的ping为了延时,文本传参慢1s,直接运行下一步报错
:: 下面有任何报错都可以正常运行
netsh interface ipv4 set address name="本地连接" source=static addr=%local_IP% mask=255.255.255.0 gateway=1**.30.1**.1 gwmetric=0 >nul
echo 正在添加本机首选DNS服务器...
netsh interface ipv4 set dns name="本地连接" source=static addr=2**.1**.***.*** register=PRIMARY
echo 正在添加备用DNS服务器...
netsh interface ipv4 add dns name="本地连接" addr=2**.***.***.***
echo 检查当前本机配置...
ipconfig /all
cls
echo 检查完成,IP已修改
echo
pause
打包py脚本
进入python脚本所在目录,打开dos,pip安装pyinstaller
打包:
pyinstaller -F NIP_Get.py
#带动态库的打包
pyinstaller NIP_Get.py
使用winrar打包为自解压程序
将NIP_Get.py和bat、ip.txt三个文件打包为自解压的exe程序,避免被人直接修改
设置
在母机上将最后打包好的文件设置为开机自启,同传,机房IP混乱问题解决
结语
代码和思路均有不足之处,保证兼容性情况下写这个程序仍有太多不足,望有人可以帮我补充,修改!
另一种方法
感谢!