現在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で質問しましょう!
似たような質問が見つかりました
- 固定IP スマホやPCのIPアドレスについて教えてください。 5 2023/07/07 19:53
- ルーター・ネットワーク機器 10Gbpsの恩恵 5 2022/11/16 15:48
- ネットワーク 一台のサーバーに複数個のIPアドレスを追加出来る事は知っていますが、具体的にどうやるのでしょうか? 4 2022/11/03 20:12
- FTTH・光回線 グローバルIPアドレスの変更について 1 2022/04/23 05:32
- 格安スマホ・SIMフリースマホ スマホ ドコモはIPアドレスが固定みたいですが 格安SIMの場合はどうなのですか? 3 2023/07/07 22:17
- ツイキャス ツイキャスでアカウントロックされたとき、IPアドレスが自動取得で変更されても、PC端末が特定される? 1 2022/10/15 15:49
- その他(インターネット接続・インフラ) ブラウザにIPアドレス入力した時 1 2022/06/16 19:08
- その他(プログラミング・Web制作) このプログラミング誰か教えてくれませんか 4 2022/04/29 15:56
- サーバー Googleドライブなどを使わずにテザリングAndroidでWindowsとファイル共有 1 2023/02/19 13:14
- その他(コンピューター・テクノロジー) batファイルでPCの設定内容やプロパティーを取得したいのですが、コマンド1個で1ファイルとなるのを 2 2022/04/27 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java HashMapで数値データを取...
-
全取得したデータをjspで順番に...
-
実数からの小数部の取得
-
c# デリゲート関連の命名について
-
javaで電卓を作りたいのですが...
-
ダブルクォーテーションのrepla...
-
C# タスクバーを隠したフォーム...
-
ArrayList内HashMapの取得
-
文字コード判別ルーチンGet...
-
javaのCSVデータ読込についてです
-
ArrayListを利用する問題
-
VB6,論理演算子Orの使い方がわ...
-
csv出力について
-
Selenium IDEでexportしたコー...
-
ページング
-
yyyymmddからyyyy/mm/d...
-
ArrayList でスタックを
-
Java int sum = 0は必要ですか?
-
javaで質問です。 文字列2023/2...
-
JSP/Servletのパラメータの受け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字列が一致する行から...
-
C# ListBoxのアイテムをユーザ...
-
strcmp関数などでの複数の文字...
-
【Java8以降】csvファイルの複...
-
C#での関数テーブルの作り方
-
C#でIPアドレスの取得について
-
「指定されたキャストは有効で...
-
マルチスレッドで同時にFTPアッ...
-
C# JSONについて
-
Delphiで改行文字の置換がうま...
-
C#でプロパティを使わずXMLにデ...
-
C++におけるポインターと変数の...
-
jap実行時のTomcatのエラーに困...
-
C# で、あるフォルダー内にある...
-
決まった拡張子のファイルだけ...
-
strtokでの空文字への置き換え
-
c言語
-
javascript初心者
-
python文字列置換について。
-
strncpy後のatoiがおかしい
おすすめ情報