我在尝试用go语言去构建一个icmp的请求报文(ping request),但当我将这个icmp发送至114.114.114.114时会ping请求超时,提示校验和错误。我发送至其他地址(7.7.7.7)却可以成功收到ping回复。以下是我校验和部分的计算代码
// CheckSum calculate the CheckSum of icmp
func CheckSum(data []byte) uint16 {
var (
sum uint32
length int = len(data)
index int
)
for length > 1 {
sum += uint32(data[index])<<8 + uint32(data[index+1])
index += 2
length -= 2
}
if length > 0 {
sum += uint32(data[index])
}
sum += sum >> 16
return uint16(^sum)
}
icmp部分type设置为8, code 为0
这个问题可能是由于什么情况导致的?或者我应该如何修改我的代码?