避坑:先说结论--在windows环境下无法通过net/gopacket发送伪造数据包
0x00 背景:
尝试使用go语言在本地网卡嗅探并且过滤,当某个数据包符合预定条件时,在当前网卡上发送伪造的数据包(伪造源地址目的地址,其实就是把抓到的符合条件的包的IP地址、端口进行源目的调换)
0x01 网络嗅探功能:
网络嗅探功能使用gopacket包实现,相对简单,下面是一个基本的例子
package main
import (
"fmt"
"log"
"github.com/google/gopacket"
"github.com/google/gopacket/pcap"
)
func main() {
// 设置要嗅探的网络接口
device := "eth0"
// 打开网络接口
handle, err := pcap.OpenLive(device, 65536, true, pcap.BlockForever)
if err != nil {
log.Fatal(err)
}
defer handle.Close()
// 创建数据包捕获器
packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
// 开始捕获数据包
for packet := range packetSource.Packets() {
fmt.Println(packet)
}
}