ルーティングテーブルの取得 (C#)(F#)
WMI(WindowsManagementInstrumentation) からルーティングテーブルの情報を取得することができます。
サンプルは、「route print -4」とした時と同じです。
なお、インターフェースは、「Win32_IP4RouteTable」クラスでは、インデックス番号しか取得できませんので、IPアドレスが必要な場合は別途取得が必要です。
※参照設定で「System.Management」を追加する必要があります。
C#サンプル
using System; using System.Management; namespace Example { class Program { static void Main(string[] args) { Console.WriteLine("ネットワーク宛先tネットマスクtゲートウェイtインターフェイスtメトリック"); ManagementObjectSearcher ms = new ManagementObjectSearcher("select * from Win32_IP4RouteTable"); foreach (var m in ms.Get()) { var name = m["Name"]; var mask = m["Mask"]; var nextHop = m["NextHop"]; if ((string)nextHop == "0.0.0.0") { nextHop = "リンク上"; } var interfaceIndex = m["InterfaceIndex"]; var metric1 = m["Metric1"]; Console.WriteLine("{0,15}t{1,15}t{2,15}t{3,2}t{4}", name, mask, nextHop, interfaceIndex, metric1); } Console.WriteLine(); Console.WriteLine("何かのキーを押してください。"); Console.ReadKey(); } } }
F#サンプル
open System.Management open System.Linq printfn "ネットワーク宛先tネットマスクtゲートウェイtインターフェイスtメトリック" let ms = new ManagementObjectSearcher("select * from Win32_IP4RouteTable") ms.Get().Cast<ManagementObject>() |> Seq.iter(fun m -> let name = m.["Name"]:?>string let mask = m.["Mask"]:?>string let nextHop = let n = m.["NextHop"]:?>string if n = "0.0.0.0" then "リンク上" else n let interfaceIndex = m.["InterfaceIndex"]:?>int let metric1 = m.["Metric1"]:?>int printfn "%-15st%-15st%-15st%dt%d" name mask nextHop interfaceIndex metric1 ) printfn "何かのキーを押してください。" Console.ReadKey() |> ignore