本帖最后由 systemime 于 2019-1-4 08:32 编辑
技术渣渣,勿喷
使用Python+bat读取IP表修改机房机器IP
先说一下不足
- 机房系统,保证兼容性,不装Python,所以不采用bat脚本调用py脚本获取返回值的用法
- py脚本打包调用bat,涉及管理员权限传参不正常,不采用
- 纯bat脚本对字符串处理能力真的是极其糟糕,不想调试了
- 纯python在网卡选择判断上简直写的心累,干脆混合写,发挥各自优势
- 使用效率慢一点的方法,通过文本传参,这一点大佬勿喷,望传授经验
机房大约80台机器,修改原联想IP分配工具因驱动问题不能运行,网上已有批量修改工具均达不到理想效果,顾采用单机脚本设置开机自启的方法
- 首先获取整个机房的Mac地址,全部开机状态下对局域网扫描,网上很多方法,不累赘叙述
- 为每个Mac在Ttxt中写好一个IP,格式如下:
1**.30.132.102 | d8-cb-8a-0b-17-44 | 1**.30.132.103 | d8-cb-8a-0a-d8-73 | 中间使用tab或空格隔开 - 编写bat,Python代码
- 打包自解压程序exe,
- 在机房设置开机自启然后同传
Python代码如下:(代码中ip部分字段用*号已隐藏)
[Python] 纯文本查看 复制代码 #此代码需要以管理员方式运行
import uuid
import re
import os
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')
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:
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:
f.write(get_ip)
f.close()
exit()
print("未找到改IP")
os.system("pause")
exit()
其中ip.txt为提前准备好的ip与Mac对应文本,local.txt用于传参(除去我上面提到的方法外,暂时只能想起这一个方法,不喜勿喷)
bat脚本如下:(代码中ip部分字段用*号已隐藏)
[Bash shell] 纯文本查看 复制代码 @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 Start....
start "" "NIP_Get.exe"
echo 如果我卡住,不要管我,一切正常!!!不要关闭!!!
ping 1**.30.132.1 -n 4
::上面一句话用于延时,ping了下网关,改成自己的或者换种延时方式都行
set /p local_IP=<local.txt
echo 下面任何报错都不用管,一切正常
netsh interface ipv4 set address name="本地连接" source=static addr=%local_IP% mask=255.255.255.0 gateway=1**.30.132.1 gwmetric=0 >nul
echo 正在添加本机首选DNS服务器...
netsh interface ipv4 set dns name="本地连接" source=static addr=2**.1**.1**.3 register=PRIMARY
echo 正在添加备用DNS服务器...
netsh interface ipv4 add dns name="本地连接" addr=2**.1**.1**.3
echo 检查当前本机配置...
ipconfig /all
cls
echo 检查完成,IP已修改
echo
pause
这些便是全部内容,通过py脚本读取txt文本,然后写入另一个文本进行传值,由bat脚本读取最后修改,其中NIP_Get.exe为NIP_Get.py打包成exe的程序
py脚本打包命令如下:
在其所在目录DOS下,pyinstaller -F NIP_Get.py,不加 -F时可以带上链接库,有些老系统不会报错,需要提前安装pyinstaller库
通过winrar可以将上述两个代码加上ip.txt打包成exe,
在机房主机上创建任务计划程序开机自启(方法不累赘叙述,百度一下)
找个时间同传一下,问题解决,不介意再装python的话可以免打包py脚本,调整一下bat脚本即可
渣渣请大佬勿喷,多传授修改经验
然后机房乱IP问题就解决了,望各位大神提些参考意见,:lol,
脚本链接如下,估计也没几个下载,哈哈
1.txt
(116 Bytes, 下载次数: 13)
望安
--------------------------------------------------------
自动修改计算机名:出处csdn
如果说修改到改机器名的话,如下操作
set /p cname=请输入计算机名:,这句话是让用户输入,如果想自动改成自己需要的,这句话改成 cname = CZXT,CZXT是我计算机名称,或者,按照编号来的话,提取ip后三位或两位,把cname赋值
期末回来再更新
以下为转载的,无需重启改用户名的bat脚本
[Shell] 纯文本查看 复制代码 拷贝一下脚本到.bat文件,双击运行即可,有交互式提示输入新的计算机名
@ ECHO OFF
color 0A
ECHO ----------------------------------------------------------------------------
ECHO.
ECHO 版权所有 copyright of @@@@@@@@@
ECHO.
ECHO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ECHO.
:name
set /p cname=请输入计算机名:
echo REGEDIT4 >c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName] >> c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName] >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName] >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\ComputerName\ComputerName] >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] >> c:\windows\reg.reg
echo "NV Hostname"="%cname%" >> c:\windows\reg.reg
echo "Hostname"="%cname%" >> c:\windows\reg.reg
echo [HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\ShellNoRoam] >> c:\windows\reg.reg
echo @="%cname%" >> c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\ComputerName\ActiveComputerName] >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters] >> c:\windows\reg.reg
echo "NV Hostname"="%cname%" >> c:\windows\reg.reg
echo "Hostname"="%cname%" >> c:\windows\reg.reg
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] >> c:\windows\reg.reg
echo "DefaultDomainName"="%cname%" >> c:\windows\reg.reg
echo "AltDefaultDomainName"="%cname%" >> c:\windows\reg.reg
regedit /s c:\windows\reg.reg
cmd
---------------------
原文:https://blog.csdn.net/jiangqin115/article/details/50813534 |