summaryrefslogtreecommitdiff
path: root/src/osfp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/osfp.h')
-rw-r--r--src/osfp.h58
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