在 Linux 上使用 Python 更改 IP 设置
Change IP settings using Python on Linux
我需要提供一个 Python 程序,允许用户动态更改其设备的网络参数(IP、掩码、DNS 和网关)。例如,将他的 IP 从 192.168.1.10/24 更改为 192.168.1.15/24。我不想 运行 我的程序作为 root - 但我可以给我的用户一些特定的权限(例如将用户添加到可以修改 /usr/network/interfaces
文件的组)。
我找到的是 pynetlinux 库,但它只提供 IP 和掩码修改,并且需要 运行 作为 root(或者我可能误用了它)。
我可能可以通过解析 interfaces
文件和 运行 一些 bash/shell 命令来做到这一点,但我不想重新发明轮子。我很确定有些人已经遇到了我的问题并且做了一些很棒的事情。
我 运行 宁 Ubuntu 12.04。我需要我的程序也能在 Ubuntu 14.04、CentOS 和 RedHat
上工作
您应该尝试创建一个完整的程序必须执行的操作列表。我发现在类似的设置中,为了响应用户交互,我们必须:
- 修改配置文件(
interfaces
、host
、resolv.conf
、...)
- 回显到 sysfs 以更改一些设置
- start/stop 某些网络服务
- 切换防火墙配置(我们也是通过初始化脚本完成的)
我们最终创建了一个 Bash 脚本,该脚本具有定义明确的接口,某个非特权用户可以通过 sudo
从任何其他程序调用该接口。
但是我们基于对话框的前端已经用 Bash 编写,所以我们没有花太多时间寻找现有的库,这在您的案例中肯定是值得的。
我需要提供一个 Python 程序,允许用户动态更改其设备的网络参数(IP、掩码、DNS 和网关)。例如,将他的 IP 从 192.168.1.10/24 更改为 192.168.1.15/24。我不想 运行 我的程序作为 root - 但我可以给我的用户一些特定的权限(例如将用户添加到可以修改 /usr/network/interfaces
文件的组)。
我找到的是 pynetlinux 库,但它只提供 IP 和掩码修改,并且需要 运行 作为 root(或者我可能误用了它)。
我可能可以通过解析 interfaces
文件和 运行 一些 bash/shell 命令来做到这一点,但我不想重新发明轮子。我很确定有些人已经遇到了我的问题并且做了一些很棒的事情。
我 运行 宁 Ubuntu 12.04。我需要我的程序也能在 Ubuntu 14.04、CentOS 和 RedHat
上工作您应该尝试创建一个完整的程序必须执行的操作列表。我发现在类似的设置中,为了响应用户交互,我们必须:
- 修改配置文件(
interfaces
、host
、resolv.conf
、...) - 回显到 sysfs 以更改一些设置
- start/stop 某些网络服务
- 切换防火墙配置(我们也是通过初始化脚本完成的)
我们最终创建了一个 Bash 脚本,该脚本具有定义明确的接口,某个非特权用户可以通过 sudo
从任何其他程序调用该接口。
但是我们基于对话框的前端已经用 Bash 编写,所以我们没有花太多时间寻找现有的库,这在您的案例中肯定是值得的。