1

假设一台多角电脑有两个网络接口,IP 地址为 192.168.1.100/24 和 192.168.2.100/24。如果任何其他 PC 向其中任何一个发送多播消息,我需要发回响应,但在响应的 UDP 数据部分,我需要告诉那台 PC 我的正确 IP 地址,它们可以到达。

假设 192.168.1.123 发送该多播消息,我可以使用ip route get to 192.168.1.123来确定哪个是正确的接口(即 192.168.1.100),但我不知道如何在 ruby​​ 代码中执行此操作。

调用外部进程然后解析标准输出不是我想要的,因为它对于繁忙的网络来说太慢了,并且让它跨平台并不容易。

目前我模仿使用这些代码解析的路线:

localifs = Socket.ip_address_list.keep_if { |addr| addr.ipv4? and not(addr.ipv4_loopback?) }
raise Error, "There is no alive ipv4 interface on local machine" if localifs.empty?
src_addr_i = IPAddr.new(src_addr).to_i
localifs = localifs.sort do |x,y|
  (IPAddr.new(x.ip_address).to_i ^ src_addr_i) <=> (IPAddr.new(y.ip_address).to_i ^ src_addr_i)
end
host = localifs.first.ip_address
4

0 回答 0