添加注释
This commit is contained in:
parent
19b20dec5c
commit
c6a0fd4468
14
cap.go
14
cap.go
@ -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() {
|
||||
}
|
||||
}()
|
||||
|
||||
// 设置 BPF(Berkeley 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停止抓包...")
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user