This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
zhuzhenjun-libosfp/src/osfp.h

131 lines
4.1 KiB
C
Raw Normal View History

2023-09-27 11:45:26 +08:00
#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>
2023-10-09 15:23:31 +08:00
/**
* @brief
*/
2023-09-27 11:45:26 +08:00
#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"
2023-10-09 15:23:31 +08:00
/**
* @brief
*/
2023-09-27 11:45:26 +08:00
enum osfp_os_class_id {
2023-10-09 15:23:31 +08:00
OSFP_OS_CLASS_UNKNOWN, // 未知
OSFP_OS_CLASS_WINDOWS, // Windows
OSFP_OS_CLASS_LINUX, // Linux
OSFP_OS_CLASS_MAC_OS, // Mac OS
OSFP_OS_CLASS_IOS, // iOS
OSFP_OS_CLASS_ANDROID, // Android
OSFP_OS_CLASS_OTHERS, // 其他
2023-09-27 11:45:26 +08:00
OSFP_OS_CLASS_MAX,
};
2023-10-09 15:23:31 +08:00
/**
* @brief osfp_result
*/
struct osfp_result_detail {
unsigned int score; // 得分
unsigned int possibility; // 可能性
2023-09-27 11:45:26 +08:00
};
2023-10-09 15:23:31 +08:00
/**
* @brief
*/
2023-09-27 11:45:26 +08:00
struct osfp_result {
2023-10-09 15:23:31 +08:00
char *json_str; // JSON 字符串
enum osfp_os_class_id likely_os_class; // 最可能的操作系统类别
struct osfp_result_detail details[OSFP_OS_CLASS_MAX]; // 详细结果数组
2023-09-27 11:45:26 +08:00
};
2023-10-09 15:23:31 +08:00
/**
* @brief
*/
2023-09-27 11:45:26 +08:00
struct osfp_db {
2023-10-09 15:23:31 +08:00
char *db_json_path; // 操作系统指纹库 JSON 文件路径
void *score_db; // 分数数据库指针
2023-09-27 11:45:26 +08:00
};
2023-10-09 15:23:31 +08:00
/**
* @brief
*
* @param db_json_path JSON
* @return
*/
2023-09-27 11:45:26 +08:00
struct osfp_db *osfp_db_new(const char *db_json_path);
2023-10-09 15:23:31 +08:00
/**
* @brief
*
* @param db
*/
2023-09-27 11:45:26 +08:00
void osfp_db_free(struct osfp_db *db);
2023-10-09 15:23:31 +08:00
/**
* @brief IPv4 TCP
*
* @param db
* @param l3_hdr IPv4
* @param l4_hdr TCP
* @param l4_hdr_len TCP TCP选项部分
* @return
*/
2023-09-27 11:45:26 +08:00
struct osfp_result *osfp_ipv4_identify(struct osfp_db *db, struct iphdr* l3_hdr, struct tcphdr *l4_hdr, size_t l4_hdr_len);
2023-10-09 15:23:31 +08:00
/**
* @brief IPv6 TCP
*
* @param db
* @param l3_hdr IPv6
* @param l4_hdr TCP
* @param l4_hdr_len TCP TCP选项部分
* @return 使
*/
2023-09-27 11:45:26 +08:00
struct osfp_result *osfp_ipv6_identify(struct osfp_db *db, struct ipv6hdr* l3_hdr, struct tcphdr *l4_hdr, size_t l4_hdr_len);
2023-10-09 15:23:31 +08:00
/**
* @brief json
*
* @param db
* @param json_str
* @return 使
*/
struct osfp_result *osfp_json_identify(struct osfp_db *db, const char *json_str);
/**
* @brief
*
* @param result
* @return osfp_result_free释放
*/
2023-09-27 11:45:26 +08:00
const char *osfp_result_os_name_get(struct osfp_result *result);
2023-10-09 15:23:31 +08:00
/**
* @brief
*
* @param result
* @return 使
*/
2023-09-27 11:45:26 +08:00
char *osfp_result_score_detail_export(struct osfp_result *result);
2023-10-09 15:23:31 +08:00
/**
* @brief
*
* @param result
*/
2023-09-27 11:45:26 +08:00
void osfp_result_free(struct osfp_result *result);
#endif