#include "attack_repertoire.h" #include "scan_repertoire.h" #include "active_attack.h" #include "active_scan.h" #include #include #include #ifndef PENTEST_STATE_H #define PENTEST_STATE_H //Only access through the syncronized functions below in a thread context struct pentest_state { pthread_mutex_t lock; char **targets; size_t num_targets; size_t max_targets; //active attacks (store pointers to be able to remove cleanly) struct active_attack **attacks; size_t num_attacks; size_t max_attacks; //ditto for scans struct active_scan **scans; size_t num_scans; size_t max_scans; //failed attacks struct past_attack *failed; size_t num_failed; size_t max_failed; //successful attacks struct past_attack *worked; size_t num_worked; size_t max_worked; //completed scans as they can't fail struct past_scan *done; size_t num_done; size_t max_done; }; //init/teardown void pentest_state_init(struct pentest_state *p_s, size_t max_targets, size_t max_attacks, size_t max_scans); void pentest_state_cleanup(struct pentest_state *p_s); //actions void pentest_state_add_target(struct pentest_state *p_s, char *target); void pentest_state_add_attack(struct pentest_state *p_s, struct active_attack *attack); void pentest_state_add_failed(struct pentest_state *p_s, char *a_p, char *target); void pentest_state_add_worked(struct pentest_state *p_s, char *a_p, char *target); void pentest_state_rem_attack(struct pentest_state *p_s, struct active_attack *attack); void pentest_state_rem_target(struct pentest_state *p_s, char *target); void pentest_state_add_scan(struct pentest_state *p_s, struct active_scan *scan); void pentest_state_add_done(struct pentest_state *p_s, char *scan, char *target); void pentest_state_rem_scan(struct pentest_state *p_s, struct active_scan *scan); void pentest_state_active_attack_update(struct pentest_state *p_s, struct active_attack *a_a); void pentest_state_active_scan_update(struct pentest_state *p_s, struct active_scan *a_s); //syncronized setters/getters size_t pentest_state_num_attacks(struct pentest_state *p_s); size_t pentest_state_max_attacks(struct pentest_state *p_s); size_t pentest_state_num_targets(struct pentest_state *p_s); size_t pentest_state_max_targets(struct pentest_state *p_s); size_t pentest_state_num_scans(struct pentest_state *p_s); size_t pentest_state_max_scans(struct pentest_state *p_s); size_t pentest_state_num_failed(struct pentest_state *p_s); size_t pentest_state_max_failed(struct pentest_state *p_s); size_t pentest_state_num_worked(struct pentest_state *p_s); size_t pentest_state_max_worked(struct pentest_state *p_s); //accessors char *pentest_state_get_target(struct pentest_state *p_s, size_t idx); struct active_attack *pentest_state_get_attack(struct pentest_state *p_s, size_t idx); struct active_scan *pentest_state_get_scan(struct pentest_state *p_s, size_t idx); //status functions bool pentest_active_target(struct pentest_state *p_s, char *target); bool pentest_exploited_target(struct pentest_state *p_s, char *target); bool pentest_attack_active(struct pentest_state *p_s, char *attack, char *target); bool pentest_attack_failed(struct pentest_state *p_s, char *attack, char *target); bool pentest_attack_worked(struct pentest_state *p_s, char *attack, char *target); bool pentest_scan_active(struct pentest_state *p_s, char *scan, char *target); bool pentest_scan_done(struct pentest_state *p_s, char *scan, char *target); #endif