我对静态路由很陌生,我们的客户要求为套接字实现静态路由。当我用谷歌搜索时,我遇到了 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, SOCK_DGRAM, 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, SIOCADDRT, RtEntry);
}
会起作用,我们可以创建多个路由条目并添加到套接字 FD。这将更新系统范围的路由表。
它类似于route add ..
命令
为了测试,我将网关设置为我的 PC ip 地址并在那里启动了 wireshark。设置路由配置后,给定的 IP 范围将路由到我的 PC。感谢@osgx 提供的信息,它实际上设置了系统范围的路由表。
关于c++ - 如何为套接字设置多个路由条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42243643/