pythonでDNSサーバ作成 ~②PySimpleGUIでGUIを作ってみよう~

DNSサーバ作成,GUI,python,python

今回はDNSサーバそのものに取り組む前に、pysimpleGUIを使用してDNS解決するIPアドレス、ドメイン名を指定するためのGUIを作ってみた。

以下をユーザが自由に設定出来ること。

  • ドメインと対応するIPアドレス (とりあえず3種類)
  • DNSサーバのIPアドレス

PySimpleGUIについて

PythonでGUIを構築するためのライブラリです。今までpythonで使用してきたGUIライブラリの中では最も使いやすい。(文字通りシンプル)

以下のコマンドでインストール。

pip install pysimplegui


実装にあたっては以下参考にさせていただきました。

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サーバコードは以下にあります。(詳細については関連記事参照)