Implemented DHCP field 55 decode

This commit is contained in:
Luca Deri 2017-09-17 21:25:55 +02:00
parent 4176fd5068
commit d6f7dd9c08
2 changed files with 22 additions and 7 deletions

View file

@ -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 */

View file

@ -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;
}
}