在 Linux 下用 C++ 配置网络,常见需求有几种,不同场景做法不一样。下面按从简单到底层给你一个清晰说明,并附示例。
如果只是配置 IP、路由、DNS,最简单可靠的方式是调用 ip、ifconfig、route 等命令。
#include <cstdlib>
int main() {
system("ip addr add 192.168.1.100/24 dev eth0");
system("ip link set eth0 up");
return 0;
}
✅ 适合:
⚠ 注意:
适合 网络通信编程,不是“配置网络接口”。
#include <sys/socket.h>
#include <arpa/inet.h>
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
inet_pton(AF_INET, "192.168.1.100", &addr.sin_addr);
bind(sock, (struct sockaddr*)&addr, sizeof(addr));
✅ 适合:
❌ 不适合:
ioctl(配置网卡参数,偏底层)可以设置 IP、子网掩码、MAC 等。
#include <sys/ioctl.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
int main() {
int fd = socket(AF_INET, SOCK_DGRAM, 0);
struct ifreq ifr{};
strcpy(ifr.ifr_name, "eth0");
struct sockaddr_in* addr = (struct sockaddr_in*)&ifr.ifr_addr;
addr->sin_family = AF_INET;
inet_pton(AF_INET, "192.168.1.100", &addr->sin_addr);
ioctl(fd, SIOCSIFADDR, &ifr);
close(fd);
}
✅ 适合:
❌ 缺点:
netlink 是 Linux 内核官方推荐方式,用于网络配置、路由、防火墙。
✅ 功能最强
❌ 学习成本高
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
一般配合 libnl 使用:
sudo apt install libnl-3-dev libnl-route-3-dev
Linux DNS 通常配置在:
/etc/resolv.conf
#include <fstream>
std::ofstream resolv("/etc/resolv.conf");
resolv << "nameserver 8.8.8.8\n";
⚠ 注意:
systemd-resolved| 需求 | 推荐方式 |
|---|---|
| 设置 IP / 网关 | system("ip ...") |
| 网络通信 | socket |
| 嵌入式配置网卡 | ioctl |
| 专业网络管理 | Netlink / libnl |
| 配置 DNS | 写 /etc/resolv.conf |
你可以告诉我:
我可以直接给你完整可编译示例。