Advertisement

IEEE 802.3以太网帧封装

阅读量:

要求:

请在界面上绘制各个组件,并将以太网帧数据字段、源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编写黑色框架略显不足,并不太熟悉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
    
   147. 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;
    
  
    
 }

最后的效果:

全部评论 (0)

还没有任何评论哟~