优化项目机构和服务端协程控制逻辑
This commit is contained in:
62
server/mnt/service.go
Normal file
62
server/mnt/service.go
Normal 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())
|
||||
}
|
||||
Reference in New Issue
Block a user