このお話で出てくるスクリプトは、役に立ちません。

前回までのあらすじ
自鯖でホームページやりたい。
だがしかし、マシンに電源を入れるごとにIPアドレスが変わってしまうのであった。
それを解決するために、電源を入れてログインしたらIPv4アドレスを勝手に調べて、
勝手に更新するPython3スクリプトを作ったはいいものの・・・。

IPv6にも対応しようぞ
インターネットの回線には、IPv4とIPv6があります。
バリュードメインのダイナミックDNSは、IPv6アドレスにも対応できるように設定できます。

具体的な設定例
a * 206.52.8.143
aaaa * 2404:4fa2:c50e:93f:12ba:803d:2c5b:90a1

こんなかんじ(IPアドレスの数字は、それっぽく書いたでたらめな数字です)。
こんな設定をしている場合は、IPv4のほかに、IPv6も更新しなければ、
つながりません。ホームページ見せられません。
しかも、グローバルIPアドレス。

事前準備
先に、ダイナミックDNSを設定して、
設定を保存したあと、

左の「ダイナミックDNSの設定」をクリックして、
こんな画面を出して、パスワードを設定する。
そして、下のほうにある四角にチェックをつけて、
ダイナミックDNSを有効にする。
これをやらないと、スクリプトだけでは対応できません。
Windows的にだって、DiCE使っても無理。
なお、これはPython3のchromium、seleniumを使うので、
コマンド打ち込んでインストールする。
sudo apt install chromium-browser
pip install selenium

素のままのPython3でグローバルIPアドレスを知る方法
ローカルIPアドレスを知ることはできますが、
グローバルIPアドレスを知ることはできません。
一応IPアドレス関連のモジュールはあるようですが、
使い方がわからなかったけど、グローバルIPアドレスを調べるというよりは、
IPアドレスを設定するほうがメインになっているっぽかった。
もしかして、マシンから何かを発信して、
信号を受けたサイトからしかグローバルIPはわからないっぽい?
なんでもありならできなくもないみたいだけど。

そういう事情があるので、IPv6アドレスがわかるサイト、
しかもプレーンテキストでわかるサイト・・・はない。
でも、プレーンテキストに近い形でIPv6アドレスを表示してくれるサイトはありました。
IPv4
IPv6

なお、この2つのサイトは、SSL認証していないので、
ほぼ検索にはひっかかりません。
この状況はなんとかしてほしい。
DuckDuckGoですら検索八分はないでしょ。

Python3スクリプトを改造する
IPv6アドレスの取得方法はわかりました。
というわけで、IPv4にもIPv6にも対応させたスクリプトにします。
・・・正規表現も文字列操作もわけわかめ。
とりあえず、IPv6アドレスをわかる方法。

import requests
import re

r=requests.get("http://checkipv6.dyndns.com/")
ip=re.findall(r'\w+',r.text)
ip=':'.join(ip)
ip=re.sub("html:head:title:Current:IP:Check:title:head:body:Current:IP:Address:","",ip)
ip=re.sub(":body:html","",ip)
print(ip)

このスクリプトを取り入れて、改造したbreasts.pyは、
こうなります。

import time
import requests
import re
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome import service as fs

'''
CHROMEDRIVER = "chromedriverのパス"
あくまでもここで有効にしているのは、
今回使っているRaspberryPiのUbuntu MATEのChromium用。
未来になれば場所は変わっているかもしれないので、
そのときはCtrl+Fとかでシステムファイルのフォルダを探してください。
'''
CHROMEDRIVER = "/snap/chromium/2106/usr/lib/chromium-browser"
URL = "https://dyn.value-domain.com/cgi-bin/dyn.fcg?"
# 自分が取得したドメインの設定に合わせる
DOMAIN = "nantoka.site"
PASSWORD = "tasticles"
HOSTNAME = "*"

def get_gip_addr():
    res = requests.get('https://ifconfig.me')
    return res.text

def get_ipv6():
    r=requests.get("http://checkipv6.dyndns.com/")
    ip=re.findall(r'\w+',r.text)
   
ip=':'.join(ip)
    ip=re.sub("html:head:title:Current:IP:Check:title:","",ip)
    ip=re.sub("head:body:Current:IP:Address:","",ip)
    ip=re.sub(":body:html","",ip)
    return ip
   
#IP確認用
if __name__ == '__main__':
    print('IPv4 = '+get_gip_addr()) 
 
    print("IPv6 = "+get_ipv6())

IPv4=get_gip_addr()
IPv6=get_ipv6()

# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path=CHROMEDRIVER)

options = Options()
options.add_argument(f'service={chrome_service}')
# ブラウザを表示しない。CUI環境の人用または確認が済んだ人用。
#options.headless = True

driver = webdriver.Chrome(options=options)

# ウィンドウサイズ=画像サイズ
driver.set_window_size(1024, 768)

def chrome_sousa(IP):
    if IP==4:
        IPv_=IPv4
    else:
        IPv_=IPv6
   

    # 対象ページへアクセス
    driver.get(URL) 
 
    # スクリーンショットを取得
    #driver.save_screenshot('result.png') 
 
    # テキストを入力する
    driver.find_element_by_name("d").send_keys(DOMAIN)
    driver.find_element_by_name("p").send_keys(PASSWORD)
    driver.find_element_by_name("h").send_keys(HOSTNAME)
    driver.find_element_by_name("i").clear()
    driver.find_element_by_name("i").send_keys(IPv_)
    # 見せる用。このスリープに意味はない。
    time.sleep(5)
 
    # 要素を取得する。F12押してのデバッグモードでxpathをコピーして値をペースト。
    # xpathが作り出す文字の法則なんか知らん。
    ele = driver.find_element_by_xpath("/html/body/form/center/table/tbody/tr[5]/td/input") 
 
    # ある要素をクリックする
    ele.click()
    # 更新できたか確認するためのスリープ5秒
    time.sleep(5)



#DOMAIN = "nantoka.site"
#PASSWORD = "tasticles"
#HOSTNAME = "*"
chrome_sousa(4)
chrome_sousa(6)

#マルチドメインでもいける
DOMAIN = "sukini.site"
chrome_sousa(4)
chrome_sousa(6)


# ブラウザ終了(終わるときのお約束)
driver.quit()
quit()


別解
このページを見つけました。
このページでは、CGIからアクセスするときの、
URL(URI?)の記述方法が書かれています。
普通にアドレス欄に、ドメインとか何やら書き込んでアクセスすればいいので、
もう少し簡単にできたのでした。

import time
import requests
import re
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome import service as fs

'''
CHROMEDRIVER = "chromedriverのパス"
あくまでもここで有効にしているのは、
今回使っているRaspberryPiのUbuntu MATEのChromium用。
未来になれば場所は変わっているかもしれないので、
そのときはCtrl+Fとかでシステムファイルのフォルダを探してください。
'''
CHROMEDRIVER = "/snap/chromium/2106/usr/lib/chromium-browser"
URL = "https://dyn.value-domain.com/cgi-bin/dyn.fcg?"
# 自分が取得したドメインの設定に合わせる
DOMAIN = "nantoka.site"
PASS = "tasticles"
HOST = "*"

def get_gip_addr():
    res = requests.get('https://ifconfig.me')
    return res.text

def get_ipv6():
    r=requests.get("http://checkipv6.dyndns.com/")
    ip=re.findall(r'\w+',r.text)
    ip=':'.join(ip)
    ip=re.sub("html:head:title:Current:IP:Check:title:","",ip)
    ip=re.sub("head:body:Current:IP:Address:","",ip)
    ip=re.sub(":body:html","",ip)
    return ip

#IP確認用
if __name__ == '__main__':
    print('IPv4 = '+get_gip_addr())
    print("IPv6 = "+get_ipv6())

IPv4=get_gip_addr()
IPv6=get_ipv6()

# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path=CHROMEDRIVER)

options = Options()
options.add_argument(f'service={chrome_service}')
# ブラウザを表示しない。CUI環境の人用または確認が済んだ人用。
#options.headless = True

driver = webdriver.Chrome(options=options)

# ウィンドウサイズ=画像サイズ
driver.set_window_size(1024, 768)

def dns_henkou(kazu):
    if kazu==4:
       
IP=IPv4
    else:
       
IP=IPv6
   
    # 対象ページへアクセス
    UUU = (URL + "d=" + DOMAIN + "&p=" + PASS + "&h=" + HOST + "&i=" + IP)
    driver.get(UUU)
 
 
#DOMAIN = "nantoka.site"
#PASSWORD = "tasticles"
#HOSTNAME = "*"
dns_henkou(4)
dns_henkou(6)
#マルチドメインでもいける
DOMAIN = "sukini.site"
dns_henkou(4)
dns_henkou(6)

# ブラウザ終了(終わるときのお約束)
driver.quit()
quit()


けっこう短くなりました。
もしかしたら、お名前ドットコムやムームードメインとかでも、
似たようなCGIはあるかもしれません。
本を作るとなれば、ドメイン取得して調べるべきか・・・?

自動起動する
前回のを見てね。変更点ないから。
https://ameblo.jp/araya-benki/entry-12766410252.html

ちなみに
やり方しだいでは、月額100円前後でサーバー運営できるらしいです。
https://news.mynavi.jp/techplus/article/zeropython-43/
ロシアショックとコロナショックのせいで、電気代がうなぎのぼりなので、
この状況だったらサーバー借りたほうがいいかもしれません。
・・・設備が怪しい外国に引っ越してサーバーたてるとか、
そういう用途なら自鯖構築は覚えたほうがいいと思います。
現実的な考えをするならば、
日本の常識が外国でも通用するとは思わないほうがいいし、
自分の考えている常識や正義が、ほかの人にも通用するとは思わないほうが身のためです。

!(おしまい)
なんと、まだこの書き込みには続きがあったのです。





参考資料
【Python】IPアドレスを取得する方法(ゆうまるブログ)
https://yumarublog.com/python/ipaddress/
Pythonの正規表現の基本的な使い方(UX MILK)
https://uxmilk.jp/41416
Pythonで余計な文字列を削除する方法(HACK note)
https://hacknote.jp/archives/19937/