現在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も見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
決まった拡張子のファイルだけ...
-
C#での関数テーブルの作り方
-
【Java8以降】csvファイルの複...
-
javascript初心者
-
プログラミングの問題です。大...
-
java
-
Visual Basic でのコードをASCI...
-
マージソートについて
-
【struts】 ActionFormで別のAc...
-
スタイルシートが適用されない。
-
C言語でunsigned char配列を連...
-
アルファベットのソート
-
JAVAのDouble型の小数点以下の...
-
ダブルクォーテーションのrepla...
-
hiddenの値が期待した値で取得...
-
Java配列でNullPointerExceptio...
-
JSPでImportエラーになります
-
2つのスクロールバーを連動させ...
-
sin曲線とcos曲線を描くプログ...
-
C言語からJavaに書き換えの質...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# ListBoxのアイテムをユーザ...
-
strcmp関数などでの複数の文字...
-
マルチスレッドで同時にFTPアッ...
-
C#での関数テーブルの作り方
-
特定の文字列が一致する行から...
-
string→CStringの型変換について
-
【Java8以降】csvファイルの複...
-
GDI+ DrawString() で指定範囲...
-
C#でIPアドレスの取得について
-
「指定されたキャストは有効で...
-
C# JSONについて
-
C#で型変換
-
Delphiで改行文字の置換がうま...
-
java HashMapで数値データを取...
-
GridViewで複数のDropDownList...
-
strtokでの空文字への置き換え
-
C++のmap
-
決まった拡張子のファイルだけ...
-
PHPのSHA256変換について
-
jap実行時のTomcatのエラーに困...
おすすめ情報