国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

IP數據包的校驗和算法C#版

2019-11-18 16:50:06
字體:
來源:轉載
供稿:網友

為做偽ip,特地做了一個IP包,用C#改寫IP頭的校驗和算法。
資料一:
IP頭格式:
 版本號 (4位)
 IP頭長度 (4位)
 服務類型 (8位)
 數據包長度 (16位)
 標識段 (16位)
 標志段 (16位)
 生存時間 (8位)
 傳輸協議 (8位)
 頭校驗和 (16位)
 發送地址 (16位)
 目標地址 (16位)
 選項
 填充

資料二:
IP 協議采用統一的校驗算法,其計算比較簡單:設校驗和初值為0,然后對數據每16位求異或,結果取反,便得校驗和。校驗時將數據(含校驗和)按同樣的算法求和,結果為0則數據正確,不為0表示通訊出錯,需要丟棄該數據包。

算法源代碼:

   public static UInt16 checksum(UInt16[] buffer,int size)
  {
   Int32 cksum=0;
   int counter;
   counter=0;
   while(size>0)
   {
        UInt16 val=buffer[counter];
        cksum+=Convert.ToInt32(buffer[counter]);
        counter+=1;
        size=-1;
   }
   cksum=(cksum>>16)+(cksum&0xffff);
   cksum+=(cksum>>16);
   return (UInt16)(~cksum);
  }

注意:buffer數組為整個ip包數組,需要轉換成UInt16[];size為buffer數組的長度。
關于byte[]轉換成UInt16[]的方法比較簡單,在此不介紹了。
http://www.survivalescaperooms.com/tuyile006/archive/2006/12/06/583949.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安远县| 孟州市| 嵊泗县| 谢通门县| 晋宁县| 延寿县| 邵武市| 蚌埠市| 八宿县| 依兰县| 临澧县| 海安县| 崇左市| 安泽县| 梧州市| 楚雄市| 曲靖市| 湖州市| 深州市| 无极县| 文山县| 若尔盖县| 高要市| 大兴区| 淮滨县| 若尔盖县| 大新县| 加查县| 淮阳县| 洪雅县| 营山县| 公安县| 泗洪县| 三门峡市| 兰溪市| 北安市| 缙云县| 湘阴县| 绥德县| 巴青县| 余江县|