温馨提示×

Linux C++怎样配置网络

小樊
39
2026-08-16 00:41:50
栏目: 编程语言

在 Linux 下用 C++ 配置网络,常见方式有三种,取决于你想“配置到什么程度”。下面按从常见到偏底层给你一个清晰说明,并附示例。


一、最常用方式(推荐):调用系统命令(简单可靠)

Linux 网络配置通常由 ipifconfigroute 等命令完成,
C++ 程序可以直接调用它们

示例:用 system() 配置 IP

#include <cstdlib>
#include <iostream>

int main() {
    // 设置 IP 地址
    system("ip addr add 192.168.1.100/24 dev eth0");

    // 启动网卡
    system("ip link set eth0 up");

    // 设置默认网关
    system("ip route add default via 192.168.1.1");

    // 设置 DNS(写入 resolv.conf)
    system("echo 'nameserver 8.8.8.8' > /etc/resolv.conf");

    return 0;
}

✅ 优点

  • 简单
  • 稳定
  • 和手动敲命令效果一致

⚠️ 注意

  • 需要 root 权限
  • system() 安全性一般(适合内部工具)

二、使用 exec 系列函数(比 system 更专业)

system() 更可控,不依赖 shell。

#include <unistd.h>
#include <iostream>

int main() {
    pid_t pid = fork();
    if (pid == 0) {
        // 子进程执行 ip 命令
        execl("/usr/bin/ip", "ip", "addr", "add",
              "192.168.1.100/24", "dev", "eth0", nullptr);
    }
    return 0;
}

✅ 适合:

  • 守护进程
  • 网络管理程序

三、真正“底层配置”:使用 Netlink Socket(高级)

如果你想ip 命令一样直接配置内核网络
需要使用 Netlink(NETLINK_ROUTE)

适用场景

  • 网络管理工具
  • 路由器 / 防火墙
  • 不想依赖外部命令

核心思路

  1. 创建 AF_NETLINK socket
  2. 构造 rtnetlink 消息
  3. 发送给内核

示例(设置 IP 地址,简化版)

#include <sys/socket.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <arpa/inet.h>
#include <string.h>
#include <iostream>

int main() {
    int sock = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
    if (sock < 0) {
        perror("socket");
        return 1;
    }

    sockaddr_nl sa{};
    sa.nl_family = AF_NETLINK;
    if (bind(sock, (sockaddr*)&sa, sizeof(sa)) < 0) {
        perror("bind");
        return 1;
    }

    std::cout << "Netlink socket created\n";
    close(sock);
    return 0;
}

⚠️ 注意

  • Netlink 编程复杂
  • 需要构造 ifaddrmsgrtmsg 等结构体
  • 推荐参考 man 7 rtnetlink

四、不同配置内容对照表

配置内容 推荐方式
设置 IP ip addr add
启停网卡 ip link set
路由 ip route
DNS /etc/resolv.conf
防火墙 iptables / nftables
高级网络 Netlink

五、编译 & 运行

g++ netconfig.cpp -o netconfig
sudo ./netconfig

六、建议

初学者 / 应用层程序
→ 用方式一或二(调用命令)

系统级 / 网络工具
→ 用 Netlink


如果你愿意,可以告诉我:

  • 配置网卡 IP / 路由 / DNS / 防火墙 哪一类?
  • 桌面程序 / 嵌入式 / 服务器 / 路由器

我可以直接给你完整可运行代码

0