本文目录导读:

- Linux(使用
ifup/ifdown或nmcli) - Windows(PowerShell或Batch)
- macOS(脚本)
- 嵌入式设备(Busybox / OpenWrt)
- 常见问题排查
- 通用自动化建议
写DHCP自动获取脚本通常是指让网卡通过DHCP协议自动获取IP地址,方法取决于你使用的操作系统,以下是常见系统的脚本编写方式。
Linux(使用 ifup/ifdown 或 nmcli)
直接修改配置文件(适合Debian/Ubuntu)(enable-dhcp.sh)**
#!/bin/bash
# 设置网卡名称(常见:eth0, enp3s0, ens33)
INTERFACE="eth0"
# 备份原配置文件(可选)
cp /etc/network/interfaces /etc/network/interfaces.bak
# 修改配置文件为DHCP
cat > /etc/network/interfaces.d/${INTERFACE} << EOF
auto ${INTERFACE}
iface ${INTERFACE} inet dhcp
EOF
# 重启网络服务或重载接口
ifdown ${INTERFACE} && ifup ${INTERFACE}
# 验证是否获取到IP
ip addr show ${INTERFACE} | grep "inet "
使用说明:
- 将
INTERFACE="eth0"改为你的网卡名(可通过ip link show查看)。 - 给脚本执行权限:
chmod +x enable-dhcp.sh - 以root运行:
sudo ./enable-dhcp.sh
使用NetworkManager(通用)(nm-dhcp.sh)**
#!/bin/bash # 设置连接名称,通常是网卡名,也可以是其他标识 CONNECTION="eth0" # 将IPv4方法改为auto(DHCP) nmcli con mod "$CONNECTION" ipv4.method auto # 重新激活连接 nmcli con up "$CONNECTION" # 验证 nmcli con show "$CONNECTION" | grep ipv4.method ip addr show "$CONNECTION" | grep inet
纯命令行重置(无配置文件修改)
#!/bin/bash # 仅重置接口,不修改配置文件(临时生效,重启后恢复) INTERFACE="eth0" dhclient -r $INTERFACE # 释放旧IP dhclient $INTERFACE # 重新获取IP
Windows(PowerShell或Batch)
PowerShell脚本 (enable-dhcp.ps1)
# 获取网络适配器(将 "以太网" 改为你的实际网卡名称) $interfaceName = "以太网" # 设置DHCP Set-NetIPInterface -InterfaceAlias $interfaceName -Dhcp Enabled # 覆盖DNS为自动获取(可选) Set-DnsClientServerAddress -InterfaceAlias $interfaceName -ResetServerAddresses # 释放并续约IP ipconfig /release "$interfaceName" cmd /c "ipconfig /renew" # PS内直接运行/renw可能无输出,用cmd执行 # 验证 Ipconfig /all | Select-String "DHCP 已启用" -Context 0,2
执行方法:
- 以管理员身份运行PowerShell。
- 执行:
Set-ExecutionPolicy RemoteSigned -Scope Process(允许脚本运行)。 - 运行脚本:
.\enable-dhcp.ps1
Batch脚本 (enable-dhcp.bat)
@echo off set INTERFACE="以太网" echo 正在释放IP... ipconfig /release %INTERFACE% echo 设置DHCP... netsh interface ip set address %INTERFACE% dhcp netsh interface ip set dns %INTERFACE% dhcp echo 正在续约... ipconfig /renew %INTERFACE% echo 当前状态: ipconfig /all | findstr /i "DHCP 已启用 IPv4" pause
执行方法: 右键“以管理员身份运行”。
macOS(脚本)
#!/bin/bash # 获取网络服务名称(通常是 "Wi-Fi" 或 "以太网") SERVICE="Wi-Fi" # 设置为DHCP sudo networksetup -setdhcp "$SERVICE" # 刷新(等价于释放+续约) sudo networksetup -renew "$SERVICE" # 验证 networksetup -getinfo "$SERVICE"
嵌入式设备(Busybox / OpenWrt)
#!/bin/sh INTERFACE="eth0" # 停止之前的udhcpc进程 killall udhcpc 2>/dev/null # 启动DHCP客户端 udhcpc -i $INTERFACE -b -q # 或使用简单方式 # ifconfig $INTERFACE 0.0.0.0 # dhclient $INTERFACE
常见问题排查
| 问题 | 解决方案 |
|---|---|
| 找不到网卡名 | ip link show (Linux), ipconfig (Windows), ifconfig (Mac) |
| 权限不足 | 使用 sudo (Linux/Mac), 右键管理员运行 (Windows) |
| 配置文件锁定 | 检查是否有NetworkManager和networking服务冲突 |
| Windows执行报错 | 务必以管理员身份运行PowerShell或cmd |
| 获取到169.254.x.x | DHCP服务器无响应,检查网络连接或DHCP服务器是否正常 |
通用自动化建议
检测DHCP状态后再执行脚本:
#!/bin/bash
INTERFACE="eth0"
# 如果当前是静态IP,再改为DHCP
if ip addr show $INTERFACE | grep -q "inet 192.168" ; then
echo "已使用静态IP,正在切换为DHCP..."
# 这里放入上面的改动脚本
else
echo "当前已是DHCP或在非192.168网段,不做操作"
fi
选择适合你的系统的脚本,修改网卡名称后执行即可,强烈建议先在测试环境运行。