优化项目机构和服务端协程控制逻辑

This commit is contained in:
2025-02-25 14:48:50 +08:00
parent 83fd749d50
commit 7f23e2741f
21 changed files with 732 additions and 440 deletions

62
server/mnt/service.go Normal file
View File

@@ -0,0 +1,62 @@
package mnt
import (
"context"
"encoding/hex"
"log/slog"
"github.com/google/gopacket"
"github.com/google/gopacket/pcap"
"github.com/pkg/errors"
)
func Start(ctx context.Context, errCh chan error) {
// 打开一个网络接口
device, err := pcap.OpenLive("WLAN", 1600, true, pcap.BlockForever)
if err != nil {
b, er := hex.DecodeString("\\xbb")
slog.Debug("b", b, er)
errCh <- errors.Wrap(err, "打开网络接口失败")
return
}
defer device.Close()
err = device.SetBPFFilter("tcp")
if err != nil {
errCh <- errors.Wrap(err, "设置 BPF 过滤器失败")
return
}
err = device.SetDirection(pcap.DirectionIn)
if err != nil {
errCh <- errors.Wrap(err, "设置捕获方向失败")
return
}
// 创建一个数据包源
source := gopacket.NewPacketSource(device, device.LinkType())
source.NoCopy = true
source.Lazy = true
for {
select {
case <-ctx.Done():
slog.Debug("monitor 被动结束")
errCh <- nil
return
case packet := <-source.Packets():
handle(packet)
}
}
}
func handle(packet gopacket.Packet) {
slog.Debug("Packet: ", packet)
slog.Debug("Layers: ", packet.Layers())
slog.Debug("Application: ", packet.ApplicationLayer())
slog.Debug("Transport: ", packet.TransportLayer())
slog.Debug("Network: ", packet.NetworkLayer())
slog.Debug("Link: ", packet.LinkLayer())
}