
現在C#で、IPアドレスの取得で苦戦しています。
例えばNICが2枚ささっている状態で、
特定の通信先と通信を行っているNICのIPアドレスを取得するには
どうすればいいでしょうか。
最終的には、通信を行っているIPアドレスから、
どちらのNICで通信を行っているか判別して
そのNICのMACアドレスを取得したいです。
現在考えているのは、pingを通信先に飛ばしてその送信元のIPアドレスを取得するという事です。
ただ、これも実現方法がいまいち曖昧で、現在取得できていません・・・。
Pingを飛ばすところまではできているのですが、送信元のIPアドレスの取得のやり方がわかりません。
通信先は固定の予定なので、その通信先と通信する際に使用しているIPアドレスを知りたいです。
pingの送信元のIPアドレスを取得する方法、
またはほかに良い方法があれば教えていただけますでしょうか。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
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 "";
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# ListBoxのアイテムをユーザ...
-
マルチスレッドで同時にFTPアッ...
-
特定の文字列が一致する行から...
-
C# JSONについて
-
Delphiで改行文字の置換がうま...
-
PHPのSHA256変換について
-
System.err. printlnとSystem.o...
-
オブジェクトの中のプロパティ...
-
変数を動的に利用するには?
-
IF関数でEmpty値を設定する方法。
-
ループ処理の際、最後だけ","を...
-
ORA-01858: 数値を指定する箇所...
-
flush()とclose()について
-
yyyymmddからyyyy/mm/d...
-
JSPやサーブレットでSystem.out...
-
C# ListBoxのインデックスの値...
-
C#から、C++で作成したdll内の...
-
C言語のポインターに関する警告
-
Javaで改行などが出来ないのです。
-
繰り返しによる星印の出力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Java8以降】csvファイルの複...
-
C# ListBoxのアイテムをユーザ...
-
マルチスレッドで同時にFTPアッ...
-
特定の文字列が一致する行から...
-
strcmp関数などでの複数の文字...
-
デバックができない C#
-
「(string)$i」のような変則な文
-
C#でIPアドレスの取得について
-
★C#のXML読み込みについて
-
string→CStringの型変換について
-
jap実行時のTomcatのエラーに困...
-
p->next(ポインタ)的なことを...
-
コンストラクタの変数を別のコ...
-
C#についてです
-
プログラミングC++に関して質...
-
ArrayListを改良したい
-
「指定されたキャストは有効で...
-
strtokでの空文字への置き換え
-
C#での関数テーブルの作り方
-
C# JSONについて
おすすめ情報