[python+Bat]读表修改机房IP
本帖最后由 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部分字段用*号已隐藏)
#此代码需要以管理员方式运行
import uuid
import re
import os
try:
address = hex(uuid.getnode())
mac = '-'.join(address 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
for l in l_list:
if mac.lower() in l:
try:
local_ip = re.findall(r"((?:(?:25|2\d|(?:1\d{2}|?\d))\.){3}(?:25|2\d|(?:1\d{2}|?\d)))",l)
get_ip = ''.join(local_ip)
print(get_ip) # str(local_ip)
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部分字段用*号已隐藏)
@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,
脚本链接如下,估计也没几个下载,哈哈
望安
--------------------------------------------------------
自动修改计算机名:出处csdn
如果说修改到改机器名的话,如下操作
set /p cname=请输入计算机名:,这句话是让用户输入,如果想自动改成自己需要的,这句话改成 cname = CZXT,CZXT是我计算机名称,或者,按照编号来的话,提取ip后三位或两位,把cname赋值
期末回来再更新
以下为转载的,无需重启改用户名的bat脚本
拷贝一下脚本到.bat文件,双击运行即可,有交互式提示输入新的计算机名
@ ECHO OFF
color 0A
ECHO ----------------------------------------------------------------------------
ECHO.
ECHO 版权所有 copyright of @@@@@@@@@
ECHO.
ECHO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ECHO.
:name
set /p cname=请输入计算机名:
echo REGEDIT4 >c:\windows\reg.reg
echo >> c:\windows\reg.reg
echo >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg
echo >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg
echo >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg
echo >> c:\windows\reg.reg
echo "NV Hostname"="%cname%" >> c:\windows\reg.reg
echo "Hostname"="%cname%" >> c:\windows\reg.reg
echo >> c:\windows\reg.reg
echo @="%cname%" >> c:\windows\reg.reg
echo >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg
echo >> c:\windows\reg.reg
echo "NV Hostname"="%cname%" >> c:\windows\reg.reg
echo "Hostname"="%cname%" >> c:\windows\reg.reg
echo >> 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 sdzdp 发表于 2019-1-3 20:30
怎么自动修改计算机名?
那种脚本在机房环境下很麻烦啊,一般都是要重启,同传一遍机器名相同了,因为还原系统的原因除非你再花时间把还原关闭,等脚本运行完以后再把保护开开,机房上百台机器如果是多系统的话还得一台一台选系统进入,,,,感觉会累死,,,,一般都是自带的原厂还原系统可以做的很好,,,,,真需要的话:https://blog.csdn.net/jiangqin115/article/details/50813534,把里面的cname写死 cc78947 发表于 2019-1-3 23:31
等于说要拷到每台机子上运行一次,
现在的交换机应该都有客户端的,可以设置固定的IP,然后每台机子配 ...
原本是由联想保护系统自动分配的,但是现在因为到保修期,它所必须的驱动装不上了,而且要求按照机器摆放顺序进行IP分配,所以只能出此下策 感谢楼主分享 cc78947 发表于 2019-1-3 23:31
等于说要拷到每台机子上运行一次,
现在的交换机应该都有客户端的,可以设置固定的IP,然后每台机子配 ...
学校给机房分配的11年的交换机,功能上大概有点落后 激动的石榴 发表于 2019-1-3 20:28
可不可以理解为 从文件中获取自己的mac地址然后设置对应自己mac的IP
是的,因为老师要求IP必须按照机器摆放顺序排列,所以这样弄也是没办法的事 等于说要拷到每台机子上运行一次,
现在的交换机应该都有客户端的,可以设置固定的IP,然后每台机子配置成系统分配,不设置固定ip 读文件,确实是解耦的方式 之前我做运维的时候或许可以用到,不过现在离职了 感谢分享
页:
[1]
2