My code looks like
func checksum(b []byte) (sum uint16) {
if len(b)%2 != 0 {
b = append(b, byte(0))
}
for _, v := range b {
sum += uint16(v)
}
sum = (sum & 0xffff) + (sum >> 16)
sum += (sum >> 16)
return (^sum & 0xffff)
}
That used like this:
func main() {
hdr := new(bytes.Buffer)
buf := new(bytes.Buffer)
var verIhl uint8 = (i.Version << 4) + i.IHL
binary.Write(hdr, binary.BigEndian, verIhl)
var dscpEcn uint8 = (i.DSCP << 2) + i.ECN
binary.Write(hdr, binary.BigEndian, dscpEcn)
binary.Write(hdr, binary.BigEndian, i.Length)
binary.Write(hdr, binary.BigEndian, i.ID)
var flagsFrag uint16 = (i.Flags << 13) + i.FragmentOffset
binary.Write(hdr, binary.BigEndian, flagsFrag)
binary.Write(hdr, binary.BigEndian, i.TTL)
binary.Write(hdr, binary.BigEndian, i.Protocol)
binary.Write(hdr, binary.BigEndian, i.Checksum)
binary.Write(hdr, binary.BigEndian, i.NWSrc)
binary.Write(hdr, binary.BigEndian, i.NWDst)
binary.Write(hdr, binary.BigEndian, i.Options)
if i.Checksum == 0 {
i.Checksum = checksum(hdr.Bytes())
}
io.CopyN(buf, hdr, 10)
binary.Write(buf, binary.BigEndian, i.Checksum)
binary.Write(buf, binary.BigEndian, i.NWSrc)
binary.Write(buf, binary.BigEndian, i.NWDst)
binary.Write(buf, binary.BigEndian, i.Options)
}
but wireshark says that my checksum not right.
Can somebody helps me?
--
Vasiliy Tolstov,
e-mail: v.tolstov@selfip.ru
jabber: vase@selfip.ru
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Vasiliy Tolstov,
e-mail: v.tolstov@selfip.ru
jabber: vase@selfip.ru
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.