ルータのWAN側アドレスを知りたい
以前の記事で、ルータにログインしてWAN側IPアドレスを取得する方法を紹介したが、よくよく考えたらSTUNサーバを利用すればいいんじゃ?と思ったので、スクリプトを作ってみた。
STUNサーバからWAN側IPアドレスを取得するスクリプト
以下の例ではgoogleのSTUNサーバを使っているが、ポートが標準の3478ではない(19302)のため、
指定する必要がある。
STUNクライアントがインストールされていない場合は、以下を実行する。
sudo apt-get install stun-client
#!/bin/bash
STUN_SERVER="stun.l.google.com"
STUN_PORT="19302"
for i in {1..10}
do
STUN_RESULT=$(stun $STUN_SERVER:$STUN_PORT -v 2>&1)
EXTERNAL_IP=$(echo "$STUN_RESULT" |& grep -m 1 "Mapped" | \
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
if [ -n "$EXTERNAL_IP" ]; then
echo "EXTERNAL_IP = $EXTERNAL_IP"
break
fi
sleep 1s
done
if [ -z $EXTERNAL_IP ]; then
echo "Failed to designate EXTERNAL_IP"
echo "$STUN_RESULT"
exit 1
fi
上記を実行すると以下のようになる。
EXTERNAL_IP = XX.XX.XX.XX