在Linux系统中,使用Python 3进行网络配置需要使用subprocess
模块来执行系统命令
- 获取网络接口名称:
import subprocess def get_interface_name(): result = subprocess.run(['ip', 'link'], capture_output=True, text=True) output = result.stdout.splitlines() for line in output: if 'UP' in line and 'inet' in line: return line.split(':')[0] return None
- 获取IP地址:
def get_ip_address(interface_name): result = subprocess.run(['ip', 'addr', 'show', interface_name], capture_output=True, text=True) output = result.stdout.splitlines() for line in output: if 'inet' in line: ip_address = line.split('/')[0] return ip_address return None
- 设置静态IP地址:
def set_static_ip(interface_name, ip_address, subnet_mask, gateway, dns1, dns2): # 先删除所有现有IP配置 subprocess.run(['ip', 'addr', 'del', ip_address, 'dev', interface_name], check=True) # 添加新的静态IP配置 subprocess.run(['ip', 'addr', 'add', f'{ip_address}/{subnet_mask}', 'dev', interface_name], check=True) # 设置默认网关 subprocess.run(['ip', 'route', 'add', 'default', 'via', gateway], check=True) # 设置DNS服务器 subprocess.run(['nmcli', 'connection', 'modify', 'your_connection_name', 'ipv4.dns', f'{dns1},{dns2}'], check=True) # 应用配置 subprocess.run(['nmcli', 'connection', 'up', 'your_connection_name'], check=True)
请将your_connection_name
替换为你的网络连接名称(例如,eth0
或enp0s3
)。
使用这些函数,你可以执行以下操作:
interface_name = get_interface_name() ip_address = get_ip_address(interface_name) print(f'当前IP地址:{ip_address}') set_static_ip(interface_name, '192.168.1.10', '24', '192.168.1.1', '8.8.8.8', '8.8.4.4') ip_address = get_ip_address(interface_name) print(f'设置后的IP地址:{ip_address}')
请注意,这些示例适用于基于Debian的系统(如Ubuntu)。对于基于RHEL的系统(如Fedora),你可能需要使用nmcli
命令而不是ip
命令。