76 lines
2.1 KiB
C
76 lines
2.1 KiB
C
#ifndef __OSFP_FINGERPRINT_H__
|
|
#define __OSFP_FINGERPRINT_H__
|
|
|
|
#define OSFP_FINGERPRINT_VALUE_BUFFER_MAX 128
|
|
|
|
enum osfp_field_id {
|
|
OSFP_FIELD_IP_ID,
|
|
OSFP_FIELD_IP_TOS,
|
|
OSFP_FIELD_IP_TOTAL_LENGTH,
|
|
OSFP_FIELD_IP_TTL,
|
|
OSFP_FIELD_TCP_OFF,
|
|
OSFP_FIELD_TCP_TIMESTAMP,
|
|
OSFP_FIELD_TCP_TIMESTAMP_ECHO_REPLY,
|
|
OSFP_FIELD_TCP_WINDOW_SCALING,
|
|
OSFP_FIELD_TCP_WINDOW_SIZE,
|
|
OSFP_FIELD_TCP_FLAGS,
|
|
OSFP_FIELD_TCP_MSS,
|
|
OSFP_FIELD_TCP_OPTIONS,
|
|
OSFP_FIELD_TCP_OPTIONS_ORDERED,
|
|
OSFP_FIELD_OS,
|
|
OSFP_FIELD_MAX,
|
|
};
|
|
|
|
enum osfp_field_type {
|
|
OSFP_FIELD_TYPE_UNKNOWN,
|
|
OSFP_FIELD_TYPE_UINT,
|
|
OSFP_FIELD_TYPE_STRING,
|
|
OSFP_FIELD_TYPE_MAX
|
|
};
|
|
|
|
struct osfp_fingerprint_field {
|
|
const char *name;
|
|
unsigned int enabled;
|
|
unsigned int type;
|
|
unsigned int importance;
|
|
void *value;
|
|
unsigned int value_len;
|
|
};
|
|
|
|
struct osfp_fingerprint {
|
|
struct osfp_fingerprint_field fields[OSFP_FIELD_MAX];
|
|
char value_buffer[OSFP_FINGERPRINT_VALUE_BUFFER_MAX];
|
|
unsigned int value_buffer_used;
|
|
};
|
|
|
|
extern struct osfp_fingerprint_field fp_fields[OSFP_FIELD_MAX];
|
|
|
|
static inline unsigned int osfp_fingerprint_get_field_enabled(enum osfp_field_id field_id)
|
|
{
|
|
return fp_fields[field_id].enabled;
|
|
}
|
|
|
|
static inline unsigned int osfp_fingerprint_get_field_importance(enum osfp_field_id field_id)
|
|
{
|
|
return fp_fields[field_id].importance;
|
|
}
|
|
|
|
static inline const char *osfp_fingerprint_get_field_name(enum osfp_field_id field_id)
|
|
{
|
|
return fp_fields[field_id].name;
|
|
}
|
|
|
|
static inline unsigned int osfp_fingerprint_get_field_type(enum osfp_field_id field_id)
|
|
{
|
|
return fp_fields[field_id].type;
|
|
}
|
|
|
|
int osfp_fingerprint_from_json(struct osfp_fingerprint *fp, char *json_str);
|
|
int osfp_fingerprint_to_json_buf(struct osfp_fingerprint *fp, char *strbuf, unsigned int buf_len, unsigned int format);
|
|
int osfp_fingerprinting(unsigned char *iph, unsigned char *tcph, unsigned int tcph_len, struct osfp_fingerprint *fp, unsigned int ip_version);
|
|
|
|
int test_osfp_fingerprinting_ipv4(void);
|
|
int test_osfp_fingerprinting_ipv6(void);
|
|
int test_osfp_fingerprinting_tcp_option(void);
|
|
#endif
|