go 构造 icmp 报文和 icmpv6 报文

这两段代码展示了如何使用Go语言构建ICMP和ICMPv6报文。程序定义了ICMP结构体,计算校验和,并通过DialIP函数创建连接,向指定的目标IP发送echo请求。主要涉及网络层的IP协议和ICMP协议交互。
  1. 构建 icmp 报文
package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"net"
)

const MsgLen = 4000

type ICMP struct {
   
   
	Type        uint8
	Code        uint8
	Checksum    uint16
	Identifier  uint16
	SequenceNum uint16
	msgData     [MsgLen]uint8
}

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)
}

func main() {
   
   
	var (
		icmp  ICMP
		laddr net.IPAddr = net.IPAddr{
   
   IP: n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值