我如何设置(并replace现有的)从C程序的默认networking路线? 如果可能的话,我希望不使用shell命令(这是一个低内存embedded式系统)。 还可以设置默认路由而不指定网关IP地址? 在我的应用程序中,我想使ppp0或eth0成为默认路由,具体取决于电缆是否插入到eth0中。
谢谢,弗雷德
你可以对你想要模仿的route
命令进行比较。 这给你相关的系统调用有用的改变路由。
您可能会对proc(5)接口感兴趣,例如它的/proc/net/route
伪文件。
另请参阅ip(7) 。
您可以通过IOCTL调用来设置C程序的默认路由。
void main() { int sockfd; struct rtentry rt; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd == -1) { perror("socket creation failed\n"); return; } struct sockaddr_in *sockinfo = (struct sockaddr_in *)&rt.rt_gateway; sockinfo->sin_family = AF_INET; sockinfo->sin_addr.s_addr = inet_addr("Your Address"); sockinfo = (struct sockaddr_in *)&rt.rt_dst; sockinfo->sin_family = AF_INET; sockinfo->sin_addr.s_addr = INADDR_ANY; sockinfo = (struct sockaddr_in *)&rt.rt_genmask; sockinfo->sin_family = AF_INET; sockinfo->sin_addr.s_addr = INADDR_ANY; rt.rt_flags = RTF_UP | RTF_GATEWAY; rt.rt_dev = "eth0"; if(ioctl(sockfd, SIOCADDRT, &rt) < 0 ) perror("ioctl"); return; }