如何在ruby中解析ip route

时间:2012-12-10 05:30:57

标签: ruby ip

假设多角度PC有两个网络接口,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中执行此操作代码。

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

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

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

0 个答案:

没有答案