ITの教科書検索
入門・発展ページ読了 約12分

netstat・ss・digコマンドの使い方 ― 症状別に選ぶ

netstat・ss・digコマンドの使い方と出力の見方を、Windows・Mac・Linuxの違いつきで解説。ip・ifconfigを含め、症状ごとに使うコマンドの早見表も載せます。

目次
  1. netstat・ss・digは何を確かめるか
  2. 症状別のコマンド早見表
  3. netstatコマンドの使い方
  4. ssコマンドの使い方
  5. digコマンドの使い方
  6. ipコマンドとifconfig
  7. 練習問題

netstat・ssは接続とポートを、digはDNSの答えを見るコマンド

netstatとssは、自分のPCがどのポートで待ち受け、どの相手と接続しているかを一覧するコマンドです。digは、DNSサーバに名前を問い合わせ、返ってきた答えをそのまま表示するコマンドです。

ss は、Linuxで netstat の後を継いだコマンドです。同じように、Linuxでは ifconfig の後を ip コマンドが継いでいます。「つながらない」「名前からアドレスを調べられない」ときに見るべき出力が分かれば、原因が自分のPCか相手側かを絞り込めます。

症状別:どのコマンドで何を確かめるか

つながらないときは、症状から確かめることを決め、それに合うコマンドを選びます。次の表は、よくある症状と使うコマンドの組み合わせです。表のアドレスは例です。

症状確かめること使うコマンド
どこにもつながらない自分にIPアドレスが振られているかipconfig(Windows)
ifconfig(Mac)
ip addr(Linux)
自宅ルータにも届かないゲートウェイから応答が返るかping 192.168.10.1
ゲートウェイがどこか分からない経路の表の宛先がdefault(0.0.0.0)の行route print(Windows)
netstat -rn(Mac)
ip route(Linux)
同じLANの機器だけ届かない相手のMACアドレスを知っているかarp -a
ip neigh(Linux)
外のサイトに届かない途中のどのルータまで届くかtracert(Windows)
traceroute(Mac・Linux)
IPアドレスなら届くが名前だと開けないDNSサーバが名前に答えるかnslookup(Windows)
dig(Mac・Linux)
サーバのアプリに接続できないそのポートで待ち受けているかnetstat -ano(Windows)
netstat -an(Mac)
ss -tlnp(Linux)

ping と traceroute の出力の読み方は、ping・tracerouteの記事にまとめています。この2つが使うICMPの仕組みは、ICMPの記事で説明しています。arp -a で見えるARPテーブルの中身は、ARPの記事で説明しています。このページでは、残りの netstat・ss・dig・ip・ifconfig を説明します。

これらのコマンドは、動作の違いで2種類に分かれます。1つは、自分のPCが持っている表を読んで表示するだけのコマンドです。もう1つは、相手にパケットを送り、返ってきた答えを表示するコマンドです。

自分のPCインターフェース読むip addrifconfigルーティング表読むip routenetstat -rARPテーブル読むip neigharp -aソケット(ポート)読むssnetstatdigで問い合わせDNSサーバpingで応答確認宛先ホストtracerouteで確認経路上のルータPCの中の表を読んで表示するパケットを送って相手の反応を見る
点線のコマンドは、自分のPCが持っている表を読んで表示します。実線のコマンドは、相手にパケットを送り、返ってきた答えを表示します。Windowsでは、インターフェースを見るときに ipconfig を使います。

表を読むだけのコマンドは、ネットワークが切れていても結果が出ます。ただし netstat や、Mac・Linuxの arp は、-n を付けないとIPアドレスを名前に変換しようとします。このときDNSへ問い合わせるので、表示が遅くなることがあります。そのため、-n を付けて数字のまま表示することがよくあります。

netstatコマンドの使い方と出力の見方

netstat は、PCの通信の出入口を一覧するコマンドです。この出入口はIPアドレスとポート番号の組で表され、OSの中ではソケットと呼びます。

netstat はWindows・Mac・Linuxのどれにもあります。ただし、オプションの意味と出力の形はOSごとに違います。

目的WindowsMacLinux
待ち受け中のポートも含めて全部出す-a-a-a(-l で待ち受けだけ)
名前に変換せず数字で出す-n-n-n
TCPだけに絞る-p tcp-p tcp-t(UDPは -u)
使っているプログラムを出す-o(PID)/-b(実行ファイル名)-v(列が増え、process:pid が出る)-p
経路の表を出す-r-r-r

Windowsでは、-a・-n・-o を合わせた netstat -ano をよく使います。PIDは、プログラムを実行するたびにOSが付ける番号です。タスクマネージャーでPIDを探すと、どのアプリの通信かが分かります。 -b で実行ファイル名を出すには、管理者権限が必要です。

netstat(Windows)コマンドプロンプトで実行
C:\>netstat -ano

アクティブな接続

  プロトコル  ローカル アドレス      外部アドレス           状態            PID
  TCP         0.0.0.0:135            0.0.0.0:0              LISTENING       1012
  TCP         192.168.10.25:50512    203.0.113.50:443       ESTABLISHED     8420
  TCP         192.168.10.25:50498    203.0.113.50:443       TIME_WAIT       0
  UDP         0.0.0.0:5353           *:*                                    2240
# 1行が1つのソケットです。「アドレス:ポート番号」の形で並びます。
# UDPには接続という考え方がないので、状態の欄は空です。

Macの netstat は、BSD系の形式で出力します。アドレスとポート番号の区切りが、コロンではなくドットになっています。

netstat(Mac)ターミナルで実行
$ netstat -an -p tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0  192.168.10.25.50512    203.0.113.50.443       ESTABLISHED
tcp4       0      0  *.22                   *.*                    LISTEN
# 192.168.10.25.50512 は、IPアドレス 192.168.10.25 のポート50512番です。
# * は、どのアドレスでもよいことを示します。

状態の欄を見ると、そのソケットが今どの段階にあるかが分かります。状態の名前は、TCPの規格であるRFC 9293の状態名がもとになっています。書き方はOSやコマンドによって少し違います。よく見る状態は次の3つです。

  • LISTEN(Windowsでは LISTENING):新しい接続を待ち受けている
  • ESTABLISHED:接続が確立し、データをやり取りできる
  • TIME_WAIT:接続を閉じた後、遅れて届くパケットに備えてしばらく残っている

接続が確立するまでの流れと、FINで閉じる流れは、3ウェイハンドシェイクの記事に図があります。netstat -r で出る経路の表の読み方は、ルーティングの記事で説明しています。

ssコマンドの使い方:netstatとの違い

ss は、Linuxでnetstat の代わりに使うコマンドです。Linuxの netstat のマニュアルには、netstat はほぼ時代遅れで、代わりに ss を使うと書かれています。ss は iproute2 というツール集に含まれ、多くのLinuxに最初から入っています。MacとWindowsには ss がありません。

オプションの文字は、Linuxの netstat とほぼ同じです。 -t はTCP、-u はUDP、-l は待ち受け中だけ、-a は全部を出します。 -n はポート番号を名前に変換せず、-p は使っているプログラムを出します。オプションを付けないと、確立した接続だけが出て、待ち受け中のものは出ません。

次の例は、自分のPCで ss -tan を実行した結果です。行をクリックすると、その行の意味が開きます。

$ ss -tan

行をクリックすると、その行の意味が開きます。

ss の状態の名前は、netstat と少し違います。ESTABLISHED は ESTAB と短くなり、TIME_WAIT は RFC 9293 と同じく TIME-WAIT とハイフンでつなぎます。列の幅や並びは、ss のバージョンによって少し変わります。

どのプログラムが待ち受けているかを知りたいときは、-p を追加します。他のユーザーのプログラムまで表示するには、管理者権限が必要です。

ss -tlnp待ち受け中のポートとプログラムを見る(Linux)
$ sudo ss -tlnp
State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port  Process
LISTEN  0       511            0.0.0.0:80          0.0.0.0:*      users:(("nginx",pid=1234,fd=6))
LISTEN  0       128            0.0.0.0:22          0.0.0.0:*      users:(("sshd",pid=812,fd=3))
# 80番はnginx、22番はsshdが待ち受けています。
# 80番の行がなければ、Webサーバのプログラムは待ち受けていません。

22番で待ち受けているsshdは、SSHのサーバプログラムです。SSHの接続は、この22番へのTCP接続から始まります。

Linuxでは、netstat 以外の古いコマンドも新しいコマンドに置き換わっています。古いコマンドは net-tools というツール集に、新しいコマンドは ss と同じ iproute2 に含まれています。

見たいもの古いコマンド(net-tools)新しいコマンド(iproute2)
ソケットと接続の状態netstatss
IPアドレスifconfigip addr
経路の表netstat -r / routeip route
ARPテーブルarpip neigh
インターフェースの統計netstat -iip -s link

netstat・netstat -r・netstat -i の置き換え先は、Linuxの netstat のマニュアルに書かれています。ifconfig を ip に置き換えることは、Red Hat Enterprise Linux 7 のネットワークガイドに書かれています。最近のLinuxでは、net-tools が最初から入っていないことがあります。

digコマンドの使い方と出力の見方

dig は、DNSサーバに問い合わせて、返ってきた答えを細かく表示するコマンドです。DNSサーバのソフトウェアとして知られるBINDに付属するツールで、MacとLinuxで使えます。ただし、Linuxでは最初から入っていないこともあります。Windowsには標準で入っていないので、nslookup を使います。

基本の使い方は、dig のあとに名前を書くだけです。問い合わせ先を指定しないと、PCに設定されたDNSサーバに問い合わせます。次の例は、Macで dig example.com を実行した結果です。空行と一部の行を省いています。

$ dig example.com

行をクリックすると、その行の意味が開きます。

まず見るのは status と ANSWER SECTION です。status が NOERROR で答えの行があれば、名前からアドレスを調べる処理(名前解決)はできています。NXDOMAIN なら、その名前はDNSに存在しません。DNSサーバから答えが返らないときは、dig は時間切れのメッセージを出して終わります。

答えの行のTTLは、この答えをキャッシュしてよい秒数です。pingの結果に出るIPパケットのTTLとは、名前は同じでも別のものです。DNSのTTLとキャッシュの関係は、DNSの記事で説明しています。

よく使う指定は、次のとおりです。

指定何をするか
dig +short example.com答えのIPアドレスだけを出す
dig example.com MXレコードの種類を指定する(AAAA・MX・NSなど)
dig @192.168.10.1 example.com問い合わせるDNSサーバを指定する
dig -x 203.0.113.50IPアドレスから名前を調べる(逆引き)

@ で問い合わせ先を変えると、どのDNSサーバの答えがおかしいかを比べられます。自宅ルータでは名前を解決できず、別のDNSサーバではできるなら、原因は自宅ルータか、自宅ルータが問い合わせる先のDNSサーバにあります。これらの使い方は、BIND 9 のマニュアルの dig の項に載っています。

nslookupWindowsで名前を調べる(コマンドプロンプト)
C:\>nslookup example.com
サーバー:  UnKnown
Address:  192.168.10.1

権限のない回答:
名前:    example.com
Address:  203.0.113.50
# 「権限のない回答」は、キャッシュDNSサーバが返した答えであることを示します。
# PowerShellでは Resolve-DnsName example.com でも調べられます。

ipコマンドとifconfig:自分のアドレス・経路・隣の機器を見る

ifconfig は、インターフェース(PCがネットワークにつながる部分)の設定を表示するコマンドです。Linuxでは、ifconfig の代わりに ip コマンドを使うようになっています。

Red Hat Enterprise Linux 7 のネットワークガイドには、ip が ifconfig に置き換わると書かれています。理由として挙げられているのは、ifconfig がInfiniBandという通信方式のアドレスを扱えないことです。一方、macOSでは今も ifconfig が標準で、ip コマンドはありません。Windowsでは、どちらでもなく ipconfig を使います。

ip は、後ろに付ける語で表示する表を切り替えます。addr はIPアドレス、route は経路の表、neigh はARPテーブルです。

ip addr自分のIPアドレスとMACアドレスを見る(Linux)
$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    link/ether ac:de:48:00:11:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.25/24 brd 192.168.10.255 scope global eth0
# inet の行がIPアドレスです。/24 はサブネットマスク 255.255.255.0 と同じ意味です。
# ip a と短く入力しても同じです。一部の行と項目を省いています。
ifconfig自分のIPアドレスを見る(Mac)
$ ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether ac:de:48:00:11:22
	inet 192.168.10.25 netmask 0xffffff00 broadcast 192.168.10.255
	status: active
# Macはサブネットマスクを16進数で表示します。0xffffff00 は 255.255.255.0 です。
# 一部の行を省いています。
ip route / ip neigh経路の表とARPテーブルを見る(Linux)
$ ip route
default via 192.168.10.1 dev eth0
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.25
$ ip neigh
192.168.10.1 dev eth0 lladdr ac:de:48:aa:bb:cc REACHABLE
192.168.10.30 dev eth0 lladdr ac:de:48:dd:ee:ff STALE
# default via の行がデフォルトゲートウェイです。
# lladdr のあとがMACアドレスです。STALE は、しばらく確かめていない古い情報の印です。

アドレスが 169.254. で始まっていたら、DHCPでアドレスを取得できていません。この見方は、IPアドレスの構造の記事とデフォルトゲートウェイの記事にも出てきます。

スイッチやルータの画面では、隣の機器をCDPやLLDPで調べます。show cdp neighbors の見方は、CDP・LLDPの記事にまとめています。

練習問題(全5問)

Q1LinuxのWebサーバで、80番ポートを待ち受けているかを確かめたい。最も適したコマンドは?
Q2ss や netstat の出力で、State(状態)が LISTEN になっている行は何を表す?
Q3dig の出力のヘッダに status: NXDOMAIN と表示された。分かることは?
Q4ifconfig と ip の関係として正しいものは?
Q5次のうち、相手にパケットを送って答えを確かめるコマンドは?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

関連記事

おすすめの本 PR

ネットワークを初めて学ぶ人向けの入門書です。

目的別の本の選び方を見る

ネットワークの記事を探す