From 5ac2995b2d4e4932e3d6ab2fa1879bef66d3c490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=88=D0=B5=20=D0=98=D0=BC=D1=8F?= Date: Wed, 8 Oct 2025 18:27:02 +0400 Subject: [PATCH] feat(packet-sniffer): add CLI options for IP filtering and masking --- src/cli/packet_sniffer_cli.cpp | 30 ++++++++++++++++++++++++++++++ src/cli/packet_sniffer_cli.hpp | 19 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/cli/packet_sniffer_cli.cpp create mode 100644 src/cli/packet_sniffer_cli.hpp diff --git a/src/cli/packet_sniffer_cli.cpp b/src/cli/packet_sniffer_cli.cpp new file mode 100644 index 0000000..5604753 --- /dev/null +++ b/src/cli/packet_sniffer_cli.cpp @@ -0,0 +1,30 @@ +#include "packet_sniffer_cli.hpp" +#include + +PacketSnifferCli::PacketSnifferCli() + : CliBase("Packet Sniffer Options") + , ip_("") +{ +} + +void PacketSnifferCli::setupOptions() +{ + // clang-format off + desc_.add_options() + ("help,h", "Show help") + ("ip,H", withDefault(ip_, ""), "Local IPv4 to sniff (e.g. 192.168.1.42)") + ("mask,m", boost::program_options::value()->default_value(false)->implicit_value(true), + "Mask IP addresses in output (demo)"); + // clang-format on +} + +std::string PacketSnifferCli::getIp() const +{ + return vm_.at("ip").as(); +} + +bool PacketSnifferCli::isMaskEnabled() const +{ + const auto it = vm_.find("mask"); + return (it != vm_.end()) ? it->second.as() : false; +} diff --git a/src/cli/packet_sniffer_cli.hpp b/src/cli/packet_sniffer_cli.hpp new file mode 100644 index 0000000..4fa36d9 --- /dev/null +++ b/src/cli/packet_sniffer_cli.hpp @@ -0,0 +1,19 @@ +#pragma once +#include "cli_base.hpp" +#include "option_utils.hpp" +#include + +class PacketSnifferCli : public CliBase, protected OptionUtils +{ + public: + PacketSnifferCli(); + + std::string getIp() const; + bool isMaskEnabled() const; + + protected: + void setupOptions() override; + + private: + std::string ip_; +};