python
复制代码
#!/usr/bin/env python3
# 固定 eth0 IP 的简单脚本(基于 NetworkManager/nmcli)
import subprocess
import sys
# ===== 在这里改 IP / 网关 / DNS =====
STATIC_IP = "192.168.137.64/24" # 要固定的 IP 和掩码
GATEWAY = "192.168.137.1" # 常见网关,可按实际改
DNS = "114.114.114.114,8.8.8.8" # DNS,可以填多个,用逗号分隔
IFACE = "eth0" # 网卡名,默认 eth0
# ===================================
def run(cmd):
print("执行:", " ".join(cmd))
subprocess.check_call(cmd)
def get_conn_name(iface):
# 通过 nmcli 找到跟 eth0 对应的连接名
out = subprocess.check_output(
["nmcli", "-t", "-f", "NAME,DEVICE", "connection", "show"],
text=True
)
for line in out.strip().splitlines():
name, dev = line.split(":", 1)
if dev == iface:
return name
return None
def main():
# 先检查是否有 nmcli
try:
subprocess.check_call(
["nmcli", "--version"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
except Exception:
print("错误:系统中没有 NetworkManager/nmcli,不能用这个脚本。")
print("如果是别的网络管理方式(如 netplan / dhcpcd),需要用对应方法配置。")
sys.exit(1)
conn_name = get_conn_name(IFACE)
if not conn_name:
print(f"错误:找不到与 {IFACE} 绑定的网络连接,请确认网线已插好、网卡名正确。")
sys.exit(1)
print(f"找到连接:{conn_name} (设备 {IFACE})")
# 设置静态 IP
run([
"nmcli", "connection", "modify", conn_name,
"ipv4.addresses", STATIC_IP,
"ipv4.gateway", GATEWAY,
"ipv4.dns", DNS,
"ipv4.method", "manual"
])
# 重启连接生效
run(["nmcli", "connection", "down", conn_name])
run(["nmcli", "connection", "up", conn_name])
print("✅ 已为", IFACE, "设置静态 IP:", STATIC_IP, "网关:", GATEWAY)
if __name__ == "__main__":
main()