Macのターミナルでネットワーク情報を一括で取得したい

Windowsのコマンドプロンプトでは、ipconfig /all あたりで、IPアドレス、デフォルトゲートウェイ、DNSサーバを全て確認することができる。

これは便利。

Macでは ifconfigをよく使っていて、 IPアドレスは出るものの、デフォルトゲートウェイとDNSサーバが出ずに不便に感じていた。

ChatGPT先生に聞きながらスクリプト化してみた。

#!/bin/bash

# インターフェース指定(引数がなければ en0)
IFACE=${1:-en0}

echo "=== ネットワーク情報 for $IFACE ==="

# IPアドレス取得
echo "--- IP アドレス ---"
ipconfig getifaddr "$IFACE"

# デフォルトゲートウェイ取得
echo "--- デフォルトゲートウェイ ---"
route get default | grep 'gateway'

# DNSサーバー取得
echo "--- DNS サーバー ---"
# 重複表示される
#scutil --dns | awk '/nameserver/ {print $0}'
# IPだけにするのと、重複させない
scutil --dns | awk '/nameserver/ {print $NF}' | sort | uniq

出力結果は画像で。

スクリプトのポイントは実行時引数にインターフェースを指定できること。
指定しないときのデフォルトはen0。

DNSサーバの標準では、下記のように出る。

resolver #1
  nameserver[0] : 2404:1a8:7f01:b::3
  nameserver[1] : 2404:1a8:7f01:a::3
  nameserver[2] : 192.168.100.1
  if_index : 14 (en0)
  flags    : Scoped, Request A records, Request AAAA records
  reach    : 0x00000002 (Reachable)

nameserver[2] みたいな項目名部分を省くために awk を使用し、リゾルバ毎に複数出るのをsort | uniq で重複を除去している。