Mac の bash/zsh で現在の DNS サーバーなどのネットワーク設定を取得するコマンド

> macOS の**ネットワークの設定内容を CLI シェル（ターミナル）から確認したい**。

主に「DNSサーバ」の項目内容など。つまり、[`システム環境設定`]-[`ネットワーク`]-[`Wi-Fi`]-[`詳細`]-[`DNS`] にある項目。

<img width="100%" alt="Macのネットワーク設定のWi-FiにおけるDNSサーバの設定画面" src="https://qiita-image-store.s3.amazonaws.com/0/78776/89799591-ba3e-d674-3fcf-aac1e616da82.png" title="Macのネットワーク設定のWi-FiにおけるDNSサーバの設定画面">

「[mac ターミナル DNSサーバー 取得](https://www.google.co.jp/search?q=site%3Aqiita.com+mac+%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB+DNS%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC+%E5%8F%96%E5%BE%97)」や「[mac シェル DNSサーバー 取得](https://www.google.co.jp/search?q=site%3Aqiita.com+mac+%E3%82%B7%E3%82%A7%E3%83%AB+DNS%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC+%E5%8F%96%E5%BE%97)」を **Qiita 記事に絞ってググっても出てこなかった**ので、自分のググラビリティとして。

:::note info
🐒 &nbsp; `networksetup` コマンドは、オプションによって DNS サーバーの一覧以外に、接続中の SSID 名（Wi-Fi のアクセスポイント名）、MTU 値なども確認できます。
<code>[\<networkservice\>](#networkservice-%E3%81%AE%E6%8E%A2%E3%81%97%E6%96%B9)</code> の値の探し方、`networksetup` コマンドの詳細は TS; DR をご覧ください。また、[実際の名前解決に使われた DNS サーバを確認したい](https://qiita.com/KEINOS/items/ae5446a96fafb84cb127#%E7%8F%BE%E5%9C%A8%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8Bdns%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E7%A2%BA%E8%AA%8D)場合の方法なども記載しております。
:::

## TL; DR <sub><sup>（今北産業）</sup></sub>

1. 「`networksetup`」コマンドの<strong>「`-GetDNSServers`」オプションで DNSサーバ 一覧が取得</strong>できます。
2. 基本構文

    ```shell:getdnsserversオプションの構文
    networksetup -getdnsservers <networkservice>
    ```
3. DNSサーバの確認例

    ```shell-session:DNSサーバー設定の確認（キャメルケースでも大丈夫）
    $ networksetup -GetDNSServers "Wi-Fi"
    192.168.10.1
    8.8.8.8
    8.8.4.4
    ```

## TS; DR <sub><sup>（networksetup を理解するコマケーこと）</sup></sub>

```shell-session
$ man networksetup | head -6

NETWORKSETUP(8)           BSD System Manager's Manual          NETWORKSETUP(8)

NAME
     networksetup -- configuration tool for network settings in System Prefer-
     ences.
```
```shell-session:筆者超訳
$ man networksetup | head -6

NETWORKSETUP(8)           BSD System Manager's Manual          NETWORKSETUP(8)

NAME
     networksetup -- 「システム環境設定」のネットワーク設定用コマンド・ツールです。
                     オプションによって、ネットワークの設定内容の確認、もしくは変更が行え
                     ます。なお変更には `sudo`（管理者）権限が必要です。
```

### 基本構文

```
networksetup <オプション> [<引数>]
```

- マニュアル
    - `$ man networksetup`
    - [Mac OS X Server Command-Line PDF マニュアル](https://www.apple.com/server/docs/Command_Line.pdf) P.41（英語）@ Apple
    - [`networksetup` で利用可能なコマンド一覧](https://qiita.com/KEINOS/items/21c9ca07664a641620eb#networksetup%E3%81%A7%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AA%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7) @ Qiita

- 設定を行いたい場合はこちら
    - 「[Macのネットワーク設定をコマンドラインからやりたい](https://qiita.com/uraura/items/b6a8f52d03580bc83aa3)」@ Qiita

- 応用技
    - 「[macOS Mojave の WiFi をコマンドからオン・オフする](https://qiita.com/KEINOS/items/21c9ca07664a641620eb)」@ Qiita

### 取得系のオプション

以下は、設定情報を取得（`get`）する系のオプションです。マニュアル（`man`）でも確認できるのですが、すべて小文字で可読性が悪いため、アッパー・キャメルケースにしてみました。

コマンド引数の `<hardwareport>` `<device name>` `<networkservice>` の探し方は次項をご覧ください。

|オプション|引数|ネットワーク設定での表示名|
|:---|:--:|:---|
|`-GetMACAddress`|`<hardwareport or device name>`| MACアドレス |
|`-GetComputerName`|なし| コンピューター名 |
|`-GetInfo`|`<networkservice>`| IPアドレス、サブネットマスク、デフォルトゲートウェイなどの諸情報 |
|`-GetAdditionalRoutes`|`<networkservice>`| IPv4 の Static Route |
|`-GetV6AdditionalRoutes`|`<networkservice>`| IPv6 の Static Route |
|`-GetDNSServers`|`<networkservice>`| DNSサーバ |
|`-GetSearchDomains`|`<networkservice>`| 検索ドメイン |
|`-GetFTPProxy`|`<networkservice>`| FTPプロキシ |
|`-GetWebProxy`|`<networkservice>`| Webプロキシ（HTTP） |
|`-GetSecureWebProxy`|`<networkservice>`| 保護されたWebプロキシ（HTTPS） |
|`-GetStreamingProxy`|`<networkservice>`| ストリーミングプロキシ |
|`-GetGopherProxy`|`<networkservice>`| Gopherプロキシ |
|`-GetSocksFirewallProxy`|`<networkservice>`| SOCKSプロキシ |
|`-GetProxyBypassDomains`|`<networkservice>`| プロキシ設定を使用しないホストとドメイン |
|`-GetProxyAutoDiscovery`|`<networkservice>`| 自動プロキシ検出 |
|`-GetPassiveFTP`|`<networkservice>`| 受動FTPモード（PASV）を使用 |
|`-GetAutoProxyURL`|`<networkservice>`</font>| 自動プロキシ構成 |
|`-GetAirportNetwork`|`<device name>`| ネットワーク名（接続中のSSID/アクセスポイント名） |
|`-GetAirportPower`|`<device name>`| ネットワーク状況（Wi-Fiのオン・オフなど） |
|`-GetNetworkServiceEnabled`|`<networkservice>`| サービスの有効・無効状態 |
|`-GetMTU`|`<hardwareport or device name>`| 現在のMTU値と設定値 |
|`-GetMedia`|`<hardwareport or device name>`| ハードウェアの構成 |
|`-GetCurrentLocation`|なし| [選択済みのネットワーク環境](https://qiita.com/naname/items/3e69efb187be22109c69) |


#### `<networkservice>` の探し方

<img width="400" alt="スクリーンショット 2018-10-24 4.32.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/78776/309aabbf-3061-3dc6-b31c-c1f0b58664c8.png">

`<networkservice>` は `-ListAllNetworkServices`オプションで確認できます。無線 LAN の場合は「Wi-Fi」がネットワークサービス名になります。

```shell-session
$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Thunderbolt Ethernet
iPhone USB
Wi-Fi
Bluetooth PAN
VPN Home RPi
```

#### `<device name>`（`<hardwareport>`）の探し方

`<device name>` は `-ListNetworkServiceOrder` オプションで確認できます。Wi-Fi の場合は、「Device:」の「`en0`」などが該当します。

```shell-session
$ networksetup -listnetworkserviceorder
An asterisk (*) denotes that a network service is disabled.
(1) Thunderbolt Ethernet
(Hardware Port: Thunderbolt Ethernet, Device: en6)

(2) iPhone USB
(Hardware Port: iPhone USB, Device: en4)

(3) Wi-Fi
(Hardware Port: Wi-Fi, Device: en0)

(4) Bluetooth PAN
(Hardware Port: Bluetooth PAN, Device: en3)

(5) VPN Home RPi
(Hardware Port: L2TP, Device: )
```

### オプションの使用例

```shell-session:DNSサーバー設定の確認
$ networksetup -getdnsservers "Wi-Fi"
192.168.10.1
8.8.8.8
8.8.4.4
```
```shell-session:接続中のSSID名の確認
$ networksetup -getairportnetwork en0
Current Wi-Fi Network: aterm-xxxxxxxx-a
```
```shell-session:MTUの値を確認
$ networksetup -getMTU en0
Active MTU: 1500 (Current Setting: 1500)
```

### 現在利用しているDNSサーバーの確認

上記の、現在設定している DNS サーバーのうち**実際に利用された DNS サーバーを確認する**には `nslookup` コマンドを使います。`Server:` の項目が名前解決に使われた DNS サーバーです。

```shell-session:この例では qiita.com の名前解決に 8.8.8.8 が使われたことになる
$ nslookup qiita.com
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
Name:	qiita.com
Address: 54.178.201.169
Name:	qiita.com
Address: 54.178.219.247
Name:	qiita.com
Address: 52.68.241.143
```

## 確認環境

- macOS HighSierra（OSX 10.13.6）
- `man networksetup | tail -1`: Mac OS X, April 16, 2002, Mac OS X

## 参考文献
- [Mac OS X Server Command-Line Administration](https://www.apple.com/server/docs/Command_Line.pdf) PDF P.41 @ Apple
- [How to find the currently connected network service from the command line?
](https://apple.stackexchange.com/questions/191879/how-to-find-the-currently-connected-network-service-from-the-command-line) @ StackExchange
- [Get DNS Server IP Addresses from the Command Line in Mac OS X](http://osxdaily.com/2011/06/03/get-dns-server-ip-command-line-mac-os-x/) @ OSXDaily