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

标签 c++ linux sockets routing

我对静态路由很陌生,我们的客户要求为套接字实现静态路由。当我用谷歌搜索时,我遇到了 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/

相关文章:

c++ - 警告 : returning reference to local temporary object

c++ - Meyers 提出的 MCU 寄存器抽象的新布局

linux - 使用 netlink inet_diag 进行实时套接字监控

regex - 对特殊字符使用 sed

python - 如何在重新连接测试的单元测试中终止套接字

c++ - 如何使用 C++ 有效地将排序与 vector 合并

c++ - 这段代码是做什么的 : static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}};

c++ - 同一程序在 Windows 和 Linux 上的行为不同

sockets - 带有 Unix 模块的 ocaml 简单的 http 服务器

Python从socket中分割数据