pythonでDNSサーバ作成 ~②PySimpleGUIでGUIを作ってみよう~
今回はDNSサーバそのものに取り組む前に、pysimpleGUIを使用してDNS解決するIPアドレス、ドメイン名を指定するためのGUIを作ってみた。
以下をユーザが自由に設定出来ること。
- ドメインと対応するIPアドレス (とりあえず3種類)
- DNSサーバのIPアドレス
PySimpleGUIについて
PythonでGUIを構築するためのライブラリです。今までpythonで使用してきたGUIライブラリの中では最も使いやすい。(文字通りシンプル)
以下のコマンドでインストール。
pip install pysimplegui
実装にあたっては以下参考にさせていただきました。
コーディング
早速ですがコーディングしてみました。
# coding: utf -8
import PySimpleGUI as sg # ライブラリの読み込み
# テーマの設定
sg.theme("SystemDefault ")
# ドメイン設定
L1 = [
# ドメイン設定1
[sg.Text("・ドメイン1 "),
sg.InputText(default_text="dns.test1.jp" ,text_color = "#000000" ,background_color ="#ffffff" ,size=(25,1), key="domain_d1" ),
sg.Text("・IPアドレス "),
sg.InputText(default_text="127.0.0.2" ,text_color = "#000000" ,background_color ="#ffffff" ,size=(15,1), key="ip_d1" )],
# ドメイン設定2
[sg.Text("・ドメイン2 "),
sg.InputText(default_text="dns.test2.jp" ,text_color = "#000000" ,background_color ="#ffffff" ,size=(25,1), key="domain_d2" ),
sg.Text("・IPアドレス "),
sg.InputText(default_text="127.0.0.3" ,text_color = "#000000" ,background_color ="#ffffff" ,size=(15,1), key="ip_d2" )],
# ドメイン設定3
[sg.Text("・ドメイン3 "),
sg.InputText(default_text="dns.test3.jp" ,text_color = "#000000" ,background_color ="#ffffff" ,size=(25,1), key="domain_d3" ),
sg.Text("・IPアドレス "),
sg.InputText(default_text="127.0.0.4" ,text_color = "#000000" ,background_color ="#ffffff" ,size=(15,1), key="ip_d3" )]]
# DNSサーバ設定
L2 = [
[sg.Text("・IPアドレス "),
sg.InputText(default_text="127.0.0.2" , text_color = "#000000",background_color ="#ffffff" , size=(15,1), key="ip_dns" )],
[sg.Button("DNSサーバ起動", border_width=4 , size =(15,1), key="btn_udp_open")]]
L = [[sg.Frame("ドメイン設定",L1)],
[sg.Frame("DNSサーバ設定",L2)]]
# ウィンドウ作成
window = sg.Window ("DNS_TOOL ", L)
def main():
# イベントループ
while True:
# イベントの読み取り(イベント待ち)
event , values = window.read()
# 確認表示
print(" イベント:",event ,", 値:",values)
# 終了条件( None: クローズボタン)
if event == "btn_udp_open":
print("DNSサーバ起動")
elif event == None:
break
# 終了処理
window.close()
if __name__ == '__main__':
main()
DNSサーバ起動ボタンを押してみるとこんな感じ。
(もちろんまだサーバは起動しません)
>イベント: btn_udp_open , 値: {'domain_d1': 'dns.test1.jp', 'ip_d1': '127.0.0.2', 'domain_d2': 'dns.test2.jp', 'ip_d2': '127.0.0.3', 'domain_d3': 'dns.test3.jp', 'ip_d3': '127.0.0.4', 'ip_dns': '127.0.0.2'}
>DNSサーバ起動
入力値はこんな感じで取れます。
print(values["domain_d1"])
出力結果
以下のような出力結果が得られます。
コード
最終的なDNSサーバコードは以下にあります。(詳細については関連記事参照)