• 締切済み

C#でIPアドレスの取得について

現在C#で、IPアドレスの取得で苦戦しています。 例えばNICが2枚ささっている状態で、 特定の通信先と通信を行っているNICのIPアドレスを取得するには どうすればいいでしょうか。 最終的には、通信を行っているIPアドレスから、 どちらのNICで通信を行っているか判別して そのNICのMACアドレスを取得したいです。 現在考えているのは、pingを通信先に飛ばしてその送信元のIPアドレスを取得するという事です。 ただ、これも実現方法がいまいち曖昧で、現在取得できていません・・・。 Pingを飛ばすところまではできているのですが、送信元のIPアドレスの取得のやり方がわかりません。 通信先は固定の予定なので、その通信先と通信する際に使用しているIPアドレスを知りたいです。 pingの送信元のIPアドレスを取得する方法、 またはほかに良い方法があれば教えていただけますでしょうか。 よろしくお願いします。

みんなの回答

  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.2

TCP での接続が確立しているなら、以下のコードで確認できます。 ※全角文字でインデントしてあります。 // filename: get_mac.cs // compile: %WINDIR%\Microsoft.NET\Framework\v3.5\csc get_mac.cs // or // %WINDIR%\Microsoft.NET\Framework\v2.0.50727\csc get_mac.cs using System; using System.Net; using System.Net.NetworkInformation; namespace get_mac {   class Program   {     static void Main(string[] args)     {       if(args.Length == 2)       {         print_mac(args[0], Convert.ToInt32(args[1]));       }       else       {         Console.WriteLine("Usage: get_mac <remore IP address> <remote port>");       }     }     private static void print_mac(string remote_ip, int port)     {       string ip = get_local_ip_address(remote_ip, port);       if(ip != "")       {         string mac = get_mac_address(ip);         if(mac != "")         {           Console.WriteLine("MAC address: " + mac);         }       }       else       {           Console.WriteLine("Not found");       }     }     private static string get_local_ip_address(string remote_ip, int port)     {       IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();       IPEndPoint[] endPoints = ipProperties.GetActiveTcpListeners();       TcpConnectionInformation[] tcpConnections = ipProperties.GetActiveTcpConnections();       foreach (TcpConnectionInformation tcp_info in tcpConnections)       {         if (tcp_info.RemoteEndPoint.Address.ToString() == remote_ip &&          tcp_info.State == TcpState.Established &&          tcp_info.RemoteEndPoint.Port == port         )         {           return tcp_info.LocalEndPoint.Address.ToString();         }       }       return "";     }     private static string get_mac_address(string ip)     {       NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();            foreach (NetworkInterface adapter in adapters)       {         if (adapter.OperationalStatus == OperationalStatus.Up)         {           IPInterfaceProperties ip_prop = adapter.GetIPProperties();           UnicastIPAddressInformationCollection addrs = ip_prop.UnicastAddresses;           foreach (UnicastIPAddressInformation addr in addrs)           {             if (addr.Address.ToString() == ip)             {               PhysicalAddress phy = adapter.GetPhysicalAddress();               return phy.ToString();             }           }         }       }       return "";     }   } }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ルーティングテーブルを取得してなんかできないかなぁ.

関連するQ&A