Gil*_* PJ 7 c++ sockets linux routing
我是静态路由的新手,我们的客户端要求为套接字实现静态路由.当我用Google搜索时,我遇到了rtentry设置路由信息.当我打开这个结构时,我看到了静态路由的字段
struct sockaddr rt_dst; /* Target address. */
struct sockaddr rt_gateway; /* Gateway addr (RTF_GATEWAY). */
struct sockaddr rt_genmask; /* Target network mask (IP). */
Run Code Online (Sandbox Code Playgroud)
但是我如何在这里设置多个条目?创建多个rtentry和调用ioctl(FileDes, SIOCADDRT, &rtentry)将解决我的问题?
int32_t FileDes = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
for(auto RtEntry : RtEntriesList)
{
ioctl(FileDes, SIOCADDRT, RtEntry)`
}
Run Code Online (Sandbox Code Playgroud)
如果配置,我该如何测试?如果您可以提供链接以了解有关这些内容的更多信息,将会很有帮助.
终于我得到了答案。
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);
}
Run Code Online (Sandbox Code Playgroud)
如果可以的话,我们可以创建多个路由条目并添加到套接字 FD 中。这将更新系统范围的路由表。
它类似于route add ..命令
为了进行测试,我将网关设置为我的 PC IP 地址,并在那里启动wireshark。设置路由配置后,给定的 IP 范围将路由到我的 PC。感谢 @osgx 提供的信息,它实际上设置了系统范围的路由表。
| 归档时间: |
|
| 查看次数: |
611 次 |
| 最近记录: |