#include "src/PortScanner.hpp" #include namespace po = boost::program_options; int main(int argc, char* argv[]) { po::options_description desc("Allowed options"); desc.add_options()("help,h", "produce help message")( "dname,i", po::value()->default_value("127.0.0.1"), "set domain name or IP address")("ports,p", po::value()->default_value("1-1024"), "set a port range from 1 to n")( "threads,t", po::value()->default_value(100), "max concurrent threads")( "expiry_time,e", po::value()->default_value(2)->value_name("sec"), "timeout in seconds")("verbose,v", "verbose output"); po::variables_map vm; po::store(po::parse_command_line(argc, argv, desc), vm); po::notify(vm); if (vm.count("help")) { std::cout << desc << "\n"; std::cout << "Examples:\n" << " Scan common ports on localhost:\n" << " ./port_scanner -i 127.0.0.1 -p 1-1024\n\n" << " Full TCP port scan:\n" << " ./port_scanner -i 192.168.1.1 -p 65535 -t 200\n\n" << " Scan with custom timeout:\n" << " ./port_scanner -i example.com -p 80-443 -e 5\n\n" << " Postscriptum:\n" << " Scan only systems you own or have explicit permission to test.\n"; return 0; } std::string ip = vm["dname"].as(); std::string port = vm["ports"].as(); int threads = vm["threads"].as(); uint8_t expiry_time = vm["expiry_time"].as(); PortScanner scanner; scanner.set_options(ip, port, threads, expiry_time); scanner.start(); scanner.run(); return 0; }