我是静态路由的新手,我们的客户端要求为套接字实现静态路由.当我用Google搜索时,我遇到了rtentry来设置路由信息.当我打开这个结构时,我看到了静态路由的字段
struct sockaddr rt_dst; /* Target address. */ struct sockaddr rt_gateway; /* Gateway addr (RTF_GATEWAY). */ struct sockaddr rt_genmask; /* Target network mask (IP). */
但是我如何在这里设置多个条目?
创建多个rtentry并调用ioctl(FileDes,SIOCADDRT和& rtentry)将解决我的问题?
int32_t FileDes = socket(PF_INET,SOCK_DGRAM,IPPROTO_IP); for(auto RtEntry : RtEntriesList) { ioctl(FileDes,SIOCADDRT,RtEntry)` }
解决方法
最后我得到了答案.
int32_t FileDes = socket(PF_INET,IPPROTO_IP); struct rtentry Route1; struct rtentry Route2; struct rtentry Route3; // configure Route1 // configure Route2 // configure Route3 RtEntriesList.push_back(&Route1); RtEntriesList.push_back(&Route2); RtEntriesList.push_back(&Route3); for(auto RtEntry : RtEntriesList) { ioctl(FileDes,RtEntry); }
将工作,我们可以创建多个路由条目并添加到套接字FD.这将更新系统范围的路由表.
它类似于route add ..命令
为了测试我将网关设置为我的PC IP地址并在那里启动wireshark.设置路由配置后,给定的IP范围将路由到我的PC.感谢@osgx提供了实际设置系统范围路由表的信息.