ZBLOG

go语言,监听接收指定接口的arp报文

要在 Go 语言中监听和接收指定接口的 ARP 报文,你可以使用 gopacket 库来实现。下面是一个简单的示例代码:

package main

import (
	"fmt"
	"log"
	"net"

	"github.com/google/gopacket"
	"github.com/google/gopacket/layers"
	"github.com/google/gopacket/pcap"
)

func main() {
	iface := "eth0" // 指定接口名字
	handle, err := pcap.OpenLive(iface, 1600, true, pcap.BlockForever)
	if err != nil {
		log.Fatal(err)
	}
	defer handle.Close()

	err = handle.SetBPFFilter("arp") // 只过滤 ARP 报文
	if err != nil {
		log.Fatal(err)
	}

	packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
	for packet := range packetSource.Packets() {
		arpLayer := packet.Layer(layers.LayerTypeARP)
		if arpLayer != nil {
			fmt.Println("Received ARP packet")
			fmt.Printf("%s\n", packet.Dump()) // 打印完整的报文信息
			arpl := arpLayer.(*layers.ARP)
			fmt.Println("Sender Hardware Address:", arpl.SourceHwAddress.String())
			fmt.Println("Sender Protocol Address:", net.IP(arpl.SourceProtAddress).String())
			fmt.Println("Target Hardware Address:", arpl.DstHwAddress.String())
			fmt.Println("Target Protocol Address:", net.IP(arpl.DstProtAddress).String())
			fmt.Println()
		}
	}
}

需要注意的是,这段代码依赖于 github.com/google/gopacket 包,你需要先安装它。可以通过以下命令来安装:

go get github.com/google/gopacket

在代码中,你需要将 iface 变量设置为要监听的接口名称,然后使用 pcap.OpenLive 打开该接口。之后使用 handle.SetBPFFilter 过滤出 ARP 报文。最后,通过循环读取 packetSource.Packets() 中的报文,并提取出 ARP 层信息。

请根据实际情况修改代码并进行测试。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=7144

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?