我知道主机将始终在传输之前检查目标节点的子网,以便知道它是否必须将其发送到不同子网的网关。
但是,是否有可能通过低级编程语言制作以太网数据包以绕过子网检查并简单地通过线路将其发送到交换机,以便最终到达目标节点?
据我了解,在不同子网之间传输数据包的唯一障碍是主机在发送数据包之前执行的检查,以便它可以将网关 MAC 或节点 MAC 作为目的地。
问候
我知道主机将始终在传输之前检查目标节点的子网,以便知道它是否必须将其发送到不同子网的网关。
但是,是否有可能通过低级编程语言制作以太网数据包以绕过子网检查并简单地通过线路将其发送到交换机,以便最终到达目标节点?
据我了解,在不同子网之间传输数据包的唯一障碍是主机在发送数据包之前执行的检查,以便它可以将网关 MAC 或节点 MAC 作为目的地。
问候
但是,是否可以通过低级编程语言制作以太网数据包(因此它可以绕过子网检查)并简单地通过电线将其发送到交换机?
可能的?是的。实际的?不。
主机在尝试发送数据包时会查询其本地路由表。在许多平台上,您可以添加一个路由条目,使主机直接在线上发送特定目标子网的数据包,而无需使用网关,方法是将其自己的本地接口指定为网关。
另一个技巧是向假网关添加静态路由,并为该网关添加一个静态 ARP 条目,分别带有另一台主机的 MAC。
大多数情况下,为其中一台主机配置一个额外的 IP 地址要容易得多,这样它就可以与另一台主机共享一个子网。
每个具体是如何完成的都是特定于主机的,并且在这里是题外话。
其他选项包括使用路由器作为中间的网关或(更好地)重新编号主机之一。
在 Linux 上,一种这样的低级接口称为SOCK_RAW(手册页)。它的使用不一定限于特定的编程语言,但通常使用 C。
正如 Zac67 所指出的,这几乎没有实际应用。我只用它来编写测试工具。