模様替えに伴って自宅にあった 5 年前のサーバの電源を切り、廃棄に向けた検討に入りました。しかしですね、そういえばこのサーバでは DiCE か何かが動いていて、日々 DDNS を更新し続けていた。
もうサーバ立ち上げるのもメンドい(ケーブルとかモニタとかつなぐのがメンドい)のでつくった。Python まだよくわからないのでつらい。
CyberGate の DDNS 更新、当然の如く API とかないから、スクレイピングするかんじになった。register_ddns_id ってヤツがユーザの識別子になってるかんじ。
#!/usr/bin/env python import keyring import requests import re import sys class CyberGateHttpClient: BASE_URL = 'http://cybergate.planex.co.jp' RE_IP_ADDR = r'([1-9]\d{0,2}\.[1-9]\d{0,2}\.[1-9]\d{0,2}\.[0-9]\d{0,2})' def __init__(self, user, password): self.user = user self.password = password def update_ipaddr(self): def login(): auth = { "account": self.user, "password": self.password, "service_name": "cybe", } res = requests.post( self.BASE_URL + '/cgi-bin/login.cgi', data=auth ) self.cookies = res.cookies def get_register_ddns_id(): res = requests.get( self.BASE_URL + '/cgi-bin/view_ddns.cgi', cookies=self.cookies).text return re.search( r"wopen_ddns_modify\((\d+)\)", res ).group(1) login() register_ddns_id = get_register_ddns_id() res = requests.get( self.BASE_URL + '/cgi-bin/mod_ddns_subdomain.cgi?register_ddns_id=' + register_ddns_id, cookies=self.cookies ) ipaddr = re.search( self.RE_IP_ADDR, res.text ).group(1) param = { "register_ddns_id" : register_ddns_id, "service_name" : "ddns", "confirm" : "2", "ip_address" : ipaddr } res = requests.post( self.BASE_URL + '/cgi-bin/mod_ddns_subdomain.cgi', data=param, cookies=self.cookies ) if not re.search( '変更しました。', res.text): sys.exit(1) if __name__ == '__main__': CyberGateHttpClient('kiririmode', keyring.get_password('CyberGate', 'kiririmode')).update_ipaddr()