/* $Id: target.h,v 1.13 2005/06/23 11:53:50 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TARGET_H #define TARGET_H #include "xprobe.h" using namespace std; extern int h_errno; class Target_Net { private: unsigned long addr, mask, counter; char *ascii_name; int parse_mask(char *mask); int parse_host(char *host); int resolve_host(char *host); public: int init(char *target); unsigned long getnext(void); void reset(void) { counter = addr; }; Target_Net(void); Target_Net(char *target); ~Target_Net() { free(ascii_name); }; }; #define XPROBE_TTL_TCP_SYNACK 1 #define XPROBE_TTL_TCP_RST 2 #define XPROBE_TTL_ICMP_ECHO 3 #define XPROBE_TTL_ICMP_PUNR 4 class Port_Range { private: vector ports; u_int low, high, curr; public: void set_range(u_short, u_short); int get_next(u_short *); unsigned int size() { return (high - low + 1); } void reset(); }; class Signature { private: map key_val; string header; public: Signature(void) { header="fingerprint {\n\tOS_ID =\n\t#Entry inserted to the database by:\n" "\t#Entry contributed by:\n\t#Date:\n\t#Modified:\n"; } void append_sig(string key, string val) { key_val.insert(pair(key, val)); } void print_sig(void); string get_sig(int *); void signull(void) { key_val.clear(); } }; class Target { private: struct in_addr addr; long send_delay; // delay in microsecs when sending packs map tcp_ports; map udp_ports; map protocols; vector tcp_toscan; vector udp_toscan; map ttls; int distance; /* ttl sets it */ Xprobe::Timeval rtt; /* round-trip time */ Signature fingerprint; bool showroute, gen_sig; //void add_p(map &, int, char); void add_p(map *, int, char); //int find_stat_p(map &, char); int find_stat_p(map *, char); public: Target(void) { addr.s_addr = INADDR_NONE; gen_sig = showroute = false; send_delay = distance = 0; rtt = 0.0; } Target(struct in_addr a) { set_addr(a); gen_sig = showroute = false; send_delay = distance = 0; rtt = 0.0; } Target(unsigned long int a) { addr.s_addr = a; gen_sig = showroute = false; send_delay = distance = 0; rtt = 0.0; } void set_addr(struct in_addr a) { memcpy((void *)&addr, (void *)&a, sizeof(struct in_addr)); } struct in_addr get_addr(void) { return addr; } /* protocol, port, status */ void add_port(int , int , char ); /* protocol, status */ void add_protocol(int , char ); int get_port(int, int); struct in_addr get_interface_addr(void); char *get_interface(void); /* Scan_Engine interface */ int check_alive(void); int os_probe(void); void set_distance(int d) { distance = d; } int get_distance(void) { return distance; } void set_rtt(Xprobe::Timeval& t) { rtt = t; } Xprobe::Timeval& get_rtt(void) { return rtt; } void set_ttl(int, int); int get_ttl(int); void set_delay(long k) { send_delay = k; } long get_delay(void) { return send_delay; } bool show_route(void) { return showroute; } void show_route(bool sr) { showroute = sr; } void set_tcp_ports (map *tp); void set_udp_ports (map *up); void set_tcp_toscan(vector *tr) { tcp_toscan = *tr; } void set_udp_toscan(vector *ur) { udp_toscan = *ur; } vector *get_tcp_toscan() { return &tcp_toscan; } vector *get_udp_toscan() { return &udp_toscan; } int gather_info(void); void generate_sig(bool val) { gen_sig = val; } bool generate_sig(void) { return gen_sig; } string signature(void); void signature(string& key, string& val); void signature(const char *, const char *); void signull(void) { fingerprint.signull(); } bool port_is_open(int proto, int port); }; #endif /* TARGET_H */