From 86d9a337165f13c37d07c3fbbf7f4f2a3b803076 Mon Sep 17 00:00:00 2001
From: bettleChen <2207153529@qq.com>
Date: Mon, 24 Jul 2023 15:10:11 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/dataSources.xml | 12 ++++++
NetworkAnalog/NetworkAnalog.py | 65 +++++++++++++++++++--------------
NetworkAnalog/SimObjs.py | 49 ++++++++++++++++---------
NetworkAnalog/network.db | Bin 40960 -> 40960 bytes
NetworkAnalog/x1/SimObjs.py | 63 --------------------------------
NetworkAnalog/x2_test.py | 33 +++++++++++++++++
datas/network.db | Bin 0 -> 40960 bytes
7 files changed, 115 insertions(+), 107 deletions(-)
delete mode 100644 NetworkAnalog/x1/SimObjs.py
create mode 100644 NetworkAnalog/x2_test.py
create mode 100644 datas/network.db
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index e33e3e5..ba6eba2 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -8,5 +8,17 @@
jdbc:sqlite:$PROJECT_DIR$/../网络仿真/NetworkAnalog/network.db
$ProjectFileDir$
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:D:\头哥\NetworkAnalog\datas\network.db
+ $ProjectFileDir$
+
+
+ file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.40.1/org/xerial/sqlite-jdbc/3.40.1.0/sqlite-jdbc-3.40.1.0.jar
+
+
+
\ No newline at end of file
diff --git a/NetworkAnalog/NetworkAnalog.py b/NetworkAnalog/NetworkAnalog.py
index 33674dc..7622f79 100644
--- a/NetworkAnalog/NetworkAnalog.py
+++ b/NetworkAnalog/NetworkAnalog.py
@@ -467,6 +467,15 @@ class NetWorkAnalog(Canvas):
conn_obj.ConfigCorrect = key[1]
self.tag_bind_event()
+ def show_obj(self, AllSimObj, conns):
+ self.AllSimObjs = AllSimObj
+ self.conns = conns
+ for key, sim_obj in self.AllSimObjs.items():
+ print(key)
+ sim_obj.create_img()
+ for conn in self.conns:
+ conn.draw_line()
+
def delete_obj(self):
# todo: 删除对象
"""
@@ -919,32 +928,7 @@ class NetWorkAnalog(Canvas):
self.AllSimObjs.clear()
self.conns.clear()
- def create_widget(self):
- # todo: 创建页面
- """
- 创建整体页面布局
- :return:
- """
- self.create_rectangle(0, 0, self.width * 0.8, self.height * 0.85, outline="#7f6000", width=3) # 矩形框,左上角坐标,右下角坐标
- round_rectangle(self, self.width * 0.82, 30, self.width * 0.98, self.height * 0.85 / 2 - 30, outline="#ffff00", width=3, fill="#f4b88e") # 矩形框,左上角坐标,右下角坐标
- self.create_text(self.width * 0.82 + 120, 30 + 15, text="网络配置信息", anchor="n", font=('微软雅黑', 18, 'bold'))
- round_rectangle(self, self.width * 0.82, self.height * 0.85 / 2, self.width * 0.98, self.height * 0.85 - 30, outline="#ffff00", width=2, fill="#f4b88e") # 矩形框,左上角坐标,右下角坐标
- self.create_text(self.width * 0.82 + 120, self.height * 0.85 / 2 + 15, text="路由/交换表信息", anchor="n", font=('微软雅黑', 18, 'bold'))
- # 显示左边的固定图片
- img_height, text_height, split_width = self.height - 120, self.height - 60, 120
- self.create_text(split_width, text_height, text="路由器", anchor="nw", font=('微软雅黑', 18, 'bold')) # 显示文字
- router = self.create_image(split_width, img_height, image=self.router_img, anchor="nw")
- self.create_text(split_width * 2, text_height, text="交换机", anchor="nw", font=('微软雅黑', 18, 'bold')) # 显示文字
- switch = self.create_image(split_width * 2, img_height, image=self.switch_img, anchor="nw")
- self.create_text(split_width * 3, text_height, text="集线器", anchor="nw", font=('微软雅黑', 18, 'bold')) # 显示文字
- hub = self.create_image(split_width * 3, img_height, image=self.hub_img, anchor="nw")
- self.create_text(split_width * 4, text_height, text="主机", anchor="nw", font=('微软雅黑', 18, 'bold')) # 显示文字
- host = self.create_image(split_width * 4, img_height, image=self.host_img, anchor="nw")
- self.bind_event(router, "路由器")
- self.bind_event(switch, "交换机")
- self.bind_event(hub, "集线器")
- self.bind_event(host, "主机")
-
+ def create_config_button(self):
# 创建一个菜单栏,这里我们可以把他理解成一个容器,在窗口的上方
menubar = tk.Menu(root)
# 定义一个空菜单单元
@@ -975,7 +959,32 @@ class NetWorkAnalog(Canvas):
menubar.add_command(label='清除屏幕', command=self.clear_canvas)
root.config(menu=menubar)
- self.reload_data()
+
+ def create_widget(self):
+ # todo: 创建页面
+ """
+ 创建整体页面布局
+ :return:
+ """
+ self.create_rectangle(0, 0, self.width * 0.8, self.height * 0.85, outline="#7f6000", width=3) # 矩形框,左上角坐标,右下角坐标
+ round_rectangle(self, self.width * 0.82, 30, self.width * 0.98, self.height * 0.85 / 2 - 30, outline="#ffff00", width=3, fill="#f4b88e") # 矩形框,左上角坐标,右下角坐标
+ self.create_text(self.width * 0.82 + 120, 30 + 15, text="网络配置信息", anchor="n", font=('微软雅黑', 18, 'bold'))
+ round_rectangle(self, self.width * 0.82, self.height * 0.85 / 2, self.width * 0.98, self.height * 0.85 - 30, outline="#ffff00", width=2, fill="#f4b88e") # 矩形框,左上角坐标,右下角坐标
+ self.create_text(self.width * 0.82 + 120, self.height * 0.85 / 2 + 15, text="路由/交换表信息", anchor="n", font=('微软雅黑', 18, 'bold'))
+ # 显示左边的固定图片
+ img_height, text_height, split_width = self.height - 120, self.height - 60, 120
+ self.create_text(split_width, text_height, text="路由器", anchor="nw", font=('微软雅黑', 18, 'bold')) # 显示文字
+ router = self.create_image(split_width, img_height, image=self.router_img, anchor="nw")
+ self.create_text(split_width * 2, text_height, text="交换机", anchor="nw", font=('微软雅黑', 18, 'bold')) # 显示文字
+ switch = self.create_image(split_width * 2, img_height, image=self.switch_img, anchor="nw")
+ self.create_text(split_width * 3, text_height, text="集线器", anchor="nw", font=('微软雅黑', 18, 'bold')) # 显示文字
+ hub = self.create_image(split_width * 3, img_height, image=self.hub_img, anchor="nw")
+ self.create_text(split_width * 4, text_height, text="主机", anchor="nw", font=('微软雅黑', 18, 'bold')) # 显示文字
+ host = self.create_image(split_width * 4, img_height, image=self.host_img, anchor="nw")
+ self.bind_event(router, "路由器")
+ self.bind_event(switch, "交换机")
+ self.bind_event(hub, "集线器")
+ self.bind_event(host, "主机")
if __name__ == '__main__':
@@ -991,5 +1000,7 @@ if __name__ == '__main__':
(screen_height - root_attr['height']) / 2 - 30)
canvas = NetWorkAnalog(root, width=root_attr['width'], heigh=root_attr['height'], bg="white")
canvas.place(x=0, y=0, anchor='nw')
+ canvas.create_config_button()
+ canvas.reload_data()
root.geometry(size)
root.mainloop()
diff --git a/NetworkAnalog/SimObjs.py b/NetworkAnalog/SimObjs.py
index 6c27b31..82e5c41 100644
--- a/NetworkAnalog/SimObjs.py
+++ b/NetworkAnalog/SimObjs.py
@@ -26,6 +26,22 @@ class SimBase():
self.ObjX = x
self.ObjY = y
self.canvas = canvas
+ self.host_img = ImageTk.PhotoImage(
+ Image.open(sys.path[0] + "/../datas/images/主机.png").resize((60, 60)))
+ self.host_img_tm = ImageTk.PhotoImage(
+ Image.open(sys.path[0] + "/../datas/images/主机_tm.png").resize((60, 60)))
+ self.router_img = ImageTk.PhotoImage(
+ Image.open(sys.path[0] + "/../datas/images/路由器.png").resize((60, 60)))
+ self.router_img_tm = ImageTk.PhotoImage(
+ Image.open(sys.path[0] + "/../datas/images/路由器_tm.png").resize((60, 60)))
+ self.switch_img = ImageTk.PhotoImage(
+ Image.open(sys.path[0] + "/../datas/images/交换机.png").resize((60, 60)))
+ self.switch_img_tm = ImageTk.PhotoImage(
+ Image.open(sys.path[0] + "/../datas/images/交换机_tm.png").resize((60, 60)))
+ self.hub_img = ImageTk.PhotoImage(
+ Image.open(sys.path[0] + "/../datas/images/集线器.png").resize((60, 60)))
+ self.hub_img_tm = ImageTk.PhotoImage(
+ Image.open(sys.path[0] + "/../datas/images/集线器_tm.png").resize((60, 60)))
self.img = None
self.img_tm = None
self.interface = [{}, {}, {}, {}]
@@ -94,6 +110,18 @@ class SimBase():
创建图片
:return:
"""
+ if self.ObjType == 1:
+ self.img = self.host_img
+ self.img_tm = self.host_img_tm
+ elif self.ObjType == 2:
+ self.img = self.router_img
+ self.img_tm = self.router_img_tm
+ elif self.ObjType == 3:
+ self.img = self.switch_img
+ self.img_tm = self.switch_img_tm
+ else:
+ self.img = self.hub_img
+ self.img_tm = self.hub_img_tm
self.canvas.delete("L")
id = self.canvas.create_image(self.ObjX - 30, self.ObjY - 30,
image=self.img if self.ConfigCorrect == 1 else self.img_tm, anchor="nw",
@@ -455,10 +483,7 @@ class SimHost(SimBase):
self.interface = [{}]
self.connections = [None]
self.set_default_config()
- self.img = ImageTk.PhotoImage(
- Image.open(sys.path[0] + "/../datas/images/主机.png").resize((60, 60)))
- self.img_tm = ImageTk.PhotoImage(
- Image.open(sys.path[0] + "/../datas/images/主机_tm.png").resize((60, 60)))
+
def create_packet(self, ip, mac, message):
"""
@@ -519,10 +544,6 @@ class SimRouter(SimBase):
self.ObjLabel = label if label is not None else self.set_default_name()
self.router_table = {}
self.set_default_router_table()
- self.img = ImageTk.PhotoImage(
- Image.open(sys.path[0] + "/../datas/images/路由器.png").resize((60, 60)))
- self.img_tm = ImageTk.PhotoImage(
- Image.open(sys.path[0] + "/../datas/images/路由器_tm.png").resize((60, 60)))
def set_default_router_table(self):
"""
@@ -565,7 +586,9 @@ class SimRouter(SimBase):
if conn == packet.up_jump:
continue
ifs = self.connections.index(conn) + 1
- for network in self.router_table[ifs]:
+ if self.router_table.get(ifs) is None:
+ continue
+ for network in self.router_table.get(ifs):
if self.check_destination_ip(packet.destination_ip, network):
flag = True
next_hop_ifs = ifs
@@ -628,10 +651,6 @@ class SimSwitch(SimBase):
self.ObjLabel = label if label is not None else self.set_default_name()
self.mac_table = {}
self.set_default_mac_table()
- self.img = ImageTk.PhotoImage(
- Image.open(sys.path[0] + "/../datas/images/交换机.png").resize((60, 60)))
- self.img_tm = ImageTk.PhotoImage(
- Image.open(sys.path[0] + "/../datas/images/交换机_tm.png").resize((60, 60)))
def set_default_mac_table(self):
"""
@@ -721,10 +740,6 @@ class SimHub(SimBase):
super().__init__(canvas, x, y, self.ObjID, config, label)
self.ObjType = 4
self.ObjLabel = label if label is not None else self.set_default_name()
- self.img = ImageTk.PhotoImage(
- Image.open(sys.path[0] + "/../datas/images/集线器.png").resize((60, 60)))
- self.img_tm = ImageTk.PhotoImage(
- Image.open(sys.path[0] + "/../datas/images/集线器_tm.png").resize((60, 60)))
def transmit(self, packet: SimPacket):
"""
diff --git a/NetworkAnalog/network.db b/NetworkAnalog/network.db
index e8b53b7f25923766a407e232f8402901b53e1df1..68a2411d102000ae8f785aa44f710d2824ef4299 100644
GIT binary patch
literal 40960
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
AYXATM
diff --git a/NetworkAnalog/x1/SimObjs.py b/NetworkAnalog/x1/SimObjs.py
deleted file mode 100644
index 8a5cbc2..0000000
--- a/NetworkAnalog/x1/SimObjs.py
+++ /dev/null
@@ -1,63 +0,0 @@
-class AllSimConnect():
- # todo: 连接类
- def __init__(self, nodex, nodex_ifs, nodey, nodey_ifs, config=None):
- """
- 连接对象
- :param nodex: 节点
- :param nodex_ifs: 节点接口
- :param nodey: 节点
- :param nodey_ifs: 节点接口
- """
- self.ConfigCorrect = 0 if config is None else config
- self.NobjS = nodex
- self.NobjE = nodey
- self.IfsS = nodex_ifs
- self.IfsE = nodey_ifs
-
-class SimHost():
- """
- 主机类
- """
- def __init__(self, x=0, y=0, id=None, config=None, label=None):
- self.ObjID = id
- self.ObjType = 1
- self.ObjLabel = label
- self.interface = []
- self.connections = []
-
-class SimRouter():
- """
- 路由类
- """
- def __init__(self, x=0, y=0, id=None, config=None, label=None, *args):
- self.ObjID = id
- self.ObjType = 2
- self.ObjLabel = label
- self.router_table = {}
-
-class SimSwitch():
- """
- 交换机类
- """
- def __init__(self, x=0, y=0, id=None, config=None, label=None, *args):
- self.ObjID = id
- self.ObjType = 3
- self.ObjLabel = label
- self.mac_table = {}
-
-class SimHub():
- """
- 集线器类
- """
- def __init__(self, x=0, y=0, id=None, config=None, label=None, *args):
- self.ObjID = str() if id is None else id
- self.ObjType = 4
- self.ObjLabel = label
-
-if __name__ == '__main__':
- AllSimObj = []
- host1 = SimHost()
- AllSimObj.append(host1)
- router = SimRouter()
- AllSimObj.append(router)
- connect = AllSimConnect(host1, 1, router, 1)
diff --git a/NetworkAnalog/x2_test.py b/NetworkAnalog/x2_test.py
new file mode 100644
index 0000000..978c0c5
--- /dev/null
+++ b/NetworkAnalog/x2_test.py
@@ -0,0 +1,33 @@
+from NetworkAnalog import NetWorkAnalog
+from SimObjs import *
+
+
+
+if __name__ == '__main__':
+ AllSimObj = {}
+ root = Window()
+ root.title('网络拓扑图')
+ root_attr = {
+ "width": root.winfo_screenwidth() * 0.83,
+ "height": root.winfo_screenheight() * 0.85,
+ }
+ size = '%dx%d+%d+%d' % (root_attr['width'], root_attr['height'], (root.winfo_screenwidth() - root_attr['width']) / 2,
+ (root.winfo_screenheight() - root_attr['height']) / 2 - 30)
+ canvas = NetWorkAnalog(root, width=root_attr['width'], heigh=root_attr['height'], bg="white")
+ canvas.place(x=0, y=0, anchor='nw')
+ root.geometry(size)
+ host1 = SimHost(canvas, 406, 268)
+ AllSimObj[host1.ObjID] = host1
+ host2 = SimHost(canvas, 323, 285)
+ AllSimObj[host2.ObjID] = host2
+ router = SimRouter(canvas, 216, 263)
+ AllSimObj[router.ObjID] = router
+ host1_router_connect = AllSimConnect(canvas, host1, 1, router, 1)
+ host2_router_connect = AllSimConnect(canvas, host2, 1, router, 2)
+ host1.connections[0] = host1_router_connect
+ router.connections[0] = host1_router_connect
+ host2.connections[0] = host2_router_connect
+ router.connections[1] = host2_router_connect
+ conns = [host1_router_connect, host2_router_connect]
+ canvas.show_obj(AllSimObj, conns)
+ root.mainloop()
\ No newline at end of file
diff --git a/datas/network.db b/datas/network.db
new file mode 100644
index 0000000000000000000000000000000000000000..f4128ed3fdcbc11053f1dd1707bbdb364070d009
GIT binary patch
literal 40960
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
literal 0
HcmV?d00001