使用gopacket库可以获取指定出接口的MAC地址。下面是一个示例代码:
package main
import (
"fmt"
"github.com/google/gopacket"
"github.com/google/gopacket/pcap"
)
func main() {
// 指定网络接口和过滤条件
device := "eth0" // 指定网卡接口,例如 eth0、en0 等
filter := "ether src host 00:11:22:33:44:55" // 根据源MAC地址过滤
// 打开网络接口进行捕获
handle, err := pcap.OpenLive(device, 65536, true, pcap.BlockForever)
if err != nil {
panic(err)
}
defer handle.Close()
// 设置过滤器
err = handle.SetBPFFilter(filter)
if err != nil {
panic(err)
}
// 开始抓包
packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
for packet := range packetSource.Packets() {
// 获取数据链路层
ethernetLayer := packet.Layer(layers.LayerTypeEthernet)
if ethernetLayer != nil {
ethernetPacket, _ := ethernetLayer.(*layers.Ethernet)
fmt.Println("Src MAC:", ethernetPacket.SrcMAC.String())
fmt.Println("Dst MAC:", ethernetPacket.DstMAC.String())
fmt.Println()
}
}
}
在上面的示例中,我们首先指定要捕获的网络接口和过滤条件。然后打开网络接口,并设置过滤器。最后,使用gopacket.NewPacketSource
创建一个数据包源,然后遍历捕获到的数据包,从中获取以太网层信息,包括源MAC地址和目标MAC地址。
内容由零声教学AI助手提供,问题来源于学员提问