添加注释

This commit is contained in:
aixiao 2025-03-07 09:33:23 +08:00
parent 19b20dec5c
commit c6a0fd4468
2 changed files with 13 additions and 1 deletions

14
cap.go
View File

@ -53,11 +53,14 @@ func printPacketInfo(packet gopacket.Packet) {
}
}
// startPacketCapture 启动数据包捕获
func startPacketCapture() {
// 打开指定的网络接口进行实时数据包捕获
handle, err := pcap.OpenLive(*InterfaceName, 65535, true, pcap.BlockForever)
if err != nil {
log.Fatalf("打开网络接口 %s 出错: %v", *InterfaceName, err)
}
// 确保在函数退出时关闭句柄,释放资源
defer func() {
fmt.Println("清理资源...")
if handle != nil {
@ -65,11 +68,13 @@ func startPacketCapture() {
}
}()
// 设置 BPFBerkeley Packet Filter过滤器以便只捕获指定协议的数据包
err = handle.SetBPFFilter(*Protocol)
if err != nil {
log.Fatalf("设置 BPF 过滤器出错: %v", err)
}
// 如果指定了输出文件,则创建文件并初始化 pcapgo.Writer
var pcapWriter *pcapgo.Writer
if *PcapFile != "" {
file, err := os.Create(*PcapFile)
@ -79,21 +84,27 @@ func startPacketCapture() {
defer file.Close()
pcapWriter = pcapgo.NewWriter(file)
// 写入 pcap 文件头部,指定最大捕获长度和链路层类型
err = pcapWriter.WriteFileHeader(65535, layers.LinkTypeEthernet)
if err != nil {
log.Fatalf("写入全局头部出错: %v", err)
}
}
// 创建数据包源,用于从网络接口读取数据包
packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
fmt.Printf("正在监听网络接口 %s使用过滤器 '%s'...\n", *InterfaceName, *Protocol)
fmt.Printf("正在监听网络接口 %s, 使用过滤器 '%s'...\n", *InterfaceName, *Protocol)
// 创建信号通道,用于捕获中断信号
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
// 启动一个 goroutine 来处理捕获到的数据包
go func() {
for packet := range packetSource.Packets() {
// 打印数据包信息
printPacketInfo(packet)
// 如果指定了输出文件,则将数据包写入文件
if pcapWriter != nil {
err := pcapWriter.WritePacket(packet.Metadata().CaptureInfo, packet.Data())
if err != nil {
@ -103,6 +114,7 @@ func startPacketCapture() {
}
}()
// 等待中断信号,收到信号后停止捕获
<-sigChan
fmt.Println("\n停止抓包...")
}

BIN
denyip

Binary file not shown.