1
0

feat: make sniffing async

This commit is contained in:
2026-06-01 23:20:29 +08:00
parent 48b69b7775
commit 3aacb2c32d
4 changed files with 24 additions and 12 deletions
+4 -1
View File
@@ -1,7 +1,8 @@
import logging
from signal import pause
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from star_resonance_tracer.proto.enum_chit_chat_channel_type_pb2 import ChitChatChannelType
from inventory_wars.game import Game
@@ -14,3 +15,5 @@ Base.metadata.create_all(engine)
game = Game(Session(engine), item_id=1040202, listening_channels=[ChitChatChannelType.ChannelTeam])
game.start()
pause()
+8 -4
View File
@@ -1,10 +1,12 @@
from signal import pause
from star_resonance_tracer.proto.enum_chit_chat_msg_type_pb2 import ChitChatMsgType
from star_resonance_tracer.proto.serv_chit_chat_ntf_pb2 import ChitChatNtf as ChitChatNtfPb
from star_resonance_tracer.proto.stru_place_holder_item_pb2 import PlaceHolderItem
from star_resonance_tracer.sniffer import Sniffer
from inventory_wars.const import ChitChatNtf, decode_placeholder, HypertextVariant
from inventory_wars.sniffer import start_sniffing
from star_resonance_tracer.proto.serv_chit_chat_ntf_pb2 import ChitChatNtf as ChitChatNtfPb
from inventory_wars.sniffer import get_sniffer
def on_chit_chat_msg(event: ChitChatNtfPb.NotifyNewestChitChatMsgs) -> None:
@@ -24,7 +26,6 @@ def on_chit_chat_msg(event: ChitChatNtfPb.NotifyNewestChitChatMsgs) -> None:
print(item)
sniffer = Sniffer()
sniffer.set_service_type(
ChitChatNtf.ServiceId.value,
@@ -33,4 +34,7 @@ sniffer.set_service_type(
)
sniffer.on_service(ChitChatNtfPb.NotifyNewestChitChatMsgs, on_chit_chat_msg)
start_sniffing(sniffer)
scapy = get_sniffer(sniffer)
scapy.start()
pause()
+8 -2
View File
@@ -1,5 +1,6 @@
from datetime import datetime
from scapy.sendrecv import AsyncSniffer
from sqlalchemy.orm import Session
import logging
@@ -12,7 +13,7 @@ from star_resonance_tracer.proto.serv_chit_chat_ntf_pb2 import ChitChatNtf as Ch
from star_resonance_tracer.proto.enum_chit_chat_channel_type_pb2 import ChitChatChannelType
from star_resonance_tracer.proto.enum_chit_chat_msg_type_pb2 import ChitChatMsgType
from inventory_wars.sniffer import start_sniffing
from inventory_wars.sniffer import get_sniffer
logger = logging.getLogger(__name__)
@@ -22,6 +23,7 @@ class Game:
self.session = session
self.listening_channels = listening_channels or []
self.event = Event(item_id=item_id)
self.scapy: AsyncSniffer | None = None
def start(self) -> None:
self.event.timestamp = datetime.now()
@@ -39,7 +41,11 @@ class Game:
)
sniffer.on_service(ChitChatNtfPb.NotifyNewestChitChatMsgs, self.on_chit_chat_msg)
start_sniffing(sniffer)
self.scapy = get_sniffer(sniffer)
self.scapy.start()
def stop(self):
self.scapy.stop()
def on_chit_chat_msg(self, event: ChitChatNtfPb.NotifyNewestChitChatMsgs) -> None:
req = event.vRequest
+4 -5
View File
@@ -1,5 +1,4 @@
import logging
import os
from star_resonance_tracer.sniffer import Sniffer
from star_resonance_tracer.connection import Connection, PidBasedConnectionDetector
@@ -8,17 +7,17 @@ from collections import defaultdict
from scapy.config import conf
from scapy.layers.inet import TCP, IP
from scapy.packet import Packet, Raw
from scapy.sendrecv import sniff
from scapy.sendrecv import AsyncSniffer
__all__ = (
"start_sniffing",
"get_sniffer",
)
conf.layers.filter([TCP, IP])
logger = logging.getLogger(__name__)
def start_sniffing(sniffer: Sniffer) -> None:
def get_sniffer(sniffer: Sniffer) -> AsyncSniffer:
executable_name = "StarSEA"
detector = PidBasedConnectionDetector()
@@ -48,4 +47,4 @@ def start_sniffing(sniffer: Sniffer) -> None:
except Exception:
logger.exception("Silently caught exception")
sniff(filter=detector.as_bpf_filter(), prn=on_packet, store=False)
return AsyncSniffer(filter=detector.as_bpf_filter(), prn=on_packet, store=False)