在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
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
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
命令。