import time #定义网桥1 b1 = {} port_list1 = [1, 2] #主机列表 L1 = ['a','b','c'] L2 = ['d','e'] L = [L1,L2] def get_time(): #获取每次记录的时间 t = int(time.time()*10) #毫秒级 # print(t) t = str(t)[-5:] #保留从毫秒开始的前五位 # print(t) return t def get_port(sendform): #确定当前主机发送的消息进入哪个端口 #模拟物理上的端口链接 if sendform in L1: return 1 else: return 2 def deal_dic(): #当网桥的字典中元素超过三个时,排序并删除时间最早的那个 if len(b1) > 3: sorted(b1.items(), key=lambda x: x[1], reverse=False) for i in range(3, len(b1)): b1.pop(list(b1.keys())[0]) def send(sendfrom, sendto): #传入发送地址和目的地址 bridge = b1 #获取网桥接口 inport = get_port(sendfrom) #获取时间 t = get_time() #遍历所有的主机分组 for l in L: if sendfrom in l: bridge[sendfrom] = [inport,t] if sendto in l: bridge[sendto] = [inport,t] print('同一网段,不转发') elif sendto in bridge: print('查找成功,转发至'+ str(bridge[sendto][0]) + '号端口') else: # 获取非获取帧的其他接口 other_port = [x for x in port_list1 if not x is inport] bridge[sendto] = [other_port[0],t] print('查找失败,转发至'+str(bridge[sendto][0]) + '号端口') while True: a = (input('请输入发送站点:')) b = (input('请输入目的站点:')) send(a, b) deal_dic() print(b1)
注: 只实现了一个网桥和两个网段之间的帧的处理