マルチホーン PC に IP アドレス 192.168.1.100/24 と 192.168.2.100/24 の 2 つのネットワーク インターフェイスがあるとします。他の 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