トップ回答者
プログラムからネットワークの再接続をしたい

質問
-
よろしくお願いします。
現在、接続されているネットワークを自動で切断し、そのあと、自動で接続する、
という一連の流れを、プログラムから実行したいのですが、
どのような方法があるでしょうか。
「ネットワークと共有センター」の「接続または切断」をクリックして、「切断」と「接続」を手動でクリックすれば可能ですが、これを自動化させたいです。
できれば、接続時のユーザー情報の入力は省略(OS に記録しているものを自動で使用)したいです。
(接続先は変更しません。)
OS 側で、「切断時に自動接続する」などの設定が必要であれば、それもプログラムから設定したいです。
(この設定があれば、切断するだけで、自動的に再接続されるはずなので・・・)
PC を再起動すると、自動でインターネットが切断された後、接続されますが、
PC を再起動せずに、これを行いたいです。
自分で調べた範囲では、
「ネットワーク、インターネットに接続しているか調べる」(http://dobon.net/vb/dotnet/internet/detectinternetconnect.html)
によって、現在、接続されているか、切断されているか、を知る方法がわかりました。
接続、切断する方法はわかりませんでした。
VB.NET から shell などを起動する方法でも構いません。
どうぞよろしくお願いします。
本番環境
OS : Windows 7
開発環境
OS : Windows 7
.Net Framework 3.5
- 編集済み FrRL 2013年7月6日 13:30
回答
-
こんな感じの .vbs ファイルを実行してみるのはどうでしょうか。(COM 操作が多いので、あえて VB.NET ではなく VBS で記述しています)
WMI あたりで、もっとスマートにできるのかも知れませんが…。
Option Explicit Dim sh, fo, fs, fi, f, v Set sh = WScript.CreateObject("Shell.Application") For Each f In sh.Namespace("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}").Items() If f.Name = "ローカル エリア接続" Then For Each v In f.Verbs If Left(v.Name, 5) = "無効にする" Then v.DoIt WScript.Sleep 1500 Exit For End If Next Exit For End If Next WScript.Sleep 1500 For Each f In sh.Namespace("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}").Items() If f.Name = "ローカル エリア接続" Then For Each v In f.Verbs If Left(v.Name, 5) = "有効にする" Then v.DoIt WScript.Sleep 1500 Exit For End If Next Exit For End If Next
- 回答としてマーク 星 睦美 2013年7月29日 2:18
-
-
依頼主の環境(本番環境)では、複数の ISP (インターネットサービスプロバイダー)と契約していて、「ネットワークと共有センター」の「接続または切断」で、複数の PPPoe 接続が一覧表示される状態なのですが、この中の、接続中の PPPoe 接続について、切断と再接続を行いたいです。
(依頼主ではなく)質問者さんは、複数のISP契約、またその環境下でどのように設定すれば希望するISP側の経路で通信可能か、などわかりますでしょうか? (いわゆるマルチホーミングですが。)
それが扱えないのであれば、手に負えないように思います。現に再現できないと書かれていますが、質問者さんの環境はJittaさんが指摘しているようなブロードバンドルーターがはさまっているのではありませんか? その程度で再現できないと言ってしまうようでは…。
質問そのものに対しては、魔界の仮面弁士さんの提案するVBS以外にも、WMIのWin32_NetworkAdapterクラス及びそのEnable / Disableメソッドを使用することもできます。…と書くと今度はWMIの操作方法を聞かれるかな。
- 回答としてマーク 星 睦美 2013年7月29日 2:20
すべての返信
-
こんな感じの .vbs ファイルを実行してみるのはどうでしょうか。(COM 操作が多いので、あえて VB.NET ではなく VBS で記述しています)
WMI あたりで、もっとスマートにできるのかも知れませんが…。
Option Explicit Dim sh, fo, fs, fi, f, v Set sh = WScript.CreateObject("Shell.Application") For Each f In sh.Namespace("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}").Items() If f.Name = "ローカル エリア接続" Then For Each v In f.Verbs If Left(v.Name, 5) = "無効にする" Then v.DoIt WScript.Sleep 1500 Exit For End If Next Exit For End If Next WScript.Sleep 1500 For Each f In sh.Namespace("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}").Items() If f.Name = "ローカル エリア接続" Then For Each v In f.Verbs If Left(v.Name, 5) = "有効にする" Then v.DoIt WScript.Sleep 1500 Exit For End If Next Exit For End If Next
- 回答としてマーク 星 睦美 2013年7月29日 2:18
-
魔界の仮面弁士さま、ご回答ありがとうございます。
ローカルエリア接続の有効・無効の方法について、大変参考になりました。
COM 操作が多い場合は、VBS の方が記述しやすいんですね。勉強になります。
早速試させていただく前に、一つだけ、確認したいことがあるのですが、ローカルエリア接続の再接続でも、PC に割り当てられたグローバル IP アドレスは更新されるでしょうか?
こちらの質問について、言葉が不十分な点があり、まことに申し訳ありませんでした。目的は、インターネットプロバイダーから取得した IP アドレスを新たに取得しなおすことです。
依頼主の環境(本番環境)では、複数の ISP (インターネットサービスプロバイダー)と契約していて、「ネットワークと共有センター」の「接続または切断」で、複数の PPPoe 接続が一覧表示される状態なのですが、この中の、接続中の PPPoe 接続について、切断と再接続を行いたいです。
しかし、当方の開発環境では再現できなくて・・・。
PPPoe 接続をしている時、ローカルエリア接続の再接続を行うと、プロバイダーへの再接続が要求されるのでしょうか?ローカルエリア接続の再接続の場合、LAN 内でのプライベート IP アドレスだけが再取得される、という形になりませんでしょうか?
言葉不足でまことに申し訳ございませんでした。
どちらにしても、ご提示いただいたコードは大変参考になりました。この後、ぜひ試させて頂きたいと思います。
(この類の開発は、テスト用の PPPoe のアカウントを依頼主から借りないと難しいですね。すみません…)
- 編集済み FrRL 2013年7月6日 17:08 追記のための編集
-
-
依頼主の環境(本番環境)では、複数の ISP (インターネットサービスプロバイダー)と契約していて、「ネットワークと共有センター」の「接続または切断」で、複数の PPPoe 接続が一覧表示される状態なのですが、この中の、接続中の PPPoe 接続について、切断と再接続を行いたいです。
(依頼主ではなく)質問者さんは、複数のISP契約、またその環境下でどのように設定すれば希望するISP側の経路で通信可能か、などわかりますでしょうか? (いわゆるマルチホーミングですが。)
それが扱えないのであれば、手に負えないように思います。現に再現できないと書かれていますが、質問者さんの環境はJittaさんが指摘しているようなブロードバンドルーターがはさまっているのではありませんか? その程度で再現できないと言ってしまうようでは…。
質問そのものに対しては、魔界の仮面弁士さんの提案するVBS以外にも、WMIのWin32_NetworkAdapterクラス及びそのEnable / Disableメソッドを使用することもできます。…と書くと今度はWMIの操作方法を聞かれるかな。
- 回答としてマーク 星 睦美 2013年7月29日 2:20
-
ご回答いただき、有難うございます。
また、フォーラムオペレーター様による回答のマーク有難うございました。
作業の報告が遅くなってしまい申し訳ございません。
現在、本番環境と同様の環境(複数 ISP を保持する環境)で開発・テストをさせていただくために、先方と話を進めている状況です。
NAT 環境およびマルチホーミングについて、お教えいただいたキーワードをもとに私なりに調べました。また WMI の操作方法についても私なりに調べることができました。
NAT 環境下での使用なのかどうかという点と、その場合の再接続の方法、またどのようにしてマルチホーミングを行っているのか、または行っていないのかという点を今後調べ、また対策について調べていく予定です。
大変参考になるアドバイスをいただいて有難うございました。
後日、一つの解が得られた際に、結果を報告させて頂きたいと思います。