Tag: checksum

C#ICMPv6校验和计算

我需要计算ICMPv6校验和。 我在RFC 2460中找到了正确的手册,并在c#中编写了代码,该代码粘贴在下面。 在代码中,您可以看到我添加到校验和源IP,数据包的目标IP,而不是ICMPv6消息长度(对于Neighbor Advertisement为32字节),然后我添加下一个标头ID,即ICMPv6为58。 然后是FOR循环,它将校验和添加到整个ICMPv6消息(以我相信的消息类型开头,例如88 00 …用于邻居广告)。 比我做计算和补充校验和,但这是错误的。 我正在尝试为真正嗅探的Neighbor Advertisement计算这个校验和,它也在下面,但我无法获得相同的校验和。 我的代码可能有什么问题? static void Main(string[] args) { ICaptureDevice device = new OfflineCaptureDevice(“icmp.pcap”); device.Open(); device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival); device.Capture(); Console.ReadKey(); } private static void device_OnPacketArrival(object sender, SharpPcap.CaptureEventArgs e) { try { //packet conversions var packet = PacketDotNet.Packet.ParsePacket(e.Packet); var ethernetPacket = ((PacketDotNet.EthernetPacket)packet); int dlzka_packetu = e.Packet.Data.Length; string […]

在C#中计算Internet(即IP,即RFC791)校验和

有趣的是,我可以在除C#之外的几乎所有语言中找到Internet Checksum的实现。 有没有人有实现分享? 请记住, 互联网协议规定: “校验和字段是报头中所有16位字的一个补码和的16位补码。为了计算校验和,校验和字段的值为零。” 可以从Math博士那里找到更多解释。 有一些效率指针可供使用,但这对我来说并不是一个很大的问题。 请包括你的测试! (编辑:关于测试其他人的代码的有效评论 – 但是我要离开协议并且没有我自己的测试向量,而是宁愿对其进行unit testing,而不是投入生产以查看它是否与当前使用的相匹配! 😉 编辑:这是我提出的一些unit testing。 他们测试一个遍历整个字节集的扩展方法。 如果您在测试中发现错误,请发表评论。 [TestMethod()] public void InternetChecksum_SimplestValidValue_ShouldMatch() { IEnumerable value = new byte[1]; // should work for any-length array of zeros ushort expected = 0xFFFF; ushort actual = value.InternetChecksum(); Assert.AreEqual(expected, actual); } [TestMethod()] public void InternetChecksum_ValidSingleByteExtreme_ShouldMatch() { IEnumerable value = […]

C#中的CRC-4实现

我一直在网上寻找4位循环冗余校验(CRC-4-ITU)的C#实现,但到目前为止我还没有成功。 有没有人能够给我一个CRC-4-ITU的参考实现? 如果存在标准多项式,则优选使用标准多项式(我已经将维基百科指出的规范读作CRC4规范而没有找到多项式的定义)。 我也非常感谢某种测试套件或测试数据来validationCRC4的实现。 谢谢!