💻

WSL2からWindowsホストのNICのIPアドレスを取得する

2022/01/07に公開

X11したいなって

1. /etc/resolv.confを読む

grep /etc/resolv.conf -e nameserver | awk '{print $2}'

WSL2は名前解決をWindowsホストにお願いしているので、そこから取りましょうという話。

イーサネットアダプター vEthernet (WSL) のIPv4アドレスがとれる

limitation

/etc/resolv.confで nameserver 8.8.8.8とかを設定してると使えない
(これが原因で DISPLAY 環境変数に 8.8.8.8:0 を設定してしまい手元のemacsの描画をGoogleにお願いしてしまいました)

2. ipconfig.exe を叩く

ipconfig.exe | sed -e 's/\r//' | grep 'IPv4 Address' | head -n 1 | cut -d ':' -f 2 | awk '{print $1}'

ipconfig.exeの出力内容・順番にもよると思いますが自分の環境ではeth0のIPv4アドレスがとれます

余談

WSL2から ipconfig.exe を叩くと:

ipconfig.exe
Windows IP 構成


イーサネット アダプター イーサネット:

   接続固有の DNS サフィックス . . . . .:
   IPv6 アドレス . . . . . . . . . . . .: ...
   一時 IPv6 アドレス. . . . . . . . . .: ...
   リンクローカル IPv6 アドレス. . . . .: ...
   IPv4 アドレス . . . . . . . . . . . .: ...
   サブネット マスク . . . . . . . . . .: ...
   デフォルト ゲートウェイ . . . . . . .: ...
                                          ...

イーサネット アダプター Bluetooth ネットワーク接続:

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

イーサネット アダプター vEthernet (WSL):

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: ...
   IPv4 アドレス . . . . . . . . . . . .: ...
   サブネット マスク . . . . . . . . . .: ...
   デフォルト ゲートウェイ . . . . . . .:

CRLF改行であることに注意する

CRを消すために sed にパイプすると:

ipconfig.exe | sed -e 's/\r//'
Windows IP Configuration


Ethernet adapter �C�[�T�l�b�g:

   Connection-specific DNS Suffix  . :
   IPv6 Address. . . . . . . . . . . : ...
   Temporary IPv6 Address. . . . . . : ...
   Link-local IPv6 Address . . . . . : ...
   IPv4 Address. . . . . . . . . . . : ...
   Subnet Mask . . . . . . . . . . . : ...
   Default Gateway . . . . . . . . . : ...
                                       ...

Ethernet adapter Bluetooth �l�b�g���[�N�ڑ�:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : ...
   IPv4 Address. . . . . . . . . . . : ...
   Subnet Mask . . . . . . . . . . . : ...
   Default Gateway . . . . . . . . . :

アメリカ語になりました

stdoutのファイルディスクリプタがttyかどうかで変わるみたいですね
(lsなんかも出力形式が変わりますよね)

Discussion