当前位置: 首页 > news >正文

织梦网站后台管理系统做商务网站公司

织梦网站后台管理系统,做商务网站公司,wordpress前端集成短信功能,那里可以找建网站的人说明 本系统模拟实现了一个路由器与两个主机节点。该路由器将接收原始以太网帧#xff0c;并像真正的路由器一样处理它们#xff1a;将它们转发到正确的传出接口#xff0c;处理以太网帧#xff0c;处理 IPv4 分组#xff0c;处理 ARP分组#xff0c;处理 ICMP 分组并像真正的路由器一样处理它们将它们转发到正确的传出接口处理以太网帧处理 IPv4 分组处理 ARP分组处理 ICMP 分组创建新帧等。这个路由器将模拟实现路由器处理主机节点发送的以太网帧的操作。 运行展示 源代码 import queue import threading import time import socket import uuid# 十进制转二进制 def dec_to_bin_str(num):return str(bin(num))[2:]# 二进制转十进制 def bin_to_dec_str(binary):return str(int(binary, 2))# IP地址转二进制 def ipv4_to_binary(ipv4):binary_list [{0:08b}.format(int(num)) for num in ipv4.split(.)]return .join(binary_list)# 二进制地址转点分十进制 def binary_to_ipv4(binary_str):if len(binary_str) ! 32:return Invalid binary stringsegments [binary_str[i:i8] for i in range(0, 32, 8)]ipv4_address ..join(str(int(segment, 2)) for segment in segments)return ipv4_address# 验证校验和 def validate_ip_checksum(data):# 初始化总合为0total 0# 每16位为单位进行遍历for i in range(0, len(data), 16):word int(data[i:i 16], 2)total word# 按位与操作和右移操作在总和的低16位中和高16位中分别加上结果total (total 0xffff) (total 16)# 再次按位与操作和右移操作对结果再次进行相加total (total (total 16)) 0xffff# 将总和与0xffff进行异或运算并将结果转换为16位二进制数checksum {:016b}.format(total ^ 0xffff)return checksum# IP数据报的格式IPv4格式 class IPv4Message:def __init__(self, version, header_length, service, total_length, identification, flags, fragment_offset, ttl, protocol, checksum, source_address, destination_address, data):self.version version # 版本self.header_length header_length # 首部长度self.service service # 区分服务self.total_length total_length # 总长度self.identification identification # 标识self.flags flags # 标志self.fragment_offset fragment_offset # 片偏移self.ttl ttl # 生存时间self.protocol protocol # 协议self.checksum checksum # 校验和self.source_address source_address # 源地址self.destination_address destination_address # 目的地址self.data data # 数据# 以太网MAC帧的格式 class MACMessage:def __init__(self, mac_destination, mac_source, protocol_type, data):self.mac_destination mac_destinationself.mac_source mac_sourceself.protocol_type protocol_type # 为IPv4self.data data# ICMP差错报文格式 class ICMPError:def __init__(self, message_type, checksum, data):self.type message_type # 1-主机不可达self.checksum checksumself.data data# ICMP回送请求或回答报文格式 class ICMPMessage:def __init__(self, message_type, checksum, data):self.type message_type # 类型字段8-请求0-回答self.checksum checksumself.data data# ARP广播格式 class ARPBroadcast:def __init__(self):self.mac FF:FF:FF:FF:FF:FF# 获取本机IP与本机MAC my_ip socket.gethostbyname(socket.gethostname()) my_mac :.join([{:02x}.format((uuid.getnode() elements) 0xff) for elements in range(0, 2 * 6, 2)][::-1])# ARP表 arp_table {my_ip: my_mac, 172.26.213.121: 00:11:22:33:44:55, 172.26.213.64: 00:aa:bb:cc:dd:ee}# 路由表 route_table {my_ip: direct, 172.26.213.121: direct, 0.0.0.0: 172.26.213.64}# 路由器类 class Router:def __init__(self):self.ip my_ipself.mac my_macself.arp_table arp_tableself.routing_table route_tableself.frame_queue queue.Queue()def route(self):while True:# 拆开frame获取IP数据报frame_message self.frame_queue.get()if frame_message :continueip_message frame_message.split()[-1]ip_header ip_message[0:160]# 计算校验和checksum ip_header[80:96]rest ip_header[-64:]print(路由器计算的校验和为 checksum)ip_message_t ip_header[0:80]ip_message_t 0000000000000000ip_message_t restif not checksum validate_ip_checksum(ip_message_t):print(路由器校验和验证失败)# 发送一个ICMP响应报文print(路由器发送一个ICMP响应报文告知主机)continueprint(路由器校验和验证成功)# 验证TTL合法性ttl int(bin_to_dec_str(ip_header[64:72]))if ttl 0:print(TTL值不合法)# 发送一个ICMP响应报文print(路由器发送一个ICMP响应报文告知主机)continueelse:# 自减ttl - 1# 拆解IP首部ip_source binary_to_ipv4((ip_message[0:160])[-64:-32])ip_destination binary_to_ipv4((ip_message[0:160])[-32:])print(路由器源IP ip_source 目的IP ip_destination)# 转发的framenew_frame_message # 根据路由表查目的IP地址for ip, move in route_table.items():if ip ip_destination:# 修改IP头部源地址改变但目的地址不变if move direct:print(路由器目标可直达直接转发)elif move upper:print(路由器目标为本身交付上层)breakelse:ip_header ip_header[0:-32]ip_header ipv4_to_binary(route_table[0.0.0.0])print(路由器新的IP数据报已生成下一跳IP地址为 route_table[0.0.0.0])# 根据ARP表获取下一跳MAC封装成帧转发mac_source self.macfor m_ip, mac in arp_table.items():if ip_header[-32:] ipv4_to_binary(m_ip):mac_destination macnew_frame_message mac_destination mac_source IPv4 ip_messageprint(路由器路由器已转发下一跳MAC为, mac)# 主机节点类 class Host:def __init__(self, ip, mac):self.ip ipself.mac mac# 获取目的MAC地址(广播ARP请求分组并接收ARP响应分组)def get_dest_mac(self, dest_ip):print(主机正在进行ARP广播)dest_mac FF:FF:FF:FF:FF:FFfor ip, mac in arp_table.items():if ip dest_ip:dest_mac my_macprint(主机目标MAC已获取 dest_mac)return dest_mac# 初始化校验和def make_checksum(self, ip_header, dest_ip):ip_header 0000000000000000ip_header ipv4_to_binary(self.ip) ipv4_to_binary(dest_ip)data ip_headertotal 0for i in range(0, len(data), 16):word int(data[i:i 16], 2)total wordtotal (total 0xffff) (total 16)total (total (total 16)) 0xffffchecksum {:016b}.format(total ^ 0xffff)print(主机生成的校验和为 checksum)return checksum# 发送数据帧def send_frame(self, dest_ip, data):# 组装IP数据报ip_header 0100 # 版本号为4ip_header 0101 # 首部长度20Bip_header 00000000 # 区分服务ip_header dec_to_bin_str(len(data) 20).zfill(16) # 总长度ip_header 0000000000000000 # 标识ip_header 000 # 标志ip_header 0000000000000 # 片偏移ip_header 00000000 # 生存时间ip_header 00000000 # 协议ip_header self.make_checksum(ip_header, dest_ip) # 校验和ip_header ipv4_to_binary(self.ip) # 源地址ip_header ipv4_to_binary(dest_ip) # 目的地址ip_message ip_header data # 组装成IP数据报# 组装数据帧frame_head self.get_dest_mac(dest_ip)frame_head self.mac IPv4frame_message frame_head ip_message# 发送给路由器print(主机数据帧发送完毕)my_router.frame_queue.put(frame_message)# 路由器与主机节点 my_router Router() my_host1 Host(172.26.213.121, 00:11:22:33:44:55) my_host2 Host(172.26.213.122, 00:11:22:33:44:55)# 打开线程 router_thread threading.Thread(targetmy_router.route) router_thread.start()# 标志位 flag True# 打印本机IP与MAC即路由器IP、MAC print(本机IP my_ip 本机MAC my_mac)# 轮询输入 while True:message input(主机请输入要发送的消息)if message exit:print(主机已关闭)breakif message shift:flag not flagcontinueif flag:my_host1.send_frame(my_ip, message)else:my_host2.send_frame(172.26.21.12, message)time.sleep(1)# 释放资源关闭线程 router_thread.join()
http://www.pierceye.com/news/499975/

相关文章:

  • 如何用社交网站开发客户学网络营销有前途吗
  • 做瞹瞹瞹视频免费网站wordpress不提示系统更新
  • 加气站类型的网站建设重庆工程招投标交易信息网
  • 如何做分类网站信息营销产品展示网站模板
  • 做网站用哪种编程语言网店营销策略
  • 已经注册了域名怎么做简单的网站知乎问答网站开发教程
  • html5做手机网站网页设计如何制作背景
  • vs2010网站开发示例wordpress apply filters
  • 产品网站建设建议定制软件的网站
  • 极速彩票网站建设创造网站需要多少钱
  • 不要域名能建网站么工作室建设规划
  • html网站首页图片切换一元购物网站怎么做
  • 焦作网站建设费用wordpress php最大输出变量
  • 移动端高端网站开发做私活的网站
  • 广东专业做网站浙江建设工程信息网高工评选
  • 当阳网站建设电话时尚类网站建设
  • 南平网站建设公司seo中文含义是什么
  • 重庆科技建设信息网站关键词做网站标题是什么意思
  • 潍坊中企动力做的网站怎么样哪个网站做黄金交易最好
  • 徐州金网网站建设西安网站建设制作公司
  • 中小企业网站建设好么做国外网站衣服码数要怎么写
  • 新浪做网站wordpress divi 主题
  • 微网站建设资讯网页游戏开发教程
  • 网站建设评估百度公司地址
  • python 做网站开发吗搜房网网站跳出率
  • 深圳企业模板网站建设做高性能的网站 哪门语言好
  • 网站后台不能上传微信公众平台网页版登陆
  • 广州网站营销seo费用成都建设网站那家好
  • 网站建设规划书结构简单wordpress
  • 域名注册网站哪个好山东淄博网络科技有限公司