2017-05-01 6 views
0

タイトルとして。私がネイティブのRubyメソッドを必要とするのは、LinuxとMacOSでコードを移植したいからです。 "ip route show"はLinuxでも使えますが、MacOSは "ip"コマンドを持っていません。ホストマシンのデフォルトゲートウェイを取得するネイティブRubyメソッドはありますか?

ネイティブRubyメソッドがない場合は、他の移植可能なメソッドも使用できます。

+0

チェック[ 'Socket'](https://ruby-doc.org/stdlib-2.2.4/libdoc/socket/rdoc/Socket.html#method-c-getaddrinfo)クラスがすべきそこからいくつかの有益な情報を得ることができます。 – engineersmnky

+0

http://stackoverflow.com/questions/6782658/how-to-get-default-gateway-in-mac-osx#7627059このmacosスタイルを使用することができます – Garren

+0

ようこそへスタックオーバーフロー。 "[ask]"と "[mcve]"とリンクされたページと "[Stack Overflowユーザーにはどの程度の研究努力が必要か](http://meta.stackoverflow.com/questions/261592)"を読んでください。あなたの質問はうまくいきません。あなたは検索しましたか?なぜそうならないのでしょうか?もしそうなら、どこで、なぜそれが助けになりませんでしたか?コードを書きましたか?そうでない場合、なぜですか?もしそうなら、あなたが求めている問題を示すために必要な最小限のコードは何ですか? –

答えて

1

私は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 
0

私はおそらく何かを使用します以下のような:

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 
関連する問題