IEEE 802.3以太网帧封装

2023-11-16

要求:

1.要求画出界面,以太网帧的数据部分、源MAC地址和目的MAC地址均从界面输入;

2.计算后的校验和字段和封装后的结果可以从界面上输出;

3.生成多项式G(X)=X8+X2+X1+1;

(或者生成多项式G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1;)

就是计算帧检测序列FCS,一个简单的算法

觉得用C写黑框框有点low,C++的MFC又不会,所以用了当年学的HTML+CSS+JS写了一个

参考代码:

<!DOCTYPE html>
<html>
<head>
	<title>IEEE 802.3以太网帧封装</title>
	<meta charset="utf-8">
	<link rel="stylesheet" type="text/css" href="ComNet1.css">
</head>

<script type="text/javascript">
	//求FCS
	function f( num){
		var P =  new Array(1,0,0,0,0,0,1,1,1);
		var n = 8,len = 0;
		for( var i = 1; i <= n; i++)
			num *= 10;
		var tmp = num;
		var M = new Array();
		while( tmp >= 1)
		{
			M[len++] = tmp%10;
			tmp = parseInt(tmp/10);
		}
		for( var i = 0; i <= len/2; i++){
			var tmp = M[i];
			M[i] = M[len-1-i];
			M[len-1-i] = tmp;
		}
		var cnt = 0,head = 0,tail = n;
		while( tail < len && (tail-head) == n){
			var flag = 1;
			var headchange;
			for( var i = head; i <= tail; i++){
				var tmp;
				if( M[i] == P[i-head])
					tmp = 0;
				else
					tmp = 1;
				console.log(M[i]+" "+P[i-head]+" "+tmp);
				if( tmp == 1 && flag == 1){
					headchange = i;
					flag = 0;
					M[i] = tmp;
				}
				else
					M[i] = tmp;
			}
			if( !flag)
			  	head = headchange;
			if( cnt == 10)
				while( tail < len)
					tail++;
			while( (tail-head) < n)
				tail++;
			cnt++;
			console.log(tail+' '+head+' '+len)
		}
		console.log(cnt);
		var ans = 0;
		for( var i = head; i <= len; i++)
			ans = parseInt(ans*10+parseInt(M[i]));
		console.log(ans);
		return M;
	}

	window.οnlοad=function(){
	//获得了值
	var data = document.getElementById("in1");
	var mudi = document.getElementById("in2");
	var yuan = document.getElementById("in3");
	var cdzd = document.getElementById("in4");
	var submit = document.getElementById("sub");
	sub.οnclick=function(){
		if( data != "" && yuan != "" && mudi != "")
		{
			var table = document.getElementById("mytable");
			var oneRow = table.insertRow();
			var cell1 = oneRow.insertCell();
			cell1.innerHTML = "0xAAAAAAAAAAAAAA";
			var cell2 = oneRow.insertCell();
			cell2.innerHTML = "0xAB";
			var cell3  = oneRow.insertCell();
			cell3.innerHTML = mudi.value;
			var cell4 = oneRow.insertCell();
			cell4.innerHTML = yuan.value;
			var cell5 = oneRow.insertCell();
			cell5.innerHTML = cdzd.value;//默认为IP包
			var cell6 =oneRow.insertCell();
			cell6.innerHTML = data.value;
			var cell7 = oneRow.insertCell();
			var tmp = data.value;
			tmp = f(data.value);
			cell7.innerHTML = tmp;
		}	
	}	
}

</script>

<body>

<div class="in">
	<form >
		以太网帧的数据部分
		<input id="in1" type="text" name=""><br>
		目  的  MAC  地  址 
		<input id="in2" type="text" name=""><br>
		源    MAC   地  址   
		<input id="in3" type="text" name=""><br>
		长    度    字     段    
		<input id="in4" type="text" name=""><br>
		<button id="sub" type="button">submit</button>
	</form>
</div>

<div class="content">
	<table id="mytable" cellpadding="10" cellspacing="0">
		<tr>
			<th class="bt qdm">前导码</th>
			<th class="bt djf">帧前定界符</th>
			<th class="bt md">目的地址</th>
			<th class="bt y">源地址</th>
			<th class="bt cd">长度字段</th>
			<th class="bt sj">数据字段</th>
			<th class="bt jy">校验字段</th>
		</tr>
		<tr>
			<td></td>
		</tr>
	</table>
</div>

</content>

</body>
</html>



<!-- 00
8byte
101101
ff:ff:ff:ff:ff:ff
cc:00:0b:b8:00:00
0x0806
0x0806

12byte
11010001
01:00:0c:cc:cc:cc
cc:00:18:10:00:00
0x0800
 -->
*{
	margin: 0;
	list-style: none;
	text-align: center;
}

body{
	width: 1000px;
	margin: 0 auto;
	margin-top: 50px;
	background-image: url(1.jpg);
	/*background-image: url(2.jpg);
	background-image: url(3.jpg);*/
}

.in{
	b/*order: 1px solid red;*/
	margin: 20px;
}

.in form input{
	display: inline-block;
	text-align: left;
	margin: 5px;
	width: 200px;
	height: 17px;
}

.in form #sub{
	display: inline-block;
	border-radius: 5px;
	height: 30px;
	line-height: 30px;
	width: 80px;
	color: gray;
	background-color: white;
	margin: 15px 0;
}

.content{
	width: 100%;
	border: 1px solid black;
}

.content table{
	/*border: 1px solid red;*/
}

.content table tr .bt{
	width: 114px;
	border: 1px solid black;

}

最后的效果:


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IEEE 802.3以太网帧封装 的相关文章

  • 【Java项目推荐】值得写到简历上的项目--黑马点评

    优惠卷秒杀 前言 优惠券秒杀 实现优惠券秒杀下单 超卖问题 一人一单 分布式锁 redis中加锁的一些特殊情况 手动实现分布式锁 分布式锁误删情况1 分布式锁误删情况2 lua脚本解决多条命令的原子性问题 Redisson 秒杀优化 异步秒
  • Mac使用Python接入东方财富量化接口Choice,调试与获取数据

    这篇博客用来把在Mac平台上使用python接入东方财富Choice接口的流程细化并重写 官方文档有些地方说的太含糊了 有的地方博主尝试了多种方法才试出来 这里直接把标准答案给到大家 尽量避坑吧 吐槽 同花顺科技感很足 赞 但是没有Mac版

随机推荐

  • 什么是虚拟键码、虚拟密钥码、扫描码

    虚拟键码 虚拟密钥码 扫描码
  • spring_boot-启动错误笔记

    2018 07 15 17 15 42 443 INFO 10892 restartedMain s b a e w s WebMvcEndpointHandlerMapping Mapped actuator health methods
  • ElementUI tabs标签页样式改造美化

    今天针对ElementUI的Tabs标签页进行了样式修改 更改为如下图所属的样子 在线运行地址 JSRUN项目 ElementUI tabs标签页样式改造 大家如果有需要可以拿来修改使用 下面我也简单的贴上代码 代码没有注释 很抱歉 时间比
  • python的运行方式有哪两种 有何区别_python程序的两种运行方式是什么

    python程序的两种运行方式是什么 第一种方式 REPL 所谓REPL即read eva print loop 读取 计算 打印 循环 实现REPL运行方式有以下两种 1 IDLE 集成开发环境或集成开发和学习环境 是Python的集成开
  • 在ESXi安装ubuntu中,ubuntu20.04是LVM管理的,lvm盘只有识别100G ,需扩展逻辑卷来使用更多的空间

    sudo fdisk l Device Start End Sectors Size Type dev sda1 2048 4095 2048 1M BIOS boot dev sda2 4096 4198399 4194304 2G Li
  • SpringCloud中Hystrix中熔断器的简单配置和调用

    SpringCloud中Hystrix组件 用于在云环境中远程调用方法失败后的处理机制 它通过配置一个处理类实现接口重写其方法提供调用失败后的紧急处理 是一个非常好用的组件 1 首先在没有配置熔断器之前启动项目访问 只启动了一个模块 注册中
  • docker dbus-x11

    本来想用terminator启动nvidia docker 显示出图形界面的 结果发现启动的时候出问题了 terminator 1 dbind WARNING 07 31 53 725 Couldn t connect to accessi
  • Java接口登录实现页面跳转

    方式一 在Java中 可以通过使用接口和实现类来实现页面跳转功能 以下是一个简单的示例代码 首先 创建一个接口 例如LoginService public interface LoginService void login String u
  • linux设备驱动归纳总结(六):1.中断的实现

    一 什么是中断 中断分两种 1 中断 又叫外部中断或异步中断 它的产生是由于外设向处理器发出中断请求 其中外部中断也有两种 这是由配置寄存器设定的 普通中断请求 IRQ 和快速中断请求 FIQ 一般地 linux下很少使用快速中断请求 2
  • OVP电路应用(一)_12V电源_DIO1280

    目录 前言 一 基本信息 二 基本电气特性 1 PIN定义 2 电气特性 3 OVP值的设置 4 时序 5 其他 三 实际设计案例 1 电路原理图 PCB Layout 2 测试 3 问题与对策 四 USB的VBUS应用 其他举例 1 电路
  • 关于DecimalFormat类的数字格式化

    文章目录 基本格式化 不同特殊符号代码的格式 不同符号的使用 当我们遇到小数时 必定会设置保留小数的位数 也可能会涉及数字的格式转换 那么在Java中肯定也有这样的一个类 就是DecimalFormat类能帮助我们方便快捷的解决此类小数格式
  • Atlantis

    点击打开链接 Description There are several ancient Greek texts that contain descriptions of the fabled island Atlantis Some of
  • error: expected ';', ',' or ')' before '&' token 解决方法

    在用Devcpp验证函数 引用传递 的时候 出现了错误提示 Error expected or before token 源代码如下 include
  • vue3 下载router之后,路由未生效及控制台警告问题

    在控制台页面会报出警告 Failed to resolve component router link 无法识别router link import createApp from vue import App from App vue im
  • 前端常见的适配方法

    一 固定布局 pc端 静态布局 以像素作为页面的基本单位 不管设备和浏览器宽度 只设计一套尺寸 这种不太现实 二 根据不同根据不同的分辨率 加载不同的CSS样式文件 可切换的固定布局 自适应布局
  • 关于考试管理系统的实现

    关于考试管理系统的实现 背景 随着各地人事机构招考需求不断增强 规模不断扩大 考务管理工作量不断加大 尤其是报名 缴费 考场编排和准考证制作这几项非常重要且有繁琐的工作 若是再依靠传统的线下人工方式进行 那将浪费大量的人力 时间和资源 针对
  • 单片机毕业设计 RFID智能门禁系统

    文章目录 1 简介 2 绪论 2 1 课题背景与目的 3 射频识别 3 1 射频识别技术 3 2 射频识别模块 3 2 1 RFID模块 3 2 2 RFID模块组成 4 系统设计 4 1 系统架构 4 1 1 硬件部分 4 1 2 软件部
  • 使用 git 提交到指定远程分支

    使用 git 提交到指定远程分支 git add git commit 或者使用 git commit m messges git pull origin 远程分支名 相当于指定分支的代码与当前分支的代码合并到了一起 git push or
  • 1分钟部署一个属于自己的网站,借助云开发静态网站部署属于自己的网站

    今天来教大家部署一个属于自己的第一个静态网站 因为这里借助小程序云开发的静态服务器资源 所以可以轻松的实现自己网站的部署 部署完以后可以在电脑浏览器 手机浏览器 微信公众号里面展示 老规矩 先看效果图 简单起见 我这里写一个最简单的html
  • IEEE 802.3以太网帧封装

    要求 1 要求画出界面 以太网帧的数据部分 源MAC地址和目的MAC地址均从界面输入 2 计算后的校验和字段和封装后的结果可以从界面上输出 3 生成多项式G X X8 X2 X1 1 或者生成多项式G X X32 X26 X23 X22 X