如何使用路由来制定协议特定的路由

时间:2015-08-17 20:11:00

标签: macos bsd netstat

BSD / MacOS X有一个命令“route”,用于更改系统路由表。它支持的选项之一是-proto1(以及proto2 / proto3),它们用于将路由设置为特定于协议。我想用它来设置特定于UDP的路由。

我尝试过单独使用-proto1 udp和add函数。唉,这不起作用。我一直试图找到一个使用-proto1的例子,但我一直无法找到route命令的这个选项的例子。

任何人都可以解释这是如何使用或指向一个例子?谢谢。

1 个答案:

答案 0 :(得分:0)

route命令的-proto *标志设置与相应路由表条目RTF_PROTO字段中的rt_flags *标志位匹配(即它们没有其他值参数 - 它们各自代表各个位。)

它们不会使路由"协议特定",而是通用标志位,可以通过路由使用的任何低层协议以协议特定的方式使用。

在BSD网络代码协议中,代码的特定部分通常会定义更有意义的名称以映射到相同的标志位。例如,在ARP层中,RTF_ANNOUNCE标志与rt_flags位中的RTF_PROTO2字段相同。

在ARP的情况下,通过arp命令在路由表中设置标志(如果在手动创建ARP条目时在命令行上给出了单词pub),而不是route命令。但是,netstat -r命令可能会将生成的路由表条目上的标志显示为2,表示RTF_PROTO2(与route -v show一样)。

如果要强制特定传输协议的所有数据包,例如无论是UDP还是TCP,您都必须研究与路由表不同的机制 - 例如,某些防火墙可以根据IP头中给出的协议值将数据包转发到指定的接口。