summaryrefslogtreecommitdiff
path: root/src/MESA_osfp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/MESA_osfp.h')
-rw-r--r--src/MESA_osfp.h92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/MESA_osfp.h b/src/MESA_osfp.h
new file mode 100644
index 0000000..af62d8f
--- /dev/null
+++ b/src/MESA_osfp.h
@@ -0,0 +1,92 @@
+#ifndef __OSFP_H__
+#define __OSFP_H__
+
+#include <stddef.h>
+#include <netinet/in.h>
+#include <netinet/ip.h>
+#include <netinet/ip6.h>
+#include <netinet/tcp.h>
+#include <linux/if_ether.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+struct osfp_result_detail;
+struct osfp_result;
+struct osfp_db;
+
+/**
+ * @brief 创建一个新的操作系统指纹库。
+ *
+ * @param db_json_path 操作系统指纹库 JSON 文件的路径。
+ * @return 指向新创建的操作系统指纹库的指针。
+ */
+struct osfp_db *MESA_osfp_db_new(const char *db_json_path);
+
+/**
+ * @brief 释放操作系统指纹库占用的内存。
+ *
+ * @param db 指向要释放的操作系统指纹库的指针。
+ */
+void MESA_osfp_db_free(struct osfp_db *db);
+
+/**
+ * @brief 通过 IPv4 头部和 TCP 头部识别操作系统。
+ *
+ * @param db 操作系统指纹库。
+ * @param l3_hdr 指向 IPv4 头部的指针。
+ * @param l4_hdr 指向 TCP 头部的指针。
+ * @param l4_hdr_len TCP 头部的长度(注意:包含TCP选项部分)。
+ * @return 指向操作系统识别结果的指针。
+ */
+struct osfp_result *MESA_osfp_ipv4_identify(struct osfp_db *db, struct iphdr* l3_hdr, struct tcphdr *l4_hdr, size_t l4_hdr_len);
+
+/**
+ * @brief 通过 IPv6 头部和 TCP 头部识别操作系统。
+ *
+ * @param db 操作系统指纹库。
+ * @param l3_hdr 指向 IPv6 头部的指针。
+ * @param l4_hdr 指向 TCP 头部的指针。
+ * @param l4_hdr_len TCP 头部的长度(注意:包含TCP选项部分)。
+ * @return 指向操作系统识别结果的指针(注意:内存需要使用者释放)。
+ */
+struct osfp_result *MESA_osfp_ipv6_identify(struct osfp_db *db, struct ip6_hdr* l3_hdr, struct tcphdr *l4_hdr, size_t l4_hdr_len);
+
+/**
+ * @brief 通过 json 格式的指纹识别操作系统。
+ *
+ * @param db 操作系统指纹库。
+ * @param json_str 指纹字符串。
+ * @return 指向操作系统识别结果的指针(注意:内存需要使用者释放)。
+ */
+struct osfp_result *MESA_osfp_json_identify(struct osfp_db *db, const char *json_str);
+
+/**
+ * @brief 获取操作系统识别结果的操作系统名称。
+ *
+ * @param result 操作系统识别结果。
+ * @return 指向操作系统名称的常量字符指针(注意:这块内存将由osfp_result_free释放)。
+ */
+const char *MESA_osfp_result_os_name_get(struct osfp_result *result);
+
+/**
+ * @brief 导出操作系统识别结果的得分详情。
+ *
+ * @param result 操作系统识别结果。
+ * @return 指向得分详情字符串的指针(注意:内存需要使用者释放)。
+ */
+char *MESA_osfp_result_score_detail_export(struct osfp_result *result);
+
+/**
+ * @brief 释放操作系统识别结果占用的内存。
+ *
+ * @param result 操作系统识别结果。
+ */
+void MESA_osfp_result_free(struct osfp_result *result);
+
+#ifdef __cplusplus
+}
+#endif
+#endif