草庐IT

Checksum

全部标签

c - 对于大多数数据包,我的 TCP 校验和函数返回 0

我正在编写一个小程序来嗅探流量并重新计算TCP校验和以进行验证。对于大多数HTTP数据包,我的程序返回校验和为零。我所做的是通过PSEUDO_TCP_HEADER|构造一个缓冲区TCP_HEADER|TCP_有效载荷。伪TCPheader是一个由以下内容定义的结构:structpseudo_tcp{unsignedlongsaddr,daddr;unsignedcharmbz;unsignedcharptcl;unsignedshorttcpl;};然后我调用这个函数来计算校验和(我相信这个函数做了正确的工作,因为它已经被很多项目使用):unsignedshortin_cksum(un

tcp - ipv4 报头校验和

我是TCP/IP套件的初学者。ip报头的一个域HEADERCHECKSUM是将报头看成一个16位整数序列,用补码算法将它们相加,然后对结果取补码。但是ipheader还包含TTL字段,在传输过程中可能会发生变化。为什么它不会导致发送方和接收方之间的不一致? 最佳答案 ThechecksumisrecomputedateveryhopAstheTTLfieldisdecrementedoneachhop,anewchecksummustbecomputedeachtime.Themethodusedtocomputethechecks

java - 关于TCP校验和计算的问题

我有两个问题:RFC793指出校验和应该在96位伪header、tcpheader和数据上计算。伪header包括源IP地址和目标IP地址。这不会破坏保持层分离的整个想法,因为现在当网络层开始使用不同大小的地址时,传输层也需要改变。在另一篇SO帖子中,我发现了以下用于计算校验和的Java代码。privatelongcomputeChecksum(byte[]buf){intlength=buf.length;inti=0;longsum=0;longdata;//loopthroughall16-bitwordsunlessthere's0or1byteleft.while(lengt

security - 是否应该始终依赖错误检测机制?

我知道在网络中,数据链路层、网络层、tcp甚至更高层都强制执行错误检测(或有时纠正)机制。但是例如每4KB的数据,考虑到所有层的错误检测,总共使用了多达200字节的错误检查字节。因此,即使具有良好的校验和功能,理论上也可能发生冲突。那么人们为什么要使用这些错误检测机制呢?异常不太可能发生吗? 最佳答案 如果你想要简短的回答而不是不,他们不能总是依赖,如果你有真正关键的数据,你应该自己封装数据或使用单独的channel传输一些好的散列,如f.e.SHA-256以确认数据传输无误。以太网CRC将捕获大多数错误,例如单位错误或任何奇数个单

http - HTTP 是否使用校验和?为什么/为什么不?

据我了解,TCP有一个relativelyreliablechecksummechanism,但它返回误报的可能性很小但目前仍然存在。HTTP是否使用应用程序级校验和(可能是哈希)?如果不是,为什么? 最佳答案 是的(:HTTP/1.1的规范(RFC2616)允许使用Content-MD5header。看看它的section14.15。复制粘贴:TheContent-MD5entity-headerfield,asdefinedinRFC1864[23],isanMD5digestoftheentity-bodyforthepurp

c++ - 了解 TCP 校验和函数

我相信TCP校验和函数执行以下操作:将伪报头和TCP段报头和数据分成2个字节的block。如果最后一个block的长度不是2个字节,则在最后一个block的末尾添加一个0字节的填充,使其成为2个字节。对和取反码得到TCP校验和。听起来很简单。因此,我编写了自己的通用checksum函数:#include#includeuint16_tchecksum(uint16_t*data,intsize){uint16_tsum=0;inti=0,length=size/2;while(i但是其他人编写的checksum函数似乎更复杂。例如:uint16_tchecksum(uint16_t*a

tcp - 多个 "TCP/IP"模型层的校验和字段的设计需要?他们真的是多余的吗?

多个“TCP/IP”模型层的校验和字段的设计需要?他们真的是多余的吗?举个例子,在L1:Ethernet-II中,我们有4个字节的FCS字段,在L2:Ipv4中我们也有校验和,但在IPv6中他们省略了校验和并卸载到上层。在L3中:TCP/UDP都要求校验和字段并进一步导致性能延迟。那么,如果IPv6将校验和卸载到上层的设计是一个好的设计,那么我们是否可以忽略L2及以上校验和,因为L1FCS(帧校验序列)已经覆盖了完整性? 最佳答案 不,因为记住层是相互独立的。你真的不知道你是否会在较低级别拥有FCS。这对于特定部署并不重要,但对于协

tcp - 检查 tcp 校验和

我有以下数据包(十六进制):4500002C143C400080066339C0A80102C0A8010411EF007C4FBFBBFE18DF7A77501800400241000078700001我在其中确定了IPheader:4500002C143C400080066339C0A80102C0A80104TCPheader:11EF007C4FBFBBFE18DF7A775018004002410000和数据78700001我正在尝试验证校验和。为此,我总结了TCPheader中除校验和字段之外的所有字段,这给了我201D6然后我总结了数据字节,这加到7871然后我将计算出的

java - Wireshark 校验和不匹配

我编写了一个函数来计算给定tcp数据包的校验和。但是,当我捕获从wireshark通过ipv4发送的tcp数据包并让我的函数计算其校验和时,它与wireshark捕获的数据包中的校验和不同。我检查了一下,我给computeChecksum函数的字节与我用wireshark捕获的tcp数据包字节完全相同。我根据RFC793计算了校验和.有人会看到我的代码中是否有任何错误吗?publiclongcomputeChecksum(byte[]buf,intsrc,intdst){intlength=buf.length;//nrofbytesofthetcppacketintotal.intp

c++ - TCP校验和计算出错

我正在尝试获取正确的TCP校验和,但失败了。我正在使用C++,我使用winpcap获取本地网络的数据包,并且我尝试计算它们的tcp校验和(我放置了正确的过滤器以仅获取tcp数据包)。但是,当我将计算出的校验和与wiresharktcp校验和进行比较时,它们并不相同。这是我用C++做的代码,它使用位图来检测进位。u_char*tcp_checksum(constu_char*data,intsize){u_char*checksum=newu_char[2]();uint16_tsumando=0;bitsettotal;//addipsrcandipdstfor(inti=26;i>8