diff options
Diffstat (limited to 'src/osfp.h')
| -rw-r--r-- | src/osfp.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/osfp.h b/src/osfp.h new file mode 100644 index 0000000..afe629c --- /dev/null +++ b/src/osfp.h @@ -0,0 +1,58 @@ +#ifndef __OSFP_H__ +#define __OSFP_H__ + +#include <stddef.h> +#include <linux/in.h> +#include <linux/if_ether.h> +#include <linux/ip.h> +#include <linux/ipv6.h> +#include <linux/tcp.h> + +#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 |
