mirror of
https://github.com/vel21ripn/nDPI.git
synced 2026-05-06 03:45:32 +00:00
Implemented DHCP field 55 decode
This commit is contained in:
parent
4176fd5068
commit
d6f7dd9c08
2 changed files with 22 additions and 7 deletions
|
|
@ -908,6 +908,8 @@ struct ndpi_detection_module_struct {
|
|||
direction_detect_disable:1; /* disable internal detection of packet direction */
|
||||
};
|
||||
|
||||
#define dhcp_fingerprint host_server_name
|
||||
|
||||
struct ndpi_flow_struct {
|
||||
u_int16_t detected_protocol_stack[NDPI_PROTOCOL_SIZE];
|
||||
#ifndef WIN32
|
||||
|
|
@ -946,7 +948,7 @@ struct ndpi_flow_struct {
|
|||
*/
|
||||
struct ndpi_id_struct *server_id;
|
||||
/* HTTP host or DNS query */
|
||||
u_char host_server_name[256];
|
||||
u_char host_server_name[256]; /* Shared with dhcp_fingerprint */
|
||||
/* Via HTTP User-Agent */
|
||||
u_char detected_os[32];
|
||||
/* Via HTTP X-Forwarded-For */
|
||||
|
|
|
|||
|
|
@ -78,24 +78,36 @@ void ndpi_search_dhcp_udp(struct ndpi_detection_module_struct *ndpi_struct, stru
|
|||
|
||||
while(i < DHCP_VEND_LEN) {
|
||||
u_int8_t id = dhcp->options[i];
|
||||
if(id == 0xFF) break;
|
||||
|
||||
if(id == 0xFF)
|
||||
break;
|
||||
else {
|
||||
u_int8_t len = dhcp->options[i+1];
|
||||
|
||||
|
||||
if(len == 0) break;
|
||||
|
||||
|
||||
#ifdef DHCP_DEBUG
|
||||
printf("[DHCP] Id=%d [len=%d]\n", id, len);
|
||||
#endif
|
||||
|
||||
|
||||
if(id == 53 /* DHCP Message Type */) {
|
||||
u_int8_t msg_type = dhcp->options[i+2];
|
||||
|
||||
|
||||
if(msg_type <= 8) foundValidMsgType = 1;
|
||||
} else if(id == 55 /* Parameter Request List / Fingerprint */) {
|
||||
u_int idx, offset = 0,
|
||||
hex_len = ndpi_min(len * 2, sizeof(flow->dhcp_fingerprint));
|
||||
|
||||
for(idx=0; idx<len; idx++) {
|
||||
snprintf((char*)&flow->dhcp_fingerprint[offset],
|
||||
sizeof(flow->dhcp_fingerprint)-offset-1,
|
||||
"%02X", dhcp->options[i+2+idx] & 0xFF);
|
||||
offset += 2;
|
||||
}
|
||||
} else if(id == 12 /* Host Name */) {
|
||||
char *name = (char*)&dhcp->options[i+2];
|
||||
int j = 0;
|
||||
|
||||
|
||||
#ifdef DHCP_DEBUG
|
||||
printf("[DHCP] ");
|
||||
while(j < len) { printf("%c", name[j]); j++; }
|
||||
|
|
@ -105,6 +117,7 @@ void ndpi_search_dhcp_udp(struct ndpi_detection_module_struct *ndpi_struct, stru
|
|||
strncpy((char*)flow->host_server_name, name, j);
|
||||
flow->host_server_name[j] = '\0';
|
||||
}
|
||||
|
||||
i += len + 2;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue