吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4108|回复: 13
收起左侧

[Python 原创] [python+Bat]读表修改机房IP

  [复制链接]
systemime 发表于 2019-1-3 19:44
本帖最后由 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 

免费评分

参与人数 4吾爱币 +8 热心值 +4 收起 理由
我亦醉逍遥 + 1 + 1 用心讨论,共获提升!
wushaominkk + 6 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sdzdp + 1 怎么自动修改计算机名啊?升级一下吧
激动的石榴 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

  • · Aarow|主题: 988, 订阅: 304

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| systemime 发表于 2019-1-4 06:48
sdzdp 发表于 2019-1-3 20:30
怎么自动修改计算机名?

那种脚本在机房环境下很麻烦啊,一般都是要重启,同传一遍机器名相同了,因为还原系统的原因除非你再花时间把还原关闭,等脚本运行完以后再把保护开开,机房上百台机器如果是多系统的话还得一台一台选系统进入,,,,感觉会累死,,,,一般都是自带的原厂还原系统可以做的很好,,,,,真需要的话:https://blog.csdn.net/jiangqin115/article/details/50813534,把里面的cname写死
 楼主| systemime 发表于 2019-1-4 06:50
cc78947 发表于 2019-1-3 23:31
等于说要拷到每台机子上运行一次,

现在的交换机应该都有客户端的,可以设置固定的IP,然后每台机子配 ...

原本是由联想保护系统自动分配的,但是现在因为到保修期,它所必须的驱动装不上了,而且要求按照机器摆放顺序进行IP分配,所以只能出此下策
君月栩 发表于 2019-1-4 11:54
 楼主| systemime 发表于 2019-1-4 06:52
cc78947 发表于 2019-1-3 23:31
等于说要拷到每台机子上运行一次,

现在的交换机应该都有客户端的,可以设置固定的IP,然后每台机子配 ...

学校给机房分配的11年的交换机,功能上大概有点落后
 楼主| systemime 发表于 2019-1-4 06:43
激动的石榴 发表于 2019-1-3 20:28
可不可以理解为 从文件中获取自己的mac地址然后设置对应自己mac的IP

是的,因为老师要求IP必须按照机器摆放顺序排列,所以这样弄也是没办法的事
cc78947 发表于 2019-1-3 23:31
等于说要拷到每台机子上运行一次,

现在的交换机应该都有客户端的,可以设置固定的IP,然后每台机子配置成系统分配,不设置固定ip
cc78947 发表于 2019-1-3 22:54
读文件,确实是解耦的方式
℡小疯、 发表于 2019-1-3 22:43
之前我做运维的时候或许可以用到,不过现在离职了
bdsdwbdhdcdhd 发表于 2019-1-3 21:07
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 00:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表