
現在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ランキング
-
C#での関数テーブルの作り方
-
マルチスレッドで同時にFTPアッ...
-
C# ListBoxのアイテムをユーザ...
-
C#でIPアドレスの取得について
-
C言語のポインターに関する警告
-
System.err. printlnとSystem.o...
-
JavaScriptの変数をjavaのメソ...
-
ORA-01858: 数値を指定する箇所...
-
VBAで配列の計算
-
javaで質問です。 文字列2023/2...
-
JScrollPaneで、表示がおかしく...
-
JavaScriptを使ってロト6の当...
-
streamで送信されたArrayListを...
-
JavaScriptとVBScriptに関して
-
IF関数でEmpty値を設定する方法。
-
動的配列が存在(要素が有る)か...
-
ループ処理の際、最後だけ","を...
-
オブジェクトの中のプロパティ...
-
1~100までの数字を表示したい
-
matchesを否定文として使う方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Java8以降】csvファイルの複...
-
特定の文字列が一致する行から...
-
C# ListBoxのアイテムをユーザ...
-
マルチスレッドで同時にFTPアッ...
-
「指定されたキャストは有効で...
-
Delphiで改行文字の置換がうま...
-
C#でプロパティを使わずXMLにデ...
-
ArrayListを改良したい
-
jap実行時のTomcatのエラーに困...
-
C#でIPアドレスの取得について
-
C#での関数テーブルの作り方
-
strcmp関数などでの複数の文字...
-
string→CStringの型変換について
-
strtokでの空文字への置き換え
-
php掲示板でトリップ(ID)をつ...
-
C#での関数テーブルの作り方
-
PHPのSHA256変換について
-
c言語
-
C++ ファイルからデータを取得
-
C++のmap
おすすめ情報