Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法
ASCII.jp / 2024年10月27日 10時0分
コンピューターにおけるネットワーク関連のトラブルは随分減った印象があるが、複雑性が解消されたわけでもない。今でもネットワークは、複雑で面倒なものの1つだろう。
今のWindowsでは「設定」→「ネットワークとインターネット」で、稼働中のネットワークインターフェース(ネットワークアダプタ)だけを単純化して見せているが、ifconfig.exeコマンドを使うと大量のネットワークアダプタが表示される。
ここには仮想環境のネットワークドライバや、Windows Updateのときに新規登録がされ、使われなくなったネットワークアダプタなどが表示されている。
今回は、ネットワークアダプタがどのように選択されるかについて解説する。インターネット接続が標準的になってから、主となるネットワークアダプタはインターネット接続が可能なものだ。また、現在のWindowsでは、標準では複数のネットワークアダプタを併用せず、できる限り1つのネットワークアダプタだけを使うようになっている。
ネットワークアダプタの情報を得るには?
ユーザーが単に確認するだけなら、前述の「設定」→「ネットワークとインターネット」のほか、コントロールパネルの「ネットワークと共有センター」を使う。また、コマンドラインからなら「ipconfig.exe」が利用できる。
適当なアダプタ(Wi-Fi、イーサネット、携帯電話)を選択することで、Windowsが利用している「インターネット接続」に使われるネットワークを見つけることができる。
現在では、インターネットに接続しているかどうかが、ネットワークアダプタの最も重要な状態である。逆に言えば、インターネット接続に使えないネットワークアダプタは個々に使い道があったとしても、Windowsやユーザーにとっては「重要」なネットワークアダプタではない。
PowerShellでは、「Get-NetAdapter」コマンド(https://learn.microsoft.com/en-us/powershell/module/netadapter/get-netadapter?view=windowsserver2022-ps)で、現在Windowsが認識しているネットワークアダプタの一覧を得ることができる。ただし、実行させてみると、大量のネットワークアダプタが表示されることがある。
この中から、正しいものを選ぶ必要があるのだが、それには、別の情報を使う必要がある。1つは、アダプタが現在接続しているネットワークとその状態を示す「接続プロファイル」だ。これは、無線LANの接続先などとして、コントロールパネルの「ネットワークと共有センター」で「ネットワーク」として表示されていたもの。この接続プロファイルには、IPv4/IPv6個別にインターネット接続状態が記録されている。
接続プロファイルを取得するには、「Get-NetConnectionProfile」コマンド(https://learn.microsoft.com/en-us/powershell/module/netconnection/get-netconnectionprofile?view=windowsserver2022-ps)を使う。単純に実行すれば、現在稼働中のネットワークが接続しているネットワークのプロファイルを表示する(正確には、CIMのMSFT_NetConnectionProfileオブジェクト)。
ここには、「IPv6Connectivity」と「IPv4Connectivity」の2つのプロパティがある。
それぞれ、IPv6、IPv4でのインターネット接続状態を示す。現状では、IPv4でインターネットに接続できてもIPv6を利用できないネットワークが存在するため、両者を個別で調べる必要がある。
もう1つは、Windows接続マネージャー(WCM。Windows Connection Manager)だ。WCMは、複数の有効なネットワークがあるとき、その中から適切なものを選択する機能を持つ。WCMの資料(https://learn.microsoft.com/ja-jp/windows-hardware/drivers/mobilebroadband/understanding-and-configuring-windows-connection-manager)によれば、Windowsは以下の優先順位でネットワークアダプタを選択する。
イーサネット 無線LAN 携帯電話(モバイルブロードバンド)
また、WCMは、インターネット接続に使うネットワークアダプタを1つに絞る。これにより、複数のネットワークアダプタがあっても、適切なものが1つだけ選ばれるようになっている。ポリシーにより挙動を変更することは可能だが、WCMはGUIを持たず、現在の設定値を得るためであっても、プログラムを書く必要がある。
ネットワークの種類は、前述のGet-NetAdapterでは、MediaTypeプロパティで示される。MediaTypeは、NDISMediumプロパティ(数値)を文字列に変換したスクリプトプロパティである。MediaTypeとNDISMediumを以下の表に示す。
現在インターネット接続に使われている ネットワークアダプタを得るには?
インターネット接続に利用されているネットワークアダプタには、以下の条件が成立する。
接続プロファイルの「IPv6Connectivity」と「IPv4Connectivity」のどちらかが“Internet” アダプタのVirtualがfalse(-Physicalオプションで指定可能) アダプタのStatusが"Up"
まず、接続プロファイルのプロパティから、対応するIfIndexを得る。IfIndexは、インターフェースインデックスともいい、Windowsでネットワークアダプタを特定するものの1つ。具体的には、
$InetIfIdx=(Get-NetConnectionProfile | ? {$_.IPv4Connectivity -eq "Internet" -or $_.IPv6Connectivity -eq "Internet").InterfaceIndex
とすると、インターネット接続が可能なネットワークに接続しているネットワークアダプタのIfIdx(配列)が得られる。
「アダプタのVirtualがfalse」とは、アダプタが仮想デバイスではなく、物理デバイスであることを示す。これは、「Get-NetAdapter -Physical」で取り出すことが可能。「アダプタのStatusが"Up"」という条件を課すと、
$myNet=Get-NetAdapter -Physical | ? status -eq "Up" | ? $_.ifIndex -in $InetIfIdx}
となる。ここで、$myNetに記録されているネットワークアダプタが1つしかなければ、それが現在インターネット接続に使われているメインのネットワークアダプタとなる。候補となるネットワークアダプタの数は、
$myNet.Count
で調べることができる。これが2以上であれば、さらに絞り込む必要がある。
複数のネットワークアダプタが残ったとき、いくつかの可能性がある。1つは複数の「イーサネット」ネットワークアダプタが接続されいる場合、もう1つは、PCに携帯電話ネットワーク接続機能があり、すでにネットワークに接続している場合である。この場合には、Wi-Fiがメインになっている可能性もある。
さらに絞り込むには、WCMの優先順位を使う。「イーサネット」があれば、それを選択、なければ「無線LAN」、さらになければ「携帯電話」と絞り込んでいく。ただし、それぞれのネットワークアダプタが複数存在する可能性を考慮する必要がある。
WCMでは同種のMediaTypeの場合、高速なものが選択されるという。このため、100MbpsのFastイーサネットよりもギガビットイーサネットが優先される。この速度はLinkSpeedプロパティとして表示されるが、こちらは人間が読みやすいようにSI接頭辞を使ったbps表示で比較が面倒だが、Speedプロパティには、bps単位のリンク速度(あくまでも仕様上の速度)が入っているので、これでソートする。
$myNet = $myNet | ? MediaType -eq "802.3" | sort speed -Descending
これでも複数のイーサネットアダプタが残る場合、先頭のものを選択すると、少なくとも2つ目以降よりもspeedプロパティが大きい、または同じものになる。ただ、同種のイーサネットアダプタが複数インターネット接続する状況は、よほど特殊な環境でもない限り考えられないため、実用上、ここまで追求すればいいだろう。
最後に、if文を使ったスクリプトを示す。このままコマンドラインとして実行することも、スクリプトや関数の一部にすることも可能である。
$InetIfIdx=(Get-NetConnectionProfile | ? IPv6Connectivity -eq Internet).InterfaceIndex ; $tempMyNet=Get-NetAdapter -Physical | where-object {$_.status -eq "Up" -and $_.ifIndex -in $InetIfIdx} ; $mynet = $tempMyNet if ($tempMyNet.Count -gt 1 ){ $mynet = $tempMyNet | ? MediaType -eq "802.3" | sort-object speed -Descending ; if($mynet.count -gt 1) { $mynet = $mynet[0]; } elseif ($mynet -eq 0) { $mynet = $tempMyNet[0] } } $mynet
一般的なネットワーク接続であれば、これでネットワークアダプタを1つに絞り込めるはずだ。メインとなるネットワークアダプタが分かれば、そのインターフェース・インデックスを使うことで、IPアドレスの取得やさまざまなコマンドで最初から対象を絞り込むことが可能になる。
この記事に関連するニュース
-
あらためてIPv6基本のキ
ASCII.jp / 2024年11月3日 10時0分
-
Windows10の更新プログラム「KB5045594」公開、多機能プリンタ改善
マイナビニュース / 2024年10月24日 9時48分
-
Google Meetのエラーを装いマルウェア配布、偽会議の招待に注意
マイナビニュース / 2024年10月21日 9時48分
-
バージョン24H2で消せない8.63GBの領域を確認 - 阿久津良和のWindows Weekly Report
マイナビニュース / 2024年10月13日 16時0分
-
窓辺の小石 第187回 Secure Shell Encounter
マイナビニュース / 2024年10月11日 15時1分
ランキング
-
1Windowsの「ペイント」と「メモ帳」がAI対応!? もう高価な編集アプリ要らないかも
ASCII.jp / 2024年11月7日 17時30分
-
2「直視できないほどひどい」顔などを大火傷 “元国民的美少女”が現状や経過を報告→「傷跡が残りませんように」心配の声続々
ねとらぼ / 2024年11月7日 11時54分
-
3お花をたくさん編んでいくと…… 出来上がったかわいすぎるアイテムに「かわいい! 絶対作ります」
ねとらぼ / 2024年11月4日 9時30分
-
4ドコモ、「つながりやすさ」向上へ次の手を打つ 「エリアの広さ」に加わる要素は?
ITmedia Mobile / 2024年11月7日 19時6分
-
5ソックリすぎと話題の「JCB偽サイト」に潜入 巧妙化するネット詐欺の最新手口
おたくま経済新聞 / 2024年11月7日 10時43分
記事ミッション中・・・
記事にリアクションする
記事ミッション中・・・
記事にリアクションする
エラーが発生しました
ページを再読み込みして
ください