如何为套接字设置多个路由条目?
我对静态路由非常陌生,我们的客户端要求为套接字实现静态路由。 当我rtentry
,我遇到了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的信息,它实际上设置了系统范围的路由表。
链接地址: http://www.djcxy.com/p/38343.html