feat: make sniffing async
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
import logging
|
import logging
|
||||||
|
from signal import pause
|
||||||
|
|
||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from star_resonance_tracer.proto.enum_chit_chat_channel_type_pb2 import ChitChatChannelType
|
from star_resonance_tracer.proto.enum_chit_chat_channel_type_pb2 import ChitChatChannelType
|
||||||
|
|
||||||
from inventory_wars.game import Game
|
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 = Game(Session(engine), item_id=1040202, listening_channels=[ChitChatChannelType.ChannelTeam])
|
||||||
game.start()
|
game.start()
|
||||||
|
|
||||||
|
pause()
|
||||||
|
|||||||
@@ -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.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.proto.stru_place_holder_item_pb2 import PlaceHolderItem
|
||||||
from star_resonance_tracer.sniffer import Sniffer
|
from star_resonance_tracer.sniffer import Sniffer
|
||||||
|
|
||||||
from inventory_wars.const import ChitChatNtf, decode_placeholder, HypertextVariant
|
from inventory_wars.const import ChitChatNtf, decode_placeholder, HypertextVariant
|
||||||
from inventory_wars.sniffer import start_sniffing
|
from inventory_wars.sniffer import get_sniffer
|
||||||
from star_resonance_tracer.proto.serv_chit_chat_ntf_pb2 import ChitChatNtf as ChitChatNtfPb
|
|
||||||
|
|
||||||
|
|
||||||
def on_chit_chat_msg(event: ChitChatNtfPb.NotifyNewestChitChatMsgs) -> None:
|
def on_chit_chat_msg(event: ChitChatNtfPb.NotifyNewestChitChatMsgs) -> None:
|
||||||
@@ -24,7 +26,6 @@ def on_chit_chat_msg(event: ChitChatNtfPb.NotifyNewestChitChatMsgs) -> None:
|
|||||||
print(item)
|
print(item)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sniffer = Sniffer()
|
sniffer = Sniffer()
|
||||||
sniffer.set_service_type(
|
sniffer.set_service_type(
|
||||||
ChitChatNtf.ServiceId.value,
|
ChitChatNtf.ServiceId.value,
|
||||||
@@ -33,4 +34,7 @@ sniffer.set_service_type(
|
|||||||
)
|
)
|
||||||
sniffer.on_service(ChitChatNtfPb.NotifyNewestChitChatMsgs, on_chit_chat_msg)
|
sniffer.on_service(ChitChatNtfPb.NotifyNewestChitChatMsgs, on_chit_chat_msg)
|
||||||
|
|
||||||
start_sniffing(sniffer)
|
scapy = get_sniffer(sniffer)
|
||||||
|
scapy.start()
|
||||||
|
|
||||||
|
pause()
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
from scapy.sendrecv import AsyncSniffer
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
import logging
|
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_channel_type_pb2 import ChitChatChannelType
|
||||||
from star_resonance_tracer.proto.enum_chit_chat_msg_type_pb2 import ChitChatMsgType
|
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__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -22,6 +23,7 @@ class Game:
|
|||||||
self.session = session
|
self.session = session
|
||||||
self.listening_channels = listening_channels or []
|
self.listening_channels = listening_channels or []
|
||||||
self.event = Event(item_id=item_id)
|
self.event = Event(item_id=item_id)
|
||||||
|
self.scapy: AsyncSniffer | None = None
|
||||||
|
|
||||||
def start(self) -> None:
|
def start(self) -> None:
|
||||||
self.event.timestamp = datetime.now()
|
self.event.timestamp = datetime.now()
|
||||||
@@ -39,7 +41,11 @@ class Game:
|
|||||||
)
|
)
|
||||||
sniffer.on_service(ChitChatNtfPb.NotifyNewestChitChatMsgs, self.on_chit_chat_msg)
|
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:
|
def on_chit_chat_msg(self, event: ChitChatNtfPb.NotifyNewestChitChatMsgs) -> None:
|
||||||
req = event.vRequest
|
req = event.vRequest
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
|
||||||
|
|
||||||
from star_resonance_tracer.sniffer import Sniffer
|
from star_resonance_tracer.sniffer import Sniffer
|
||||||
from star_resonance_tracer.connection import Connection, PidBasedConnectionDetector
|
from star_resonance_tracer.connection import Connection, PidBasedConnectionDetector
|
||||||
@@ -8,17 +7,17 @@ from collections import defaultdict
|
|||||||
from scapy.config import conf
|
from scapy.config import conf
|
||||||
from scapy.layers.inet import TCP, IP
|
from scapy.layers.inet import TCP, IP
|
||||||
from scapy.packet import Packet, Raw
|
from scapy.packet import Packet, Raw
|
||||||
from scapy.sendrecv import sniff
|
from scapy.sendrecv import AsyncSniffer
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
"start_sniffing",
|
"get_sniffer",
|
||||||
)
|
)
|
||||||
|
|
||||||
conf.layers.filter([TCP, IP])
|
conf.layers.filter([TCP, IP])
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def start_sniffing(sniffer: Sniffer) -> None:
|
def get_sniffer(sniffer: Sniffer) -> AsyncSniffer:
|
||||||
executable_name = "StarSEA"
|
executable_name = "StarSEA"
|
||||||
|
|
||||||
detector = PidBasedConnectionDetector()
|
detector = PidBasedConnectionDetector()
|
||||||
@@ -48,4 +47,4 @@ def start_sniffing(sniffer: Sniffer) -> None:
|
|||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("Silently caught 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