当前位置: 首页 > ops >正文

【Ubuntu】Ubuntu网络管理

Ubuntu 网络管理

ubuntu/debian 中的网络管理

  • NetworkManager,使用nmcli查询与操作网络配置
    /run/NetworkManager/no-stub-resolv.conf
    对应命令行例子: nmcli device show
  • systemd-networkd,使用netplan的yaml文件来配置网络
    /usr/lib/systemd/systemd-networkd
  • systemd-resolved,dns的配置文件
    16.04|20.04 /lib/systemd/systemd-resolved
    24.04 /usr/lib/systemd/systemd-resolved
    /run/systemd/resolve/resolv.conf
    一般使用命令行systemd-resolve --status 低版本中没有(16.04)

NetworkManager

提供libnm库读取与操作网络配置,对应命令是nmcli
使用c的例子来展示网络信息, 能获取到每个网口DHCP得到的DNS.

#include <NetworkManager.h>
#include <glib.h>
#include <stdio.h>static char *
ip4_address_as_string (guint32 ip)
{char *ip_string;struct in_addr tmp_addr;tmp_addr.s_addr = ip;ip_string = g_malloc0 (INET_ADDRSTRLEN + 1);if (!inet_ntop (AF_INET, &tmp_addr, ip_string, INET_ADDRSTRLEN))strcpy (ip_string, "(none)");return ip_string;
}int main() {GError *error = NULL;NMClient *client = nm_client_new(NULL, &error);if (error) {g_print("Failed to create NetworkManager client: %s\n", error->message);g_error_free(error);return -1;}// 获取所有活跃的连接GPtrArray *active_connections = nm_client_get_active_connections(client);if (active_connections) {for (guint i = 0; i < active_connections->len; i++) {NMActiveConnection *active_connection = g_ptr_array_index(active_connections, i);NMConnection *connection = nm_active_connection_get_connection(active_connection);if (connection) {const char *connection_id = nm_connection_get_id(connection);g_print("Active Connection ID: %s\n", connection_id);}// 获取与该活跃连接相关的设备GPtrArray *devices = nm_active_connection_get_devices(active_connection);if (devices) {for (guint j = 0; j < devices->len; j++) {NMDevice *device = g_ptr_array_index(devices, j);const char *device_name = nm_device_get_iface(device);g_print("Device: %s\n", device_name);// 获取设备的 IPv4 配置NMIPConfig *ip4_config = nm_device_get_ip4_config(device);if (ip4_config) {if (ip4_config) {GPtrArray *addresses = nm_ip_config_get_addresses(ip4_config);for (guint i = 0; i < addresses->len; i++) {NMIPAddress *addr =(NMIPAddress*) g_ptr_array_index(addresses, i);const char *str = nm_ip_address_get_address(addr);g_print("  IPv4 Address: %s\n", str);guint32 hostmask, network, bcast, netmask;guint32 addr_bin;nm_ip_address_get_address_binary (addr, &addr_bin);netmask = nm_utils_ip4_prefix_to_netmask (nm_ip_address_get_prefix (addr));network = addr_bin & netmask;hostmask = ~netmask;bcast = network | hostmask;str = ip4_address_as_string (bcast);g_print("Broadcast Address:%s\n", str);g_free (str);str = ip4_address_as_string (netmask);g_print("Subnet Mask:%s\n", str);g_free (str);}const char *gateway = nm_ip_config_get_gateway(ip4_config);g_print("Gateway:%s\n", gateway);const char * const *dns = nm_ip_config_get_nameservers (ip4_config);for (i = 0; dns && dns[i] && i < 3; i++) {g_print("DNS[%d]:%s\n", i, dns[i]);}}}}}}} else {g_print("No active connections found.\n");}g_object_unref(client);return 0;
}

netplan

使用systemd-networkd做服务,配置文件在/etc/netplan中

network:version: 2# 如果renderer是NetworkManager则netplan不会使用systemd-networkd服务也不会启动.renderer: networkdethernets:enp3s0:dhcp4: yesaddresses: []dhcp-identifier: macoptional: yes
http://www.xdnf.cn/news/9714.html

相关文章:

  • Vscode 解决 #include <> 找不到的问题
  • x86_64-apple-ios-simulator 错误
  • 政策+技术双轮驱动:MiC建筑如何成为“好房子”建设的破局之道
  • UE5.5 pixelstreaming插件打包报错
  • UE5打包项目设置Project Settings(打包widows exe安装包)
  • 《深入解析UART协议及其硬件实现》-- 第三篇:UART ASIC实现优化与低功耗设计
  • 图像数据与显存
  • WebFuture:后台修改内容链接地址保存提示内容链接地址禁止输入外部url链接
  • Spring Boot自动装配原理
  • QT+opecv如何更改图片的拍摄路径
  • Oracle 慢sql排查
  • 前端面试准备2
  • Axure设计案例——科技感渐变柱状图
  • 24点游戏的最小数字组合问题
  • 常见关系型数据库对比指南
  • 制造业的未来图景:超自动化与劳动力转型的双重革命
  • 数据库中常见的锁机制详解
  • Java设计模式之迭代器模式详解
  • Sigma-Aldrich胰蛋白酶细胞解离方案速览
  • 从零开始的云计算生活——第十四天,困难重重,安全管理。
  • 第4讲、Odoo 18 模块系统源码全解与架构深度剖析【modules】
  • Axure项目实战:驾驶舱(数据一张图)制作教程
  • 【Deepseek 学网络互联】跨节点通信global 和节点内通信CLAN保序
  • 新一代Python管理UV完全使用指南|附实际体验与效果对比
  • Ubuntu系统如何部署Crawlab爬虫管理平台(通过docker部署)
  • STM32 单片机启动过程全解析:从上电到主函数的旅程
  • 数据库 | timescaledb时序表使用注意事项
  • udp 传输实时性测量
  • 【解决办法】ubuntu重启不起来,输入用户名和密码进不去,又重新返回登录页。
  • ubuntu 安装上传的 ffmpeg_7.1.1.orig.tar.xz并使用