通过linux用户空间C中的特定下一跳发送ping

通过linux用户空间C中的特定下一跳发送ping,c,linux,sockets,ping,icmp,C,Linux,Sockets,Ping,Icmp,如何从我正在编写的Linux C用户空间应用程序发送icmp请求并控制下一个跃点 我有一个NIC(192.168.1.10/24),它连接到同一子网上的两个路由器(192.168.1.1和192.168.1.2) 我想通过192.168.1.1和192.168.1.2访问互联网(8.8.8),并根据延迟结果决定我的默认路由 有没有一种方法可以控制用户空间C中的下一跳?我正在使用原始套接字。您可以使用: 在计算机网络中,源路由,也称为路径寻址,允许数据包的发送方部分或完全指定数据包通过网络的路由。

如何从我正在编写的Linux C用户空间应用程序发送
icmp
请求并控制下一个跃点

我有一个NIC(
192.168.1.10/24
),它连接到同一子网上的两个路由器(
192.168.1.1
192.168.1.2

我想通过
192.168.1.1
192.168.1.2
访问互联网(
8.8.8
),并根据延迟结果决定我的默认路由

有没有一种方法可以控制用户空间C中的下一跳?我正在使用原始套接字。

您可以使用:

在计算机网络中,源路由,也称为路径寻址,允许数据包的发送方部分或完全指定数据包通过网络的路由。[1]相反,在传统路由中,网络中的路由器根据数据包的目的地以增量方式确定路径

不过,请注意,源路由数据包被立即、无声地丢弃是很常见的,因为接收方无法相信它们来自它们似乎来自的地方

Sonicwall:

丢弃源路由IP数据包-(默认情况下启用)。如果您正在测试两个特定主机之间的通信量并且正在使用源路由,请清除此复选框

IP源路由是IP中的一个标准选项,它允许数据包的发送方指定将数据包发送到目的地所需的部分或全部路由器

此IP选项通常被阻止使用,因为窃听者可以通过插入通过路由器C从A向B发送数据包的选项来使用它来接收数据包。路由表应该控制数据包的路径,以便它不会被发送者或下游路由器覆盖


我建议您对与
ping
密切相关的实用程序进行一些研究,即
traceroute
实用程序。如果您这样做,您将了解它如何逐跳“跟踪”到目的地的路由。您需要设置目的地MAC地址以匹配您的下一跳。不知道你所说的原始套接字到底是什么意思,如果你想在以太网报头中四处走动,你应该使用。跟踪/跟踪路由对我有帮助吗?它只是每跳减少TTL。好吧,我想我误解了你的问题。。。“你想在两条路线之间切换(按程序),而不是找出你的数据包要走哪条路线?”Someprogrammerdude。几乎。我知道如何交换路线。我想通过R1(192.168.1.1)和R2(192.168.1.2)持续测试延迟,并根据它更改路由。