#ifndef __OSFP_H__ #define __OSFP_H__ #include #include #include #include #include #include #define OSFP_OS_CLASS_NAME_UNKNOWN "Unknown" #define OSFP_OS_CLASS_NAME_WINDOWS "Windows" #define OSFP_OS_CLASS_NAME_LINUX "Linux" #define OSFP_OS_CLASS_NAME_MAC_OS "Mac OS" #define OSFP_OS_CLASS_NAME_IOS "iOS" #define OSFP_OS_CLASS_NAME_ANDROID "Android" #define OSFP_OS_CLASS_NAME_OTHERS "Others" enum osfp_os_class_id { OSFP_OS_CLASS_UNKNOWN, OSFP_OS_CLASS_WINDOWS, OSFP_OS_CLASS_LINUX, OSFP_OS_CLASS_MAC_OS, OSFP_OS_CLASS_IOS, OSFP_OS_CLASS_ANDROID, OSFP_OS_CLASS_OTHERS, OSFP_OS_CLASS_MAX, }; struct osfp_os_class_score { unsigned int scores[OSFP_OS_CLASS_MAX]; }; struct osfp_result { char *json_str; enum osfp_os_class_id likely_os_class; unsigned int likely_score; struct osfp_os_class_score detail; }; struct osfp_db { char *db_json_path; void *score_db; }; struct osfp_db *osfp_db_new(const char *db_json_path); void osfp_db_free(struct osfp_db *db); struct osfp_result *osfp_ipv4_identify(struct osfp_db *db, struct iphdr* l3_hdr, struct tcphdr *l4_hdr, size_t l4_hdr_len); struct osfp_result *osfp_ipv6_identify(struct osfp_db *db, struct ipv6hdr* l3_hdr, struct tcphdr *l4_hdr, size_t l4_hdr_len); const char *osfp_result_os_name_get(struct osfp_result *result); char *osfp_result_score_detail_export(struct osfp_result *result); void osfp_result_free(struct osfp_result *result); #endif