go中网络流量分析gopacket库的使用

一、前言

        近来,笔者想学习下用go构造tcp数据包,这里涉及到gopacket库的使用,故这里记录下关于gopacket库的一些学习记录

二、介绍

        gopacket 是 Go 语言的网络数据包处理库,它提供了方便的 API 来读取、分析、修改和生成网络数据包。你可以使用这个库来修改数据包内容,以实现特定的网络测试或安全目的。

修改数据包的过程大致如下:

  1. 使用 gopacket 读取数据包并解码为特定协议的数据结构(如 IP、TCP 等)。

  2. 修改相应的字段,如源 IP 地址、目的 IP 地址、源端口、目的端口等。

  3. 将数据包编码为原始字节流并写回网络。

通过 gopacket 库可以很方便地实现数据包的修改。

三、使用

加载:go get -u github.com/google/gopacket

1、枚举所有网络设备

func GetAllDevs() {
	//获取所有设备信息
	devices, err := pcap.FindAllDevs()
	if err != nil {
		log.Fatal(err)
	}
	//打印设备信息
	fmt.Println("找到的Devices 信息:")
	for _, device := range devices {
		fmt.Println("\n名字:", device.Name)
		fmt.Println("描述信息:", device.Description)
		fmt.Println("Devices 地址信息:", device.Addresses) //网口地址信息列表包括IP 、 掩码、 广播地址 、P2P
		for _, address := range device.Addresses {
			fmt.Println("- IP 地址为:", address.IP)
			fmt.Println("- 掩码为:", address.Netmask)
			fmt.Println("- 广播地址为:", address.Broadaddr)
			fmt.Println("- P2P地址为:", address.P2P)
			fmt.Println()
		}

	}
}


//获取所有有IP的网络设备名称
func GetAllDevsHaveAddress() (string, error) {
	pcapDevices, err := pcap.FindAllDevs()
	if err != nil {
		return "", errors.New(fmt.Sprintf("list pcapDevices failed: %s", err.Error()))
	}
	var buf strings.Builder
	for _, dev := range pcapDevices {
		fmt.Sprint("Dev:", dev.Name, "\tDes:", dev.Description)
		buf.WriteString(dev.Name)
		if len(dev.Addresses) > 0 {
			for _, ips := range dev.Addresses {
				fmt.Sprint("\tAddr:", ips.IP.String())
				//buf.WriteString(ips.IP.String())
			}

		}
		buf.WriteString("\n")
	}
	return buf.String(), nil
}

//通过IP获取设备名称
func GetDevByIp(ip net.IP) (devName string, err error) {
	devices, err := pcap.FindAllDevs()
	if er
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值