質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

13321閲覧

C# wi-fiのIPアドレスを取得する方法は無いものなのでしょうか?

GiveAHand

総合スコア286

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/10/04 04:23

wi-fiに繋いで使用しているパソコンがあります。

そのパソコンが接続しているwi-fiの接続先は、随時変わっていく環境にありまして、接続先のIPアドレスを、一定時間ごとに記録し、ログを出力したいと思っているのですが、その方法がわからなくて困っています。

ネットで調べますと、

【50枚】C#で現在接続しているWifiのIPアドレスを取得したい... - Yahoo ..
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10146406910

このような記事がありまして、そこには、

C#

1// ホスト名を取得 2string hostname = Dns.GetHostName(); 3 4// ホスト名からエントリー取得 5IPHostEntry ipentry = Dns.GetHostEntry(hostname); 6 7// IPアドレスは2つ以上のケースもあるのですべて列挙(有線+無線など) 8string msg = string.Empty; 9foreach (IPAddress ip in ipentry.AddressList) 10{ 11msg += ip.ToString() + "\r\n"; 12}

このようなロジックが記載されていますが、
実際に実行してみると、ローカルのIPアドレスしか取得出来ません。

wi-fiのIPアドレスを取得する方法は無いものでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2016/10/04 04:28

「Wi-fiのIPアドレス」とは、何を指しているのでしょうか。
GiveAHand

2016/10/04 04:39

maisumakun様 ご指摘ありがとうございます。 wi-fiのIPアドレスとは、ブラウザからリクエスト送信した時に、受信するサーバー側が認識するアドレスのつもりで書きました。 いわゆる、アクセス解析ツールなどで表示されるアドレスです。 つまり、wi-fiのルーターのIPアドレスと言うことでしょうか。。。
guest

回答2

0

ベストアンサー

こんにちは。
質問文のwi-fiのIPアドレスというのは、おそらく「グローバルIPアドレス」のことですかね。
その前提で回答してみます。

グローバルIPアドレスは「WAN側から見た自分のアドレス」のことなので、
WANに接しているルーターなどの中身を覗きに行くか、または適当なWebサービスを利用するのが手っ取り早いでしょう。
以下のコードはWebサービスを利用してグローバルIPアドレスを取得するコードになります。
これで目的のものが入手できるでしょうか?

csharp

1async Task Test() 2{ 3 using (var client = new HttpClient()) // HttpClientをusingで使うのは本当はよくない 4 { 5 try 6 { 7 var responce = await client.GetStringAsync("https://api.ipify.org"); // ipifyのサービスを利用 8 Console.WriteLine(responce); 9 } 10 catch 11 { 12 // 接続エラーが起きたりすると例外が出るので何か処理すること 13 } 14 } 15}

せっかくなのでクラスにしてみました。
丸ごとコピーすればそのまま使えると思います。

csharp

1// using System.Net.Http; を追加 2public static class GlobalIPAddressGetter 3{ 4 private const string api = "https://api.ipify.org"; 5 6 private static readonly WeakReference<HttpClient> weakreference = new WeakReference<HttpClient>(null); 7 8 public static Task<string> GetAsync() 9 { 10 var client = default(HttpClient); 11 if (!weakreference.TryGetTarget(out client)) 12 weakreference.SetTarget(client = new HttpClient()); 13 14 return client.GetStringAsync(api); 15 } 16}

awaitを付けて呼び出すだけです。例外処理は必須です。

投稿2016/10/04 05:26

編集2016/10/04 06:15
tamoto

総合スコア4103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

htsign

2016/10/04 05:59

横から失礼します。 tamotoさんのコードを拝見して http://inet-ip.info/ip にアクセスしてみましたがタイムアウトしてしまいましたので、代替のURLを提案させていただきます。 http://api.ipify.org ここはレスポンスも速いのでおすすめです。 http://www.ipify.org/ で各言語のサンプルコードも紹介されています。
tamoto

2016/10/04 06:11

情報ありがとうございます! 検索で引っ掛けて適当に見繕ったので、品質のことは考慮してなかったですね。。回答コードに反映させていただきます。 グローバルIPアドレスを返すだけのAPIは世の中にたくさん存在しているので、環境に適したものを選ぶのが良いでしょうね。
GiveAHand

2016/11/12 00:35

tamoto様、htsign様 お返事が大変遅くなりまして、申し訳ございません。 もう返事ができないほど追い詰められておりまして。。。 おかげさまでうまくいきました。 危機を脱出できました。 本当に、ありがとうございました!
guest

0

c#で作る前に、ipconfigで実現したい機能ができそうかどうか確認できると思うので軽くお試しください。
Windows 7 MACアドレス(Wi-Fi)確認方法

必要な情報を取得できることが確認できたら、こちらを参考にC#で実装してみてください。
[C#]ネットワーク(NIC)の情報をプログラムで取得する

投稿2016/10/04 04:39

ishi9

総合スコア1294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GiveAHand

2016/10/04 04:52

ishi9様 ご回答ありがとうございます。 ipconfig /allで見ても、 wi-fiのIPアドレスが出てきません。。。 という事は、取得出来ないということなのでしょうか。。。 または、PCの設定か何かがおかしいという事なのでしょうか。。。
ishi9

2016/10/04 05:00

私もやったことがないので恐縮ですが、 「無線LAN 親機 IPアドレス」でぐぐると結構面倒なことやってる人が多いようですね。 上手くいくのかはわかりませんが、デフォルトゲートウェイの違いで判別している人もいるようですね。それを確認するとどうでしょう? それがだめなら次点はフリーソフトを使う、でしょうか
GiveAHand

2016/11/12 00:37

ishi9様 お返事遅くなりましてすみません。 そうですね。 フリーソフトでやるのがてっとり早いですね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問