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

How to setup multiple routing entries for socket?

本文关键字:路由 设置 套接字      更新时间:2023-10-16

我是静态路由的新手,我们的客户端要求实现套接字的静态路由。当我谷歌搜索时,我遇到了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提供的信息实际设置了系统宽路由表。