utsubo’s blog

競技プログラミングとか.

IPアドレスを自動でGoogleスプレッドシートに書き込む(Windows10)

背景

学内や社内等のPCに接続したい時,IPアドレスが分からず困ることがしばしばあったので,*1
自動でIPアドレスGoogleスプレッドシートに書き込まれるようにしました.

構成

Windows 10 → Google Apps Script → Googleスプレッドシート
Google Apps Scriptが,Windows10からのGETに含まれるIPアドレスを受け取り,さらにGoogleスプレッドシートに書き込む

手順

サーバ側

まずは,GoogleスプレッドシートをGドライブから作成します.
この時,スプレッドシートのURLの{ここの文字列}部分がスプレッドシートのIDになっています.

https://docs.google.com/spreadsheets/d/{ここの文字列}/edit

次に,Google Apps Scriptを書いていきます.
Gドライブの右上の"新規"→"その他"→"Google Apps Script"で新規作成.

function doGet(e) {
  var id = '{スプレッドシートのID}';
  var sheet = SpreadsheetApp.openById(id).getSheetByName("シート1");
  var ipaddr = e.parameter.ip;
  sheet.getRange("A1").setValue(ipaddr);
}

上記コードでは,GETを受け取った時,"ip"に設定されているパラメータがスプレッドシートのA1セルにIPアドレスが書き込まれます.
そうしたら,"公開"→"ウェブアプリケーションとして導入"→"アプリケーションにアクセスできるユーザーを全員(匿名含む)に変更"→"更新"
として,WebAPIを公開します.

リモートPC側(Windows 10)

こっちがWindowsなので結構面倒くさかったです.
まず,IPアドレスをGETで送るbatファイルを作成しました.

set IPADDRPATH={batファイルがあるディレクトリ}\ipaddr.txt
ipconfig | find "IPv4" > %IPADDRPATH%
set /p myipaddr=<%IPADDRPATH%
curl {作成したWebアプリケーションのURL}?ip=%myipaddr:~38%

結構無駄ありそうですが,こんな感じで.
一度ipaddr.txtにipconfigからfindしたIPアドレスを入れ,そこから再度読み込んで"ip"のパラメータとしてAPIを叩いています.
最初に作成したスプレッドシートを確認すると,A1セルにIPアドレスが書き込まれていると思います.

後は,このbatファイルを定期的に実行するようにタスクスケジューラに登録します.
GUIからできるらしいのですが,上手くいかなかったのでコマンドプロンプトから設定.
ちなみに,/sc hourly /mo 6 で6時間に一回とかになるはず

schtasks /Create /tn "ipsender" /tr "{batファイルがあるディレクトリ}\ipsender.bat" /sc minute /mo 30

これで,30分に1回実行されます.ちなみに消す時はこう.

schtasks /Delete /tn "ipsender" 

感想

作ったもののあんまり学内PCにアクセスする機会がないし,
そもそもIPアドレスが滅多に変わらなくて悲しい.(ネットワーク整備みたいなのしたっぽいし,固定IPになってる節)

そのうち,学内/社内のWindows PCにリモートデスクトップ接続する話を書きます.

*1:DHCPで変わったり等々