Ubuntu下使用 python搭建服务实现从web端远程配置设备网口

1、通过文件配置Ubuntu设备网口

在Ubuntu工控机上,通过文件配置网口(网络接口)可以让网络配置在每次系统启动时自动生效。以下是常见的方法步骤:

1.1 使用 netplan 配置网口(Ubuntu 18.04 及以上版本)

  1. 编辑 netplan 配置文件:netplan 的配置文件通常位于 /etc/netplan/ 目录下,文件名通常是 01-netcfg.yaml 或者类似的 .yaml 文件。

    打开该文件进行编辑:

    sudo nano /etc/netplan/01-netcfg.yaml
    
  2. 配置网口: 在文件中添加或修改如下内容,假设你要配置的是 eth0 网口,并且希望它有静态 IP 地址:

    network:
      version: 2
      renderer: networkd
      ethernets:
        <eth0>:
          dhcp4: no
          addresses:
            - 192.168.1.100/24
          gateway4: 192.168.1.1
          nameservers:
            addresses:
              - 8.8.8.8
              - 8.8.4.4
    
    • eth0 需要配置的网口,根据实际换成自己设备的网口
    • dhcp4: no 表示关闭 DHCP。
    • addresses: 配置静态 IP 地址和子网掩码。
    • gateway4: 配置网关。
    • nameservers: 配置 DNS 服务器地址。

1.2 使用 ifupdown 配置网口(Ubuntu 16.04 及以下版本)

Ubuntu 16.04 及之前的版本使用 /etc/network/interfaces 文件来配置网口。

  1. 编辑 /etc/network/interfaces 文件: 打开该文件进行编辑:

    sudo nano /etc/network/interfaces
    
  2. 配置网口: 在文件中添加或修改如下内容,假设你要配置的是 eth0 网口:

    • 如果是静态 IP:

      auto eth0
      iface eth0 inet static
          address 192.168.1.100
          netmask 255.255.255.0
          gateway 192.168.1.1
          dns-nameservers 8.8.8.8 8.8.4.4
      
    • 如果是动态 IP(通过 DHCP 获取 IP):

      auto eth0
      iface eth0 inet dhcp
      
  3. 重启网络服务: 保存文件后,使用以下命令重启网络服务使配置生效:

    sudo systemctl restart networking
    

1.3 验证配置

你可以使用 ifconfigip a 命令来检查网口的配置是否正确生效。例如:

ip a

这两种方法分别适用于不同的 Ubuntu 版本。你可以根据自己的系统版本选择合适的方式。

2、使用python搭建一个web服务

要使用 Python 搭建一个 Web 服务,允许远程修改 netplan 网络配置并在没有新的 Web 访问后一分钟内恢复原始配置,可以使用 Flask 框架和定时任务来实现。以下是详细步骤:

2.1 后端python脚本

2.1.1 项目依赖

因为python脚本编辑/etc路径下文件,脚本需要在root权限下运行,因此安装依赖首先需要获取root权限:

sudo -i

安装依赖:

首先,你需要安装 Flask 框架和 schedule 模块(用于定时任务),以及确保工控机有权限修改网络配置,。

pip3 install flask flask-cors schedule 

2.1.2 Python 代码实现

以下是一个完整的 Python 脚本示例,该脚本包含:

  • 启动一个 Flask Web 服务,用于接收网络配置修改请求。
  • 使用定时任务,在没有新的 Web 访问后 60 秒内恢复为原始配置。
#!/usr/bin/env python3
import os
import time
import shutil
import threading
from flask import Flask, request, jsonify
from flask_cors import CORS
import schedule
import subprocess
import re

app = Flask(__name__)
CORS(app)  # 启用 CORS 允许跨域请求
# 全局变量,用来保存最后一次修改时间
last_access_time = time.time()

# 保存原始的 netplan 配置文件路径
netplan_file = "/etc/netplan/01-network-manager-all.yaml"
backup_file = "/etc/netplan/01-network-manager-all.yaml.bak"

change_config = False
revisit = False

# 备份原始配置
def backup_netplan():
    # if not os.path.exists(backup_file):
    shutil.copy(netplan_file, backup_file)
    print("Netplan configuration backed up.")

# 定时器:在 60 秒后没有新的请求访问时恢复配置
def restore_config_if_needed():
    global last_access_time
    global change_config
    global revisit
    if not change_config:
        return
    if revisit:
        backup_netplan()
        print("Netplan configuration already in effect.")
        change_config = False
        revisit = False
    # 计算当前时间距离上次访问的时间差
    time_since_last_access = time.time() - last_access_time
    if time_since_last_access > 60:
        # 恢复原始配置
        if os.path.exists(backup_file):
            shutil.copy(backup_file, netplan_file)
            change_config = False
            # 应用 netplan 配置
            os.system("sudo netplan apply")
            print("Netplan configuration restored to original.")

# 启动一个独立线程来定时检查恢复配置
def schedule_checker():
    while True:
        schedule.run_pending()
        time.sleep(1)

def get_current_ip():
    """获取系统当前设置的 IP 地址"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值