Hi, I made several modifications to the latest source code of nfdump (1.6.14-b1) to include support for PaloAlto netflow v9 extensions for userid and appid.
I expect that can be of use to people with palo alto firewalls. Attached is a diff with the modifications that I made to the code. Best Regards, Jose -- Jose Manuel Agudo Cuesta (SI-CPD) Unidad de Redes - Seguridad Telf. +34-923-294400 Ext 1398 Fax +34-923-294594 Edificio Facultad de Derecho Pza. Universidad de Bolonia s/n 37007 SALAMANCA - ESPAÑA (SPAIN)
diff -c nfdump-1.6.14-b1/bin/netflow_v9.c nfdump-1.6.14-b1-pan/bin/netflow_v9.c *** nfdump-1.6.14-b1/bin/netflow_v9.c 2015-10-03 16:05:30.000000000 +0200 --- nfdump-1.6.14-b1-pan/bin/netflow_v9.c 2015-10-28 10:02:01.000000000 +0100 *************** *** 123,128 **** --- 123,130 ---- #define zero64 24 #define zero96 25 #define zero128 26 + #define move_appid_32 27 + #define move_userid_64 28 uint32_t id; // sequence ID as defined above uint16_t input_offset; // copy/process data at this input offset *************** *** 357,362 **** --- 359,368 ---- { NF9_NPROBE_SERVER_NW_DELAY_SEC, "NPROBE server lat sec", _4bytes, _8bytes, move_slatency, nop, EX_LATENCY }, { NF9_NPROBE_APPL_LATENCY_SEC, "NPROBE appl lat sec", _4bytes, _8bytes, move_slatency, nop, EX_LATENCY }, + // Palo Alto Firewall Extension + { NF9_PAN_APPID, "Palo Alto Firewall App-ID", _32bytes, _32bytes, move_appid_32, zero32, EX_PAN_APPID }, + { NF9_PAN_USERID, "Palo Alto Firewall User-ID", _64bytes, _64bytes, move_userid_64, zero32, EX_PAN_USERID }, + {0, "NULL", 0, 0} }; *************** *** 1040,1045 **** --- 1046,1057 ---- case EX_NSEL_USER_MAX: PushSequence( table, NF_F_USERNAME, &offset, NULL, 0); break; + case EX_PAN_APPID: + PushSequence( table, NF9_PAN_APPID, &offset, NULL, 0); + break; + case EX_PAN_USERID: + PushSequence( table, NF9_PAN_USERID, &offset, NULL, 0); + break; case EX_NEL_COMMON: PushSequence( table, NF_N_NAT_EVENT, &offset, NULL, 0); offset += 3; *************** *** 1699,1704 **** --- 1711,1724 ---- memcpy((void *)&out[output_offset],(void *)&in[input_offset],65); out[output_offset+65] = 0; // trailing 0 for string break; + case move_appid_32: + memcpy((void *)&out[output_offset],(void *)&in[input_offset],32); + out[output_offset+32] = 0; // trailing 0 for string + break; + case move_userid_64: + memcpy((void *)&out[output_offset],(void *)&in[input_offset],64); + out[output_offset+64] = 0; // trailing 0 for string + break; case TimeMsec: { uint64_t DateMiliseconds = Get_val64((void *)&in[input_offset]); *(uint64_t *)stack = DateMiliseconds; diff -c nfdump-1.6.14-b1/bin/netflow_v9.h nfdump-1.6.14-b1-pan/bin/netflow_v9.h *** nfdump-1.6.14-b1/bin/netflow_v9.h 2015-10-03 16:05:30.000000000 +0200 --- nfdump-1.6.14-b1-pan/bin/netflow_v9.h 2015-10-22 13:53:59.000000000 +0200 *************** *** 164,169 **** --- 164,171 ---- #define _16bytes 16 #define _20bytes 20 #define _24bytes 24 + #define _32bytes 32 + #define _64bytes 64 #define _65bytes 65 #define _72bytes 72 *************** *** 297,302 **** --- 299,308 ---- #define NF9_NPROBE_APPL_LATENCY_SEC 57558 #define NF9_NPROBE_APPL_LATENCY_USEC 57559 + // Palo Alto Firewall + #define NF9_PAN_APPID 56701 + #define NF9_PAN_USERID 56702 + /* prototypes */ int Init_v9(void); diff -c nfdump-1.6.14-b1/bin/nf_common.c nfdump-1.6.14-b1-pan/bin/nf_common.c *** nfdump-1.6.14-b1/bin/nf_common.c 2015-10-03 16:05:30.000000000 +0200 --- nfdump-1.6.14-b1-pan/bin/nf_common.c 2015-10-26 12:48:08.000000000 +0100 *************** *** 220,225 **** --- 220,229 ---- static void String_ExpSysID(master_record_t *r, char *string); + static void String_AppID(master_record_t *r, char *string); + + static void String_UserID(master_record_t *r, char *string); + #ifdef NSEL static void String_EventTime(master_record_t *r, char *string); *************** *** 375,380 **** --- 379,389 ---- { "%sl", 0, "S latency", String_ServerLatency }, // server latency { "%al", 0, "A latency", String_AppLatency }, // app latency + // Palo Alto Firewall + { "%userid", 0, "User-ID", String_UserID }, // User-ID + { "%appid", 0, "App-ID", String_AppID }, // App-ID + + { NULL, 0, NULL, NULL } }; *************** *** 1074,1079 **** --- 1083,1104 ---- _s = data_string + _slen; slen = STRINGSIZE - _slen; break; + case EX_PAN_APPID: + snprintf(_s, slen-1, + " App ID = %s\n" + , r->appid[0] ? r->appid : " <empty>"); + _slen = strlen(data_string); + _s = data_string + _slen; + slen = STRINGSIZE - _slen; + break; + case EX_PAN_USERID: + snprintf(_s, slen-1, + " User ID = %s\n" + , r->userid[0] ? r->userid : " <empty>"); + _slen = strlen(data_string); + _s = data_string + _slen; + slen = STRINGSIZE - _slen; + break; #ifdef NSEL case EX_NSEL_COMMON: { char *event = "UNKNOWN"; *************** *** 2883,2887 **** --- 2908,2933 ---- } // End of String_PortBlockSize + static void String_UserID(master_record_t *r, char *string) { + + if ( r->userid[0] == '\0' ) + snprintf(string, MAX_STRING_LENGTH-1 ,"%s", "<empty>"); + else + snprintf(string, MAX_STRING_LENGTH-1 ,"%s", r->userid); + + string[MAX_STRING_LENGTH-1] = '\0'; + + } // End of String_UserID + + static void String_AppID(master_record_t *r, char *string) { + + if ( r->appid[0] == '\0' ) + snprintf(string, MAX_STRING_LENGTH-1 ,"%s", "<empty>"); + else + snprintf(string, MAX_STRING_LENGTH-1 ,"%s", r->appid); + + string[MAX_STRING_LENGTH-1] = '\0'; + + } // End of String_AppID #endif diff -c nfdump-1.6.14-b1/bin/nffile.h nfdump-1.6.14-b1-pan/bin/nffile.h *** nfdump-1.6.14-b1/bin/nffile.h 2015-10-03 16:05:30.000000000 +0200 --- nfdump-1.6.14-b1-pan/bin/nffile.h 2015-10-23 12:56:54.000000000 +0200 *************** *** 1177,1182 **** --- 1177,1227 ---- #define EX_NEL_RESERVED_1 49 + /* + * Palo Alto Firewall App-ID + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 0 | APPID(56701) | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 1 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 2 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 3 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + */ + #define EX_PAN_APPID 50 + typedef struct tpl_ext_50_s { + char appid[32]; + uint8_t data[4]; // points to further data + } tpl_ext_50_t; + + + /* + * Palo Alto Firewall User-ID + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 0 | USERID(56702) | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 1 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 2 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 3 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 4 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 5 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 6 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + * | 7 | | + * +----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + */ + #define EX_PAN_USERID 51 + typedef struct tpl_ext_51_s { + char userid[64]; + uint8_t data[4]; // points to further data + } tpl_ext_51_t; + /* * *************** *** 2070,2075 **** --- 2115,2128 ---- * - the extension map must be updated accordingly */ + #define OffsetAppID (offsetof(master_record_t, appid) >> 3) + char appid[32]; + + #define OffsetUserID (offsetof(master_record_t, userid) >> 3) + char userid[64]; + + + #ifdef USER_EXTENSION_1 uint64_t u64_1; # define Offset_BASE_U1 offsetof(master_record_t, u64_1) diff -c nfdump-1.6.14-b1/bin/nffile_inline.c nfdump-1.6.14-b1-pan/bin/nffile_inline.c *** nfdump-1.6.14-b1/bin/nffile_inline.c 2015-10-03 16:05:30.000000000 +0200 --- nfdump-1.6.14-b1-pan/bin/nffile_inline.c 2015-10-26 12:55:34.000000000 +0100 *************** *** 367,372 **** --- 367,384 ---- output_record->appl_latency_usec = tpl->appl_latency_usec; p = (void *)tpl->data; } break; + case EX_PAN_APPID: { + tpl_ext_50_t *tpl = (tpl_ext_50_t *)p; + strncpy((void *)output_record->appid, (void *)tpl->appid, sizeof(output_record->appid)); + output_record->appid[sizeof(output_record->appid)-1] = '\0'; // safety 0 + p = (void *)tpl->data; + } break; + case EX_PAN_USERID: { + tpl_ext_51_t *tpl = (tpl_ext_51_t *)p; + strncpy((void *)output_record->userid, (void *)tpl->userid, sizeof(output_record->userid)); + output_record->userid[sizeof(output_record->userid)-1] = '\0'; // safety 0 + p = (void *)tpl->data; + } break; case EX_RECEIVED: { tpl_ext_27_t *tpl = (tpl_ext_27_t *)p; value64_t v; *************** *** 730,735 **** --- 742,759 ---- tpl->bgpPrevAdjacentAS = master_record->bgpPrevAdjacentAS; p = (void *)tpl->data; } break; + case EX_PAN_APPID: { + tpl_ext_50_t *tpl = (tpl_ext_50_t *)p; + strncpy((void *)tpl->appid, (void *)master_record->appid, sizeof(tpl->appid)); + tpl->appid[sizeof(tpl->appid)-1] = '\0'; // safety 0 + p = (void *)tpl->data; + } break; + case EX_PAN_USERID: { + tpl_ext_51_t *tpl = (tpl_ext_51_t *)p; + strncpy((void *)tpl->userid, (void *)master_record->userid, sizeof(tpl->userid)); + tpl->userid[sizeof(tpl->userid)-1] = '\0'; // safety 0 + p = (void *)tpl->data; + } break; case EX_RECEIVED: { tpl_ext_27_t *tpl = (tpl_ext_27_t *)p; tpl->received = master_record->received; diff -c nfdump-1.6.14-b1/bin/nfx.c nfdump-1.6.14-b1-pan/bin/nfx.c *** nfdump-1.6.14-b1/bin/nfx.c 2015-10-03 16:05:30.000000000 +0200 --- nfdump-1.6.14-b1-pan/bin/nfx.c 2015-10-27 13:55:10.000000000 +0100 *************** *** 126,138 **** // nprobe extensions { EX_LATENCY, 24, 64, 0, "nprobe latency"}, ! // NAT - Network Event Logging { EX_NEL_COMMON, 12, 31, 0, "NEL Common block"}, { EX_NEL_GLOBAL_IP_v4, 0, 0, 0, "Compat NEL IPv4"}, { EX_PORT_BLOCK_ALLOC, 8, 32, 0, "NAT Port Block Allocation"}, { EX_NEL_RESERVED_1, 0, 0, 0, NULL}, // last entry { 0, 0, 0, 0, NULL } }; --- 126,142 ---- // nprobe extensions { EX_LATENCY, 24, 64, 0, "nprobe latency"}, ! // NAT - Network Event Logging { EX_NEL_COMMON, 12, 31, 0, "NEL Common block"}, { EX_NEL_GLOBAL_IP_v4, 0, 0, 0, "Compat NEL IPv4"}, { EX_PORT_BLOCK_ALLOC, 8, 32, 0, "NAT Port Block Allocation"}, { EX_NEL_RESERVED_1, 0, 0, 0, NULL}, + // Palo Alto Firewall + { EX_PAN_APPID, 32, 65, 0, "Palo Alto App-ID"}, + { EX_PAN_USERID, 64, 66, 0, "Palo Alto User-ID"}, + // last entry { 0, 0, 0, 0, NULL } };
------------------------------------------------------------------------------
_______________________________________________ Nfdump-discuss mailing list Nfdump-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/nfdump-discuss