写一个 c++ 获取 eth0 的网关的’代码
时间: 2024-05-09 22:21:53 浏览: 138
以下是获取eth0网关的C代码:
```c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <linux/route.h>
int main() {
int fd;
struct rtentry rt;
struct sockaddr_in *addr;
char dest[] = "0.0.0.0";
char ifname[IF_NAMESIZE];
memset(&rt, 0, sizeof(rt));
rt.rt_dst.sa_family = AF_INET;
addr = (struct sockaddr_in *)&rt.rt_gateway;
inet_pton(AF_INET, dest, &addr->sin_addr);
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
perror("socket error");
return 1;
}
if (ioctl(fd, SIOCDELRT, &rt) < 0) {
perror("ioctl error");
close(fd);
return 1;
}
if (ioctl(fd, SIOCADDRT, &rt) < 0) {
perror("ioctl error");
close(fd);
return 1;
}
if (ioctl(fd, SIOCGIFNAME, &rt) < 0) {
perror("ioctl error");
close(fd);
return 1;
}
strncpy(ifname, rt.ifr_name, IF_NAMESIZE);
close(fd);
printf("Gateway interface: %s\n", ifname);
return 0;
}
```
运行该程序即可获取eth0的网关接口名称。
阅读全文