ネットワークコマンドの総合デパート

netsh

 

netコマンドが各種ネットワークコマンドを寄せ集めたスーパーマーケットならば、netshコマンドは、より大規模で構造化された総合デパートだろう。

 

書式

netsh [-a AliasFile] [[-c ]Context] [-r RemoteMachine [-u [DomainName\]UserName [-p {Password | *}]]] {NetshCommand | -f ScriptFile}・・・・直接モード

netsh [-a AliasFile] [-c Context] [-r RemoteMachine [-u [DomainName\]UserName [-p {Password | *}]]]・・・・対話モード

 

対応OSXPVista

 

●netshとは

 netshは、実行中のコンピュータのネットワーク構成を表示および変更するコマンドだ。ローカルでもリモートでも使用でき、指定したコンピュータに対して複数のコマンドをバッチモードで連続実行できるスクリプト機能もある。さらにnetshを使ってテキストファイルに構成スクリプトを保存することができ、保存したスクリプトは他のコンピュータを構成する際に実行スクリプトとして利用できる。

 netshの機能はコンテキストと呼ばれるグループによって分けられている。コンテキストには、"firewall" コンテキスト、"interface" コンテキスト、"ras" コンテキストなどがある。また、コンテキストの中には、さらにサブコンテキストがあるものもある。この辺はディレクトリ構造に似ている。

 netshコマンドの実行には、直接モードと対話モードの2つの方法がある。直接モードでは、最初にすべてのコマンドとパラメータを指定して、実行後に自動的に終了するモードだ。対話モードというのは、実行後に専用のコマンドプロンプトが開き、そのコマンドプロンプトでサブコマンド (netshコマンド) を実行するモードだ。

 netshコマンドを対話モードで実行すると、コマンドプロンプトが "netsh>" に変わる。-rオプションでリモートコンピュータに接続した場合は、コマンドプロンプトが "[コンピュータ名] netsh>" になる。-cオプションを指定した場合は、そのコンテキストに移動し、コマンドプロンプトが "netsh コンテキスト名>" となる。対話モードを終了するには「bye」または「exit」または「quit」と入力すればよい。

 対話モードで、あるコンテキストから別のコンテキスト/サブコンテキストに移動するには、netshコマンドプロンプトでコンテキスト名を入力する。例えば "interface" コンテキストに移動するには「interface」と入力すればよい。コマンドプロンプトが "netsh interface>" と変わることで、現在のコンテキストが分かる。現在のコンテキストから親コンテキストに戻るには「..」または「.」と入力すればよい。

 コンテキストにより使用できるコマンドが異なる。そのコンテキストで使用できるコマンドを知りたい場合は、各コンテキストのコマンドプロンプトで「?」あるいは「/?」あるいは「help」と入力する。現在のコンテキストから、コンテキストを変更しないままサブコンテキストのコマンドを実行するには、サブコンテキスト名に半角スペースを空けてコマンドを入力する。なお、コンテキスト名およびコマンド名は、他のコンテキストおよびコマンドと区別できる範囲で短く省略して入力できる

 

対話モードでは自由にコンテキストを移動できる。

 

テキスト ボックス: ●netshはネットワークシェル
 netshコマンドは、cmd.exeやcommand.comと同じシェルコマンドでもある。cmd.exeやcommand.comと違うのは、ネットワーク機能に限定されたネットワーク用のシェルコマンドだという点だ。Microsoftでは将来的にすべてのネットワークコマンドをnetshに統合する計画を持っているようだ。
 netshコマンドは、Windows 2000で初めて登場したコマンドであり、その後、Windows XP、SP1、SP2、Vistaと急速に充実しつつあり、OSのバージョンやSPによって機能にかなりの違いがある。また、このコマンドは非常に複雑な体系になっている上に、HELPも分かりにくく、HELPで表示されるコマンドが使えなかったり、逆にHELPに表示されないコマンドが利用できる場合もあるなど、HELPの間違いも目につく。

 

●netsh set address

 netsh set addressコマンドは、TCP/IPのアドレス関連の設定を行うためのコマンドだ。このコマンドは「interface ip (v4/v6)」コンテキスで利用でき、IPアドレスをDHCPで設定するか固定アドレスにするか、固定アドレスの場合のアドレス、サブネットマスク、デフォルトゲートウェイ、デフォルトゲートウェイメトリックの設定ができる。IPアドレスを固定アドレスにし、アドレス10.0.0.9、サブネット255.0.0.0、デフォルトゲートウェイ10.0.0.1、ゲートウェイメトリック1に設定するには、直接モードでは「netsh interface ip set address "ローカル エリア接続" static 10.0.0.9 255.0.0.0 10.0.0.1 1」と入力する。対話モードでは "interface ip" コンテキストに移動して、上記のコマンドのうち "netsh interface ip" を省略した「set address "ローカル エリア接続" static 10.0.0.9 255.0.0.0 10.0.0.1 1」を実行すればよい。DHCPを利用するように設定するには「netsh interface ip set address "ローカル エリア接続" dhcp」と入力する。

 なお、本稿では以下すべてで直接モードの場合を解説する。対話モードでは "netsh コンテキスト" 部分を省略して入力してほしい。

 同様のコマンドで、TCP/IPアドレスを追加するnetsh add addressコマンド、TCP/IPアドレスを削除するnetsh delete addressコマンド、TCP/IPアドレスを表示するnetsh show addressコマンドもある

 

netsh set address」コマンドで固定IPアドレスを設定し、結果を「netsh show address」コマンドで確認。

 

●netsh dump

 同じノートPCを会社と家庭とで使っているような場合、会社と家庭とではネットワークの設定が違っていることはよくある。GUI画面でその都度設定を変更するのは面倒だが、netshコマンドを使うと、スクリプトファイルから簡単に設定を変更することができる。スクリプトファイルは自分で作ることもできるが、やはりnetshコマンドを使うと簡単に作成できる。なお、この機能はWindows Vistaではバグがあるようでうまく動作しない。Windows XPでのみ動作する。

 まず現在のネットワーク設定をスクリプトファイルに保存する。例えば、スクリプトファイルをc:\ "network1" というファイル名 (拡張子は付けない) で作成するなら、コマンドプロンプトで「netsh interface ip dump > c:\network1」と入力する。次に、別のネットワーク環境の設定を行った後で「netsh interface ip dump > c:\network2」と入力する。さらに別のネットワーク環境を保存したい場合は同様に、スクリプトファイル名を変えてコマンドを実行する。

 スクリプトファイルができたところで、そのスクリプト環境に変更する場合は、コマンドプロンプトで「netsh exec <スクリプトファイル名>」あるいは「netsh -f <スクリプトファイル名>」と入力する。例えば、network1の環境にしたいなら「netsh exec c:\network1」、または「netsh -f c:\network1」と入力し、network2の環境にしたいのであれば「netsh exec c:\network2」あるいは「netsh -f c:\network2」と入力する。

 dumpコマンドでのスクリプトファイルの作成は一度行えば、よいが、execコマンドあるいは "-f" オプションによる設定は毎回行うことになるので、これをバッチファイルに記述しておけばさらに簡単になる。

 

netsh dump」コマンドで複数のIP設定を保存する。

 

●netsh reset

 IP設定が間違っているために正常にネットワークが動作しなかったり、動作が不安定になった場合、あるいはレジストリ値の異常によりネットワークが正常に動作しなくなったり、設定の変更ができなくなったときなどで出番になるのがresetコマンドだ。interface ipコンテキストにおけるresetコマンドは、関連したレジストリを削除して、IP設定をWindowsがインストールされたときの初期状態に戻すコマンドであり、これはGUIではできない機能だ。ただし、Windows Vistaではこのコマンドにもバグがあるようで期待したような動作をしない。Windows XPでのみ使っていただきたい。

 interface ipコンテキストでresetコマンドを実行するためには「netsh interface ip reset logfile」のように、リセット情報を記録するログファイルの指定が必須だ。これは省略できない。

 

interface ipコンテキストで「netsh reset」コマンドを実行し、その結果を確認。

 

 resetコマンドはfirewallコンテキストでも有用なコマンドだ。Windowsファイアウォールのデフォルト設定は、%windir%\Infフォルダにある「netfw.inf」ファイルに記述されている。この内容はWindowsのインストール時やSPの適用時に読み込まれ、その記述にしたがってファイアウォールが設定される。resetコマンドを実行したときも同様に、netfw.infファイルが読み込まれ、その内容にしたがってファイアウォールが設定される。

 このことは、デフォルト設定として、あらかじめ望みどおりの設定をnetfw.infに記述しておいて、そのnetfw.infファイルを配布し、resetコマンドを実行すれば、そのとおりにファイアウォールが設定されるわけであり、多数のクライアントPCのファイアウォール設定を変更する場合にも利用できる。interface ipコンテキストと違ってリセット情報を記録するログファイルの指定は必要ない。「netsh firewall reset」と入力すればよい。なお、firewallコンテキストのresetコマンドは、Windows Vistaでも正常に動作する。現在のファイアウォール状態の確認には「netsh firewall show state」と入力すればよい。

 

firewallコンテキストで「netsh reset」コマンドを実行し、その結果を「netsh show state」コマンドで確認。

 

●netsh set service

 Windowsファイアウォールは、以前のインターネット接続ファイアウォール (ICF) からWindows XP SP2で大きく変更・拡張された機能であり、netshコマンドでもWindows XP SP2以降でfirewallコンテキストおよびファイアウォール関連コマンドが新設された。Windows XP SP2およびVistaWindowsファイアウォールでは、デフォルトで基本的にすべての着信ポートがブロックされている (インストールされているアプリケーションにより必要なポートが着信開放されている場合がある)。一方、Windows XP SP2では送信ポートはブロックされないが、Vistaでは送信ポートもブロックされる。したがって、デフォルトのままでは外部との通信がほとんどできないので、必要に応じてポートを開放してやる必要がある。

 「set service」サブコマンドは、Windowsの標準機能である「リモート管理」、「ファイルとプリンタの共有」、「リモートデスクトップ・リモートアシスタンス」、「UPnPフレームワーク」の着信ポートをファイアウォールによりブロックするかどうかを設定するコマンドだ。

 例えば、リモート管理を許可するならば「netsh firewall set service remoteadmin enable」と入力する。この場合は、すべてのリモートPCから管理接続が可能になるので、セキュリティ的には好ましくない。そこで「netsh firewall set service remoteadmin enable subnet」とすると、サブネット内のPCからのみ管理接続ができるように限定できる。さらに「netsh firewall set service remoteadmin enable custom 192.169.3.10」のようにすれば、アドレス192.168.1.10PCからのみ管理接続ができるようになるのでより安全になる (画面xx)。許可するアドレスは「157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet」のように「,」で区切って複数設定できる。逆にリモート管理を禁止する場合は「netsh firewall set service remoteadmin disable」と入力する。

 リモート管理を許可したときは、TCP 135TCP 445のポート、およびRPCエンドポイントマッパーが動的に割り当てるポートが開放されるので、RPCDCOMを利用するシステム管理ツールやネットワーク管理ツールなどを使ってリモートからシステムの設定を変更したりすることができるようになる。またHP OpenViewなどのRPCDCOMを利用するサードパーティ製の管理ツールも使えるようになる。ただし、RPCDCOMを利用しない管理ツールであれば、リモート管理を禁止したままでもよい。

 ファイルとプリンタの共有を許可する場合は「netsh firewall set service fileandprint」でファイルとプリンタの共有が可能になる。やはり「netsh firewall set service fileandprint enable subnet」、「netsh firewall set service fileandprint enable custom 192.168.3.10」のようにsubnetIPアドレスを指定することもできる。ファイルとプリンタの共有を許可したときは、TCP 139およびTCP 445、それにUDP 137138のポートが開放される。

 リモートデスクトップ・リモートアシスタンスを利用する場合は「netsh firewall ser service remotedesktop」、「netsh firewall ser service remotedesktop enable subnet」、「netsh firewall set service remotedesktop enable custom 192.168.3.10」などと入力すればよい。この場合は、TCP 3389のポートが開放される。

 UPnPフレームワークを使用する場合は「netsh firewall set service upnp」、「netsh firewall set service upnp enable subnet」、「netsh firewall set service upnp enable custom 192.168.3.10」などと入力する。この場合は、TCP 2869およびUDP 1900のポートが開放される。

 リモート管理、ファイルとプリンタの共有、リモートデスクトップ・リモートアシスタンス、UPnPフレームワークのすべてを許可したい場合は「netsh firewall set service all」、「netsh firewall set service all enable subnet」、「netsh firewall set service all enable custom 192.168.3.10」などと入力すればよい。

 なお、「set service」コマンドは、複数のインターフェースがある場合、すべてのインターフェースに適用され、インターフェースごとに設定することはできない。複数のインターフェースを持つPCでは「set service」コマンドにより、予期しないインターフェースまでポートが開放されてしまう恐れがあるので注意して欲しい。「set service」コマンドは、あくまでも標準サービスに対するファイアウォール設定を簡単に行うためのものと言ってよい。インターフェースごとに設定したい場合は「add portopening」、「set portopening」などのコマンドを使用すればよい (詳細は省略する)

 現在のファイアウォール設定を確認するコマンドとしては「show service」コマンドがある。また「show portopening」コマンドを使うと、現在開かれているポートが表示される。「show service」コマンドと違って、ここには標準のサービス以外のアプリケーションが開いているポートも表示される。「show config」コマンドを使うと、プロファイルの構成やログの構成を含めた標準サービスとポートの情報が表示される。「show state」コマンドを使うと、現在のファイアウォールの状態と開いているポートが表示される。これらのコマンドは必要に応じて最適なコマンドを使えばよい。

 

netsh追加1.bmp

Vistaで「netsh firewall set service remoteadmin enable custom 192.169.3.10」コマンドを実行してリモート管理を許可し、「show service」コマンドで確認しても、リモート管理が許可されていないように表示されるが、実際は許可されている。これはVistaの「netsh show service」コマンドのバグだろう。

 

netsh追加2.bmp

同じことをWindows XP SP2で実行した結果。「show service」コマンドでちゃんと確認できる。

 

ブラウジングのトラブルに活躍

nbtstat

NetBIOS over TCP/IP (NetBT) プロトコルに関する状態を表示し、NetBIOS名とIPアドレスの対応を確認できる。

 

書式

nbtstat [{-a RemoteName | -A IPAddress}] [-c] [-n] [-r] [-R] [-RR] [-s] [-S] [Interval]

 

対応OSXPVista

 

 NetBIOS over TCP/IP (NetBT) プロトコル統計情報、ローカルコンピュータおよびリモートコンピュータのNetBIOS名テーブル、およびNetBIOS名キャッシュを表示する。またNetBIOS名キャッシュおよびWINSで登録した名前を更新できる。

 NetBIOSコンピュータ名ComputerNameNetBIOS名テーブルを表示するには「nbtstat -a ComputerName」と入力する。IPアドレスIPaddressが割り当てられたコンピュータのNetBIOS名テーブルを表示するには「nbtstat -A IPaddress」と入力する。またローカルコンピュータのNetBIOS名テーブルを表示するには「nbtstat -n」と入力する。このように、パラメータの大文字と小文字が区別される点に注意してほしい。これが正しい対応で表示されない場合は名前解決に問題が生じている。

 ローカルコンピュータのNetBIOS名キャッシュの内容を表示するには「nbtstat -c」と入力する。もしキャッシュの内容に異常があるときは、NetBIOS名キャッシュを削除し、ローカルLMHOSTSファイルの#PRE-taggedエントリを再度読み込むために「nbtstat -R」と入力する。

 

nbtstat -c」でNetBIOS名キャッシュの内容を表示し、異常がある場合は「nbtstat -R」で削除する。

 

TCP/UDPの接続状況を確認する

netstat

アクティブなTCP接続、リッスンしているポート、イーサネット統計情報、IPルーティングテーブル、IPv4/v6統計情報を表示する。

 

書式

netstat [-a] [-b] [-e] [-f] [-n] [-o] [-p Protocol] [-r] [-s] [-t] [-v] [Interval]

 

注:-vオプションはWindows XPでのみ、-fおよび-tオプションはVistaでのみ利用可能

 

対応OSXPVista

 

 アクティブなTCP接続やリッスンしているポートを表示することで、外部から不正に侵入されていないかを知ることができる。単に「netstat」と入力するとアクティブなTCP接続を表示する。「netstat -a」と入力すると、すべてのアクティブなTCP接続とリッスンしているTCPUDPポートを表示するので、意図しないポートが開放されていないかを確認できる。「netsta -o」でアクティブTCP接続のプロセスID (PID) を表示するので、タスクマネージャの [プロセス] タブでPIDをベースとするアプリケーションを検索できる。また「netstat -a -b」で、接続またはリッスンポートの作成に使われた実行可能ファイルを表示するので、ウィルスなどの怪しいプログラムがないか確認するとよい。

 

netstat -a -b」で接続またはリッスンポートの作成に使われた実行可能ファイルが表示される (部分)

 

ネットワーク経路の調査

route

ローカルIPルーティングテーブルのエントリを表示および変更する。

 

書式

route [-f] [-p] [-4] [-6] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]

 

注:-4および-6オプションはWindows Vistaでのみ利用可能。

 

対応OSXPVista

 

 Commandには、addchangedeleteprintのいずれかを指定する。また-pオプションをaddコマンドと共に使用すると、追加されたルートがレジストリに追加され再起動後も有効になる。-pオプションがない場合は、再起動までの間だけ有効。

 IPルーティングテーブルの内容を表示するには「route print」と入力する。デフォルトゲートウェイアドレス192.168.12.1を持つルートを追加するには「route add 0.0.0.0 mask 0.0.0.0 192.168.12.1」と入力する。またサブネットマスク255.255.00.0、および次ホップアドレス10.27.0.1を持つ宛先10.41.0.0ルートを追加し、再起動後も有効にするには「route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1」と入力する。

 

リモートからマシンをシャットダウン

shutdown

ローカルまたはリモートマシンをシャットダウン、再起動、休止またはログオフする。

 

書式

shutdown [{{/i | /s | /r | /g | /a | /p | /h | /e} [/m \\ComputerName] [/d {p | u}:xx:yy] | /l} [/f] [/t xxx] [/c "message"]]

 

注:パラメータの "/" "-" でもよい。/g/p/h/eオプションはWindows Vistaでのみ利用可能。

 

対応OSXPVista

 

 「shutdown /s」でコンピュータをシャットダウンし、「shutdown /r」で再起動、「shutdown /h」で休止状態 (Vistaのみ)、「shutdown /l」でログオフする。また/mオプションでシャットダウンするコンピュータを指定する (指定がない場合はローカルマシンが指定されたものとみなす)/fオプションで実行中のアプリケーションを強制的に閉じ、/tオプションでシャットダウンまでの時間を設定する (既定値は20)/cオプションでシャットダウンするマシンのシャットダウンウィンドウに表示するメッセージを指定できる。

 リモートの\\Computer1にメッセージ "再起動します" を表示して、実行中のアプリケーションを強制的に閉じ、30秒後に再起動させるには「shutdown /r /m \\Computer1 /f /t 30 /c "再起動します"」と入力する。

 

telnetサーバーをリモート操作

telnet

telnetクライアントからネットワークを通してtelnetサーバーを操作できる。

 

書式

telnet [-a] [-e EscChar] [-f LogFile][-l User][-t Env] [Host [Port]]

 

対応OSXPVista

 

 telnetでは、telnetクライアントとtelnetサーバーが協調して機能し、ユーザーがtelnetクライアントを使ってtelnetサーバーが動作するリモートコンピュータに接続し、ターミナルウィンドウを介してそのコンピュータを操作できるようにする。

 telnetクライアントの動作モードには2つのモードがある。telnetコマンドモードとtelnetセッションモードだ。telnetコマンドモードでは、telnet端末からリモートホストへの接続と切断、設定パラメータの表示、端末オプションの設定、状態の印刷、telnetの終了を行うことができる。

 リモートホストに接続すれば、telnetクライアントはtelnetセッションモードになる。ログオン後、ユーザーにはコマンドプロンプトセッションが割り当てられ、ユーザーはシステムに直接ログオンしたかのように、Telnetサーバーを実行しているリモートコンピュータ上で文字ベースのアプリケーションを使用できる。

 なおWindows Vistaでは、デフォルトではtelnetがインストールされていないので、「コントロールパネル」→「プログラムと機能」→「Windowsの機能の有効化または無効化」でtelnetクライアントあるいはtelnetサーバーをインストールする必要がある。

 

対象ホストまでのネットワーク経路を確認する

tracert

宛先までの途中にあるルータを確認することで、ネットワーク経路に障害があるかどうかを確認できる。

 

書式

tracert [-d] [-h MaximumHops] [-j HostList] [-w Timeout] [-R] [-S srcaddr] [-4] [-6] [TargetName]

 

注:-R-S-4-6オプションはWindows Vistaでのみ利用できる。

 

対応OSXPVista

 

 ICMP エコー要求メッセージに段階的に増加する生存期間 (TTL) フィールド値を載せて宛先に送信することで、宛先へのルートを突き止めるコマンド。パス上の各ルーターは、パケットを転送する際、転送前にIPパケットのTTL値をすくなくとも1つ小さくしなければならない。またパケット上のTTL0になったら、ルーターは送信元コンピュータにICMP Time Exceededメッセージを送り返すことになっている。Tracertは、まずエコー要求メッセージにTTL1を載せて送信し、ターゲットが応答するか最大ホップ数に達するまで、送信のたびにTTLを1つづつ増やしていくことで、パスを決定する。ただし、ルーターの中には、TTLの値の期限が切れたパケットのTime Exceededメッセージを返さないものがあり、tracertコマンドではこれらのルーターは見えない。この場合、そのホップにアスタリスク (*) の行が表示される。