首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用dbus-python (热点和以太网)设置Ipv4地址

如何使用dbus-python (热点和以太网)设置Ipv4地址
EN

Stack Overflow用户
提问于 2022-05-23 13:14:24
回答 1查看 146关注 0票数 1

(对建立网络相当陌生)

我试图在我的ubuntu18.04机器上设置一个小的,但有点复杂的网络设置。

网络的拓扑结构: Ubuntu机器(称为“服务器”)将充当热点和以太网的DHCP服务器。连接到ubuntu机器的是两个ubuntu机器客户端和一个照相机。

我用python库实现了“服务器”,以建立/关闭一个热点连接,该连接按预期工作。但我的问题是如何管理ip地址和路由。

我将详细阐述我面临的两个问题:

  1. 为了更改Hotspot AP的ipv4地址,我发现我可以编辑一个文件:“/etc/NetworkManager/system/”,添加了另一行"address1=X.Y.Z.W“(我想要的ip地址)。

但是编辑文件并不是满足我的需求的正确方法,我宁愿从代码本身进行编辑。为了进行相同的更改,我需要对代码进行哪些更改?

dbus的代码连接对象如下所示:

代码语言:javascript
复制
def get_hotspot_struct(iface, uuid, ssid, password):
    s_con = dbus.Dictionary({
        'type': '802-11-wireless',
        'uuid': uuid,
        'id': 'PixellotHotspot',
        'interface-name': iface,
    })

    s_wifi = dbus.Dictionary({
        'ssid': dbus.ByteArray(ssid.encode()),
        'mode': 'ap',
        'band': 'bg',
        'channel': dbus.UInt32(1),
    })

    s_wsec = dbus.Dictionary({
        'key-mgmt': 'wpa-psk',
        'psk': password,
    })

    s_ipv4 = dbus.Dictionary({
        'method': 'shared',
    })

    s_ipv6 = dbus.Dictionary({
        'method': 'ignore',
    })

    con = dbus.Dictionary({
        'connection': s_con,
        '802-11-wireless': s_wifi,
        '802-11-wireless-security': s_wsec,
        'ipv4': s_ipv4,
        'ipv6': s_ipv6,
    })

    logger.info('Getting hotspot connection template')
    logger.info(con)

    return con
  1. 我能为以太网有线连接做同样的事吗?到目前为止,我认为我可以编辑“/etc/netplan/01-netplan. eth0”,以便将dhcp设置为false,并为以太网接口eth0使用ip "X.Y.Z.W“(需要)。

但是这似乎只在服务器上起作用,当我用以太网将ubuntu客户端连接到服务器时,服务器根本不会给客户机任何ip。它适用于热点,但不适用于以太网。

我知道我的问题是非常具体的,到处都是,但我会感谢任何帮助。如果你知道这个问题,在这里/发送电子邮件/ Facebook me(Yves Halimi)。会有帮助的!!

EN

回答 1

Stack Overflow用户

发布于 2022-07-20 14:28:05

D总线API是在man nm-settings-dbus中记录的.

对于NetworkManager来说,总是要创建连接配置文件并激活它们。所以,如果你的代码可以创建一个概要文件,那么另一个概要文件的工作原理基本上是一样的--只是一些键会有所不同。

我发现使用其他NetworkManager客户机之一并与它们进行比较是很有帮助的。例如,您还可以使用nmcli connection add type ...创建配置文件,然后通过nmcli -f all connection show获取D总线路径,最后查看配置文件在D总线上的外观:

代码语言:javascript
复制
busctl -j call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/Settings/1 org.freedesktop.NetworkManager.Settings.Connection GetSettings 

参见上游示例:python+dbus

也许您会发现使用python + pygobject + libnm更容易。在这种情况下,请参见示例这里。主要的缺点是您将有一个额外的依赖项(pygobject)。libnm不是额外的依赖项,如果您使用NetworkManager,您已经有了它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72349196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档