如何为套接字设置多个路由条目?

我对静态路由非常陌生,我们的客户端要求为套接字实现静态路由。 当我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

上一篇: How to setup multiple routing entries for socket?

下一篇: How do you save images in an R shiny function