如何使用 gdbus 设置 IP 地址

如何使用 gdbus 设置 IP 地址

我正在研究如何从我正在编写的工作站应用程序更改 IP 地址(和 DHCP 设置),这就是我需要/想要为此目的使用 dbus 的原因。

太复杂了!所以我尝试使用 gdbus cli 来学习。

我采用的方法是使用 gdbus 获取要修改的以太网适配器的设置。然后更改该数据并将其发送回 DBus。

我非常接近成功,因为 IP 地址几乎发生了变化。我只需打开 gnome GUI 并单击相关适配器的复选标记即可“踢”它。这样设置就会生效。

我不知道单击该复选标记会调用什么 dbus 命令,但我确信这是我使用 gdbus cli 更改 IP 地址所需要知道的最后一件事。

这是我用来设置 IP 地址的脚本,我更改了ipv4.addresses、和ipv4.address-data字段以便它们指定相同的地址。

#/bin/bash
gdbus call \
    --system \
    --dest org.freedesktop.NetworkManager \
    --object-path /org/freedesktop/NetworkManager/Settings/1 \
    --method org.freedesktop.NetworkManager.Settings.Connection.Update2 \
 "{\
  '802-3-ethernet':\
   {\
    'auto-negotiate': <false>,\
    'mac-address': <[byte 0x00, 0x0c, 0x29, 0x4e, 0x29, 0xe2]>,\
    'mac-address-blacklist': <@as []>,\
    's390-options': <@a{ss} {}>\
  },\
  'connection':\
   {\
    'id': <'Wired connection 1'>,\
    'uuid': <'d075ed7c-c8cc-3db7-b0fb-d0687331a7a0'>,\
    'type': <'802-3-ethernet'>,\
    'permissions': <@as []>,\
    'autoconnect-priority': <-999>,\
    'timestamp': <uint64 1539968649>\
   },\
  'ipv6':\
   {\
    'method': <'ignore'>,\
    'dns': <@aay []>,\
    'dns-search': <@as []>,\
    'addresses': <@a(ayuay) []>,\
    'routes': <@a(ayuayu) []>,\
    'ip6-privacy': <0>,\
    'address-data': <@aa{sv} []>,\
    'route-data': <@aa{sv} []>\
   },\
  'ipv4':\
   {
    'method': <'manual'>,\
    'dns': <[uint32 4261521600]>,\
    'dns-search': <@as []>,\
    'addresses': <[[uint32 3321997504, 24, 16885952]]>,\
    'gateway': <'192.168.1.1'>,
    'routes': <@aau []>,\
    'address-data': <[{'address': <'192.168.1.198'>, 'prefix': <uint32 24>}]>,\
    'route-data': <@aa{sv} []>\
   },\
  'proxy': {}\
 }"\
 1\
 {}

这是我调用它时得到的结果...

$ ./set.sh
(@a{sv} {},)

如果我现在打开网络设置 GUI,则会出现一个“正在进行”的旋转圆圈,并且 UI 会显示旧地址。单击连接名称旁边的复选标记会导致 GUI 刷新以显示我请求的更新地址。

我还在一个单独的终端中获得了大量的监控输出,我设置这个终端来报告 NetworkManager 的更改,如下所示:

$ gdbus monitor --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager

如果您认为监控输出有帮助,我会将其粘贴到评论中。

那么,那个复选标记(图像中“有线连接 1”右侧的复选标记)下发生了什么神奇的事情。

我正在运行 Ubuntu 18.04 LTS。

谢谢!

在此处输入图片描述

答案1

我找到了答案。

通过运行$ sudo dbus-monitor --system(NB,这是一个不同的实用程序gdbus-monitor),我能够嗅探系统 dbus 上的流量。

所以我...1)在一个终端运行监视器2)set.sh在另一个终端运行我的脚本3)浏览终端 1 中的所有日志并在其末尾复制了一个时间戳。4)单击复选标记以激活连接。5)将时间戳复制到文本文件中。6)在监视终端中全选并粘贴到同一个文本文件中。7)搜索时间戳(在 5000 多行日志中,没开玩笑!)以找到单击引起的 dbus 命令,并将其转换为activate.sh后面的脚本。

击鼓....

 #!/bin/bash
 gdbus call \
    --system \
    --dest org.freedesktop.NetworkManager \
    --object-path /org/freedesktop/NetworkManager \
    --method org.freedesktop.NetworkManager.ActivateConnection \
 "/org/freedesktop/NetworkManager/Settings/1"\
 "/org/freedesktop/NetworkManager/Devices/2"\
 "/"

我传递的参数/org/freedesktop/NetworkManager/Settings/1以及随后的参数可以从特定设备的 dbus 中获取,一旦获得它们,我就将它们硬编码到我的以太网适配器中。

我现在可以打开网络设置 GUI 并运行set.sh,然后activate.sh查看 GUI 使用新设置进行更新。

我认为 dbus 很酷,但文档不够友好。事实证明,逆向工程比阅读文档更有效。

谢谢阅读!

相关内容