Yarilo  v0.9
WPA2 Decrypter & Packet Analyzer
service.h
Go to the documentation of this file.
1 #ifndef SNIFF_SERVICE
2 #define SNIFF_SERVICE
3 
4 #include "proto/service.grpc.pb.h"
5 #include "proto/service.pb.h"
6 #include "sniffer.h"
7 #include "uuid.h"
8 #include <filesystem>
9 #include <grpcpp/server_context.h>
10 #include <grpcpp/support/sync_stream.h>
11 #include <optional>
12 #include <tins/sniffer.h>
13 #include <unordered_map>
14 
15 namespace yarilo {
16 
20 class Service : public proto::Sniffer::Service {
21 public:
22  Service(const std::filesystem::path &save_path,
23  const std::filesystem::path &sniff_path,
24  const MACAddress &ignored_bssid = Sniffer::NoAddress,
25  bool save_on_shutdown = false);
26 
27  std::optional<uuid::UUIDv4>
28  add_file_sniffer(const std::filesystem::path &file);
29  std::optional<uuid::UUIDv4> add_iface_sniffer(const std::string &iface_name);
30  void shutdown();
31 
32  grpc::Status SnifferCreate(grpc::ServerContext *context,
33  const proto::SnifferCreateRequest *request,
34  proto::SnifferID *reply) override;
35 
36  grpc::Status SnifferDestroy(grpc::ServerContext *context,
37  const proto::SnifferID *request,
38  proto::Empty *reply) override;
39 
40  grpc::Status SnifferList(grpc::ServerContext *context,
41  const proto::Empty *request,
42  proto::SnifferListResponse *reply) override;
43 
44  grpc::Status AccessPointList(grpc::ServerContext *context,
45  const proto::SnifferID *request,
46  proto::APListResponse *reply) override;
47 
48  grpc::Status AccessPointGet(grpc::ServerContext *context,
49  const proto::APGetRequest *request,
50  proto::APGetResponse *reply) override;
51 
52  grpc::Status
53  AccessPointProvidePassword(grpc::ServerContext *context,
54  const proto::APProvidePasswordRequest *request,
55  proto::APProvidePasswordResponse *reply) override;
56 
57  grpc::Status AccessPointGetDeryptedStream(
58  grpc::ServerContext *context,
59  const proto::APGetDeryptedStreamRequest *request,
60  grpc::ServerWriter<proto::Packet> *writer) override;
61 
62  grpc::Status AccessPointDeauth(grpc::ServerContext *context,
63  const proto::APDeauthRequest *request,
64  proto::Empty *reply) override;
65 
66  grpc::Status
67  AccessPointDeauthClient(grpc::ServerContext *context,
68  const proto::APDeauthClientRequest *request,
69  proto::Empty *reply) override;
70 
71  grpc::Status AccessPointGetHash(grpc::ServerContext *context,
72  const proto::APGetHashRequest *request,
73  proto::APGetHashResponse *reply) override;
74 
75  grpc::Status AccessPointIgnore(grpc::ServerContext *context,
76  const proto::APIgnoreRequest *request,
77  proto::Empty *reply) override;
78 
79  grpc::Status AccessPointListIgnored(grpc::ServerContext *context,
80  const proto::SnifferID *request,
81  proto::APListResponse *reply) override;
82 
83  grpc::Status
84  AccessPointCreateRecording(grpc::ServerContext *context,
85  const proto::APCreateRecordingRequest *request,
86  proto::APCreateRecordingResponse *reply) override;
87 
88  grpc::Status FocusStart(grpc::ServerContext *context,
89  const proto::FocusStartRequest *request,
90  proto::FocusStartResponse *reply) override;
91 
92  grpc::Status FocusGetActive(grpc::ServerContext *context,
93  const proto::SnifferID *request,
94  proto::FocusGetActiveResponse *reply) override;
95 
96  grpc::Status FocusStop(grpc::ServerContext *context,
97  const proto::SnifferID *request,
98  proto::Empty *reply) override;
99 
100  grpc::Status RecordingCreate(grpc::ServerContext *context,
101  const proto::RecordingCreateRequest *request,
102  proto::RecordingCreateResponse *reply) override;
103 
104  grpc::Status RecordingList(grpc::ServerContext *context,
105  const proto::RecordingListRequest *request,
106  proto::RecordingListResponse *reply) override;
107 
108  grpc::Status
109  RecordingLoadDecrypted(grpc::ServerContext *context,
110  const proto::RecordingLoadDecryptedRequest *request,
111  grpc::ServerWriter<proto::Packet> *writer) override;
112 
113  grpc::Status
114  NetworkInterfaceList(grpc::ServerContext *context,
115  const proto::Empty *request,
116  proto::NetworkInterfaceListResponse *reply) override;
117 
118  grpc::Status
119  LogGetStream(grpc::ServerContext *context, const proto::Empty *request,
120  grpc::ServerWriter<proto::LogEntry> *writer) override;
121 
122 private:
123  std::unordered_map<uuid::UUIDv4, std::unique_ptr<Sniffer>> sniffers;
124  std::unordered_map<uuid::UUIDv4, std::unique_ptr<Sniffer>>
125  erased_sniffers; // Kept for shutdown logic
126  std::shared_ptr<spdlog::logger> logger;
127  const std::filesystem::path save_path;
128  const std::filesystem::path sniff_path;
129  const MACAddress ignored_bssid;
130  const bool save_on_shutdown;
131 };
132 
133 } // namespace yarilo
134 
135 #endif // SNIFF_SERVICE
Service delivering an external gRPC API.
Definition: service.h:20
Service(const std::filesystem::path &save_path, const std::filesystem::path &sniff_path, const MACAddress &ignored_bssid=Sniffer::NoAddress, bool save_on_shutdown=false)
Definition: service.cpp:37
grpc::Status SnifferCreate(grpc::ServerContext *context, const proto::SnifferCreateRequest *request, proto::SnifferID *reply) override
Definition: service.cpp:116
grpc::Status SnifferList(grpc::ServerContext *context, const proto::Empty *request, proto::SnifferListResponse *reply) override
Definition: service.cpp:160
grpc::Status RecordingList(grpc::ServerContext *context, const proto::RecordingListRequest *request, proto::RecordingListResponse *reply) override
Definition: service.cpp:635
grpc::Status AccessPointListIgnored(grpc::ServerContext *context, const proto::SnifferID *request, proto::APListResponse *reply) override
Definition: service.cpp:514
void shutdown()
Definition: service.cpp:102
grpc::Status FocusStop(grpc::ServerContext *context, const proto::SnifferID *request, proto::Empty *reply) override
Definition: service.cpp:596
grpc::Status AccessPointDeauth(grpc::ServerContext *context, const proto::APDeauthRequest *request, proto::Empty *reply) override
Definition: service.cpp:385
std::optional< uuid::UUIDv4 > add_iface_sniffer(const std::string &iface_name)
Definition: service.cpp:67
grpc::Status AccessPointGetHash(grpc::ServerContext *context, const proto::APGetHashRequest *request, proto::APGetHashResponse *reply) override
Definition: service.cpp:448
grpc::Status AccessPointGet(grpc::ServerContext *context, const proto::APGetRequest *request, proto::APGetResponse *reply) override
Definition: service.cpp:197
grpc::Status RecordingLoadDecrypted(grpc::ServerContext *context, const proto::RecordingLoadDecryptedRequest *request, grpc::ServerWriter< proto::Packet > *writer) override
Definition: service.cpp:649
grpc::Status FocusStart(grpc::ServerContext *context, const proto::FocusStartRequest *request, proto::FocusStartResponse *reply) override
Definition: service.cpp:557
grpc::Status FocusGetActive(grpc::ServerContext *context, const proto::SnifferID *request, proto::FocusGetActiveResponse *reply) override
Definition: service.cpp:578
std::optional< uuid::UUIDv4 > add_file_sniffer(const std::filesystem::path &file)
Definition: service.cpp:48
grpc::Status SnifferDestroy(grpc::ServerContext *context, const proto::SnifferID *request, proto::Empty *reply) override
Definition: service.cpp:148
grpc::Status AccessPointGetDeryptedStream(grpc::ServerContext *context, const proto::APGetDeryptedStreamRequest *request, grpc::ServerWriter< proto::Packet > *writer) override
Definition: service.cpp:344
grpc::Status AccessPointProvidePassword(grpc::ServerContext *context, const proto::APProvidePasswordRequest *request, proto::APProvidePasswordResponse *reply) override
Definition: service.cpp:304
grpc::Status AccessPointDeauthClient(grpc::ServerContext *context, const proto::APDeauthClientRequest *request, proto::Empty *reply) override
Definition: service.cpp:417
grpc::Status NetworkInterfaceList(grpc::ServerContext *context, const proto::Empty *request, proto::NetworkInterfaceListResponse *reply) override
Definition: service.cpp:677
grpc::Status LogGetStream(grpc::ServerContext *context, const proto::Empty *request, grpc::ServerWriter< proto::LogEntry > *writer) override
Definition: service.cpp:686
grpc::Status AccessPointIgnore(grpc::ServerContext *context, const proto::APIgnoreRequest *request, proto::Empty *reply) override
Definition: service.cpp:484
grpc::Status AccessPointList(grpc::ServerContext *context, const proto::SnifferID *request, proto::APListResponse *reply) override
Definition: service.cpp:180
grpc::Status RecordingCreate(grpc::ServerContext *context, const proto::RecordingCreateRequest *request, proto::RecordingCreateResponse *reply) override
Definition: service.cpp:614
grpc::Status AccessPointCreateRecording(grpc::ServerContext *context, const proto::APCreateRecordingRequest *request, proto::APCreateRecordingResponse *reply) override
Definition: service.cpp:530
static MACAddress NoAddress
Definition: sniffer.h:27
Definition: access_point.cpp:22
Tins::HWAddress< 6 > MACAddress
Definition: decrypter.h:20