タイトルとして。私がネイティブのRubyメソッドを必要とするのは、LinuxとMacOSでコードを移植したいからです。 "ip route show"はLinuxでも使えますが、MacOSは "ip"コマンドを持っていません。ホストマシンのデフォルトゲートウェイを取得するネイティブRubyメソッドはありますか?
ネイティブRubyメソッドがない場合は、他の移植可能なメソッドも使用できます。
タイトルとして。私がネイティブのRubyメソッドを必要とするのは、LinuxとMacOSでコードを移植したいからです。 "ip route show"はLinuxでも使えますが、MacOSは "ip"コマンドを持っていません。ホストマシンのデフォルトゲートウェイを取得するネイティブRubyメソッドはありますか?
ネイティブRubyメソッドがない場合は、他の移植可能なメソッドも使用できます。
私はSocket
は、あなたが探しているデータを提示することができますが、MacOSでnetstat
を使用することができますし、コマンドを選択するために、プラットフォームの検出を行うとは思わない:
def gateway
case Gem::Platform.local.os
when "darwin" then `netstat -rn -f inet | grep 'default' | awk '{print $2}'`
else `ip route | awk '/default/{print $3}'`
end.chomp
end
私はおそらく何かを使用します以下のような:
def default_gateway
`which ip`.empty? ? mac_os_gateway : linux_gateway
end
def mac_os_gateway
ip_from `route -n get default | grep gateway`
end
def linux_gateway
ip_from `ip route | grep default`
end
def ip_from(str)
str.match(/([0-9]{1,3}\.){3}([0-9]{1,3}){1}/).to_s
end
チェック[ 'Socket'](https://ruby-doc.org/stdlib-2.2.4/libdoc/socket/rdoc/Socket.html#method-c-getaddrinfo)クラスがすべきそこからいくつかの有益な情報を得ることができます。 – engineersmnky
http://stackoverflow.com/questions/6782658/how-to-get-default-gateway-in-mac-osx#7627059このmacosスタイルを使用することができます – Garren
ようこそへスタックオーバーフロー。 "[ask]"と "[mcve]"とリンクされたページと "[Stack Overflowユーザーにはどの程度の研究努力が必要か](http://meta.stackoverflow.com/questions/261592)"を読んでください。あなたの質問はうまくいきません。あなたは検索しましたか?なぜそうならないのでしょうか?もしそうなら、どこで、なぜそれが助けになりませんでしたか?コードを書きましたか?そうでない場合、なぜですか?もしそうなら、あなたが求めている問題を示すために必要な最小限のコードは何ですか? –