如何从C程序设置(并替换现有的)默认网络路由?如果可能的话,我想在没有shell命令的情况下这样做(这是一个低内存嵌入式系统)。您也可以在不指定网关IP地址的情况下设置默认路由吗?在我的应用程序中,我想将ppp0或eth0设置为默认路由,具体取决于电缆是否插入eth0。
谢谢, 佛瑞德
答案 0 :(得分: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;
}
答案 1 :(得分:2)