LoginSignup
13
12

More than 5 years have passed since last update.

メモ:MiniUPnPで家庭用ルータの外向きIPアドレスを知る

Last updated at Posted at 2015-07-18

参考:Linux/コマンド/upnpc

ルータの外向きIPアドレスは、ルータの外のマシンにアクセスして取得するのが一般的だが、ご家庭ルータがUPnP IGD (Internet Gateway Device)に対応していれば、UPnPクライアントを使うことで外向きIPアドレスを取得できる。

apt-getでインストールする。

sudo apt-get install miniupnpc
$ upnpc -s
upnpc : miniupnpc library test client. (c) 2006-2010 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
List of UPNP devices found on the network :
 desc: http://192.168.1.XXX:51382/rootDesc.xml
 st: urn:schemas-upnp-org:device:InternetGatewayDevice:1

Found valid IGD : http://192.168.1.XXX:51382/ctl/IPConn
Local LAN ip address : 192.168.1.XXX
Connection Type : IP_Routed
Status : Connected, uptime=48328s, LastConnectionError : ERROR_NONE
  Time started : Fri Jul 17 22:36:57 2015
MaxBitRateDown : 1000000000 bps   MaxBitRateUp 1000000000 bps
ExternalIPAddress = XXX.XXX.XXX.XXX
Bytes:   Sent: 28763112 Recv: 125978505
Packets: Sent:   167209 Recv:   178489

'ExternalIPAddress = 'のあたりをひっかけて取得すればいいようだ。
ただ、外向きIPアドレスを取得したいだけ場合は upnpc -sよりも、一緒にインストールされる external-ip コマンドのほうが手っ取り早そうだ。
いくつかのサイトを参考にスクリプトを作る。

get_extip.sh
#!/bin/sh
EXTIP=/usr/bin/external-ip
CAT=/bin/cat
SAVEFILE=$HOME/extip.txt
#PUSH=`dirname $0`/push.sh
PUSH=`dirname $0`/ifttt.sh

STR1=`$EXTIP`
if [ "$STR1" = "0.0.0.0" ]; then
    STR1="none"
fi
#echo $STR1

if [ -e "$SAVEFILE" ]; then
    STR2=`$CAT $SAVEFILE`
else
    STR2="none"
fi
#echo $STR2

if [ "$STR1" != "none" ]; then
    if [ "$STR1" != "$STR2" ]; then
        echo $STR1 > $SAVEFILE
        $PUSH "HOME IP = $STR1"
    fi
fi

echo $STR1

ifttt.sh は、以前の記事で作ったもの。
定期的にcronで実行するようにした。/home/pi/extip.txtに変化があった場合はスマホ等にプッシュ通知される。

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12