如何写DHCP自动获取脚本

wen 实用脚本 23

本文目录导读:

如何写DHCP自动获取脚本

  1. Linux(使用 ifup/ifdownnmcli
  2. Windows(PowerShell或Batch)
  3. macOS(脚本)
  4. 嵌入式设备(Busybox / OpenWrt)
  5. 常见问题排查
  6. 通用自动化建议

写DHCP自动获取脚本通常是指让网卡通过DHCP协议自动获取IP地址,方法取决于你使用的操作系统,以下是常见系统的脚本编写方式。


Linux(使用 ifup/ifdownnmcli

直接修改配置文件(适合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 "

使用说明:

  1. INTERFACE="eth0" 改为你的网卡名(可通过 ip link show 查看)。
  2. 给脚本执行权限:chmod +x enable-dhcp.sh
  3. 以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

执行方法:

  1. 以管理员身份运行PowerShell。
  2. 执行:Set-ExecutionPolicy RemoteSigned -Scope Process(允许脚本运行)。
  3. 运行脚本:.\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

选择适合你的系统的脚本,修改网卡名称后执行即可,强烈建议先在测试环境运行。

抱歉,评论功能暂时关闭!