feat: make sniffing async
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user