Browse Source

添加4372MAC地址和时间写入脚本,需要在电脑上运行

master
luzt98 1 month ago
parent
commit
0978ca4fc0
  1. 135
      writetimeandmac.py

135
writetimeandmac.py

@ -0,0 +1,135 @@ @@ -0,0 +1,135 @@
'''
脚本功能4372修改MAC地址和时间
运行环境python3 + paramiko
此脚本在连通控制器的电脑上运行需要提前安装python环境和paramiko库
'''
import os
import time
import paramiko
from datetime import datetime
import re
# 配置参数
RemoteHostAddr = "192.168.10.100"
RemoteHostPort = 22
User = "root"
Pass = "root"
Mac1File = "/userapp/mac1.txt"
Mac2File = "/userapp/mac2.txt"
# 获取当前时间并格式化
def format_time(current_time:datetime, flag:int):
if flag == 1:
return current_time.strftime('%Y-%m-%d %H:%M:%S')
elif flag == 2:
return current_time.strftime('%Y-%m-%d')
elif flag == 3:
return current_time.strftime('%H:%M:%S')
elif flag == 4:
return current_time.strftime('%Y年%m月%d')
elif flag == 5:
return current_time.strftime('%Y%m%d')
elif flag == 6:
return current_time.strftime('%Y%m%d_%H%M%S')
elif flag == 7:
return current_time.strftime('%y:%m:%d:%H:%M:%S')
else:
return current_time.strftime('%Y-%m-%d %H:%M:%S')
# Ping 命令的实现
def ping(host):
"""Ping 地址,返回 True 或 False"""
if os.name == 'nt':
response = os.system(f"ping -n 1 -w 1000 {host} > nul 2>&1")
return response == 0
else:
response = os.system(f"ping -c 1 -W 1 {host} > /dev/null 2>&1")
return response == 0
# 检查 IP 地址格式是否正确
def is_ipaddr(ip):
pattern = r"^([0-9]|[1-9][0-9]|1\d\d|2[0-4]\d|25[0-5])(\.([0-9]|[1-9][0-9]|1\d\d|2[0-4]\d|25[0-5])){3}$"
if re.match(pattern, ip):
return True
else:
print(f"IP 地址格式不正确: {ip}")
return False
# 使用 Paramiko 进行 SSH 登录并执行命令
def ssh_execute(host, port, username, password, commands:list):
"""通过 SSH 执行命令"""
try:
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动接受未知主机密钥
ssh_client.connect(host, port=port, username=username, password=password)
for command in commands:
print(f"正在执行命令: {command}")
stdin, stdout, stderr = ssh_client.exec_command(command)
print(stdout.read().decode()) # 打印命令输出
if stderr.read():
print(stderr.read().decode()) # 打印命令错误输出
ssh_client.close()
except Exception as e:
print(f"SSH 连接失败: {e}")
# 设置文件的 MAC 地址
def write_mac_to_file(mac1, mac2):
"""将 MAC 地址写入文件"""
with open(Mac1File, 'w') as f1:
f1.write(mac1)
with open(Mac2File, 'w') as f2:
f2.write(mac2)
def modify_mac_address(mac):
mac_bytes = [int(byte, 16) for byte in mac.split(':')]
# 判断第一个字节是否为奇数,若是则 +5
if mac_bytes[0] % 2 == 1:
mac_bytes[0] += 5
# 将字节列表重新转换为 MAC 地址字符串
new_mac = ':'.join(format(byte, '02x') for byte in mac_bytes)
return new_mac
# 主程序
def main():
# 获取当前时间
MAC1 = format_time(datetime.now(), 7)
time.sleep(1)
MAC2 = format_time(datetime.now(), 7)
time.sleep(1)
STRTIME = format_time(datetime.now(), 1)
# 打印信息
print(f"MAC1: {MAC1}")
print(f"MAC2: {MAC2}")
print(f"STRTIME: {STRTIME}")
mac1 = modify_mac_address(MAC1)
mac2 = modify_mac_address(MAC2)
print(f"修改后的 MAC1: {mac1}")
print(f"修改后的 MAC2: {mac2}")
# 循环 ping 测试
for i in range(1, 11):
if not ping(RemoteHostAddr):
print(f"{i}/10 Ping 设备失败,等待重新尝试...")
time.sleep(5)
else:
print("Ping 设备成功,开始 SSH 登录...")
commands = [
f"date -s \"{STRTIME}\"",
"hwclock --systohc",
f"echo {mac1} > {Mac1File}",
f"echo {mac2} > {Mac2File}",
"reboot"
]
ssh_execute(RemoteHostAddr, RemoteHostPort, User, Pass, commands)
break
if __name__ == "__main__":
main()
Loading…
Cancel
Save