X環境を構築しようとしていてWindows側のIPアドレスを取ろうと参考サイトを見ていました。
少しうまくいかなかったこともあったのでメモを残しておきます。
ちなみに、もともと Puppeteer のデバッグ環境をつくりたくてIPアドレスを設定しようとしていました。
/etc/resolv.conf から取得する方法
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'
こちらのサイトを参考にさせてもらいました。
こちらの方法は、 /etc/resolv.conf
が自動作成される場合に使えます。(デフォルト設定だと自動作成されるはず。)
/etc/resolv.conf
を手動設定していて、nameserver 1.1.1.1 などに設定している場合には使えません。(私はWSL2の通信が遅いので、この対策をやっていました。参考にさせてもらったサイトの記事がなくなっていました…。ググれば似たような記事がでます。)
ipconfig.exe から取得する方法
/mnt/c/Windows/system32/ipconfig.exe | iconv -f CP932 -t UTF-8 | sed -e 's/\r//' | grep 'IPv4' | tail -n 1 | cut -d ':' -f 2 | awk '{print $1}'
/etc/resolv.conf
を手動設定している場合の対応方法を調べていたところ下記で ipconfig から取得する方法が書かれていました。
参考にさせてもらったコマンドのままだと、自分の環境だと2点注意することがありました。
- ipconfig.exe コマンドがWSL2から実行できない
これは私のWSL2の設定でWindows側のPATHを引き継がれないようにする設定をしていたためです。なので/mnt/c/
から始まるフルパスを指定して ipconfig.exe を実行するようにしました。 - ipconfig.exe の結果をパイプに渡すと文字化けして、うまく grep できない
参考にしたサイトにも同様の内容がありましたが、結局どうすればいいのか分からなかったので ChatGPT に確認したところあっけなく解決できました。ありがとう。ChatGPT。もっとうまいやり方あるかもしれませんが、とりあえずの動作確認ならこれで十分でした。
ip route から取得する方法
ip route | grep 'default via' | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
これはこちら↓の内容のままでいけました。
ということで自分の環境でやる場合だと、ipconfig.exe から取得する方法か、ip route から取得する方法の2択になりました。私は ip route から取得するようにしました。