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

【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.lryc.cn/news/2392615.html

相关文章:

  • GitHub 趋势日报 (2025年05月27日)
  • VR视角下,浙西南革命的热血重生​
  • 深入解析Kafka JVM堆内存:优化策略与监控实践
  • 【高级终端Termux】在安卓手机/平板上使用Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程(含安装WPS,VS Code)
  • 基于BERT-Prompt的领域句子向量训练方法
  • 高频面试--redis
  • CRMEB 单商户Java版 v2.3公测版发布,欢迎体验!
  • (四) 本地YARN集群的部署
  • 华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 《软件工程》第 12 章 - 软件测试
  • 消息队列-kafka为例
  • 学习STC51单片机20(芯片为STC89C52RCRC)
  • 链路追踪神器zipkin安装详细教程教程
  • RabbitMQ备份与恢复技术详解:策略、工具与最佳实践
  • bug: uniCloud 查询数组字段失败
  • Php JIT 使用详解
  • 视觉分析开发范例:Puppeteer截图+计算机视觉动态定位
  • Linux 基础开发工具的使用
  • ElasticSearch查询指定时间内出现的次数/2秒内出现的次数
  • 华为云Flexus+DeepSeek征文 | Dify-LLM平台一键部署教程及问题解决指南
  • STP协议:如何消除网络环路风暴
  • 哈工大计算机系统2025大作业——Hello的程序人生
  • 物联网常用协议Modbus、CAN、BACnet介绍
  • Vue中van-stepper与input值不同步问题及解决方案
  • react基础技术栈
  • Three.js搭建小米SU7三维汽车实战(4)场景搭建
  • redis五种数据结构底层实现
  • Excel 统计某个字符串在指定区域出现的次数
  • 【Kubernetes】ubuntu20.04通过kubeadm + Docker安装k8s
  • 前端开源JavaScrip库