📄 perf-base.c
字号:
* fraginserts/sec * fragdeletes/sec * fragflushes/sec * current-frags open (frag cache) * max-frags (frag cache) * fragtimeouts * fragfaults * num cpus (following triple is repeated for each CPU) * %user-cpu usage * %sys-cpu usage * %idle-cpu usage * mbits/sec (wire) * mbits/sec (ip fragmented) * mbits/sec (ip reassembled) * mbits/sec (tcp stream rebuilt) * mbits/sec (app layer) * Avg Bytes/Pkt (wire) * Avg Bytes/Pkt (ip fragmented) * Avg Bytes/Pkt (ip reassembled) * Avg Bytes/Pkt (tcp stream rebuilt) * Avg Bytes/Pkt (app layer) * K-Packets/Sec (wire) * K-Packets/Sec (ip fragmented) * K-Packets/Sec (ip reassembled) * K-Packets/Sec (tcp stream rebuilt) * K-Packets/Sec (app layer) * Pkts recieved * Pkts dropped * Blocked-KPackets (wire) * udp-sessions * max-udp-sessions * del-udp-sessions/sec (udp stream cache) * new-udp-sessions/sec (udp stream cache) * max-sessions, interval (tcp stream cache) * curr-tcp-sessions-initializing (tcp stream cache, of total-sessions open) * curr-tcp-sessions-established (tcp stream cache, of total-sessions open) * curr-tcp-sessions-closing (tcp stream cache, of total-sessions open) * tcp-sessions-mistream/sec (tcp stream cache, of new-sessions/sec) * tcp-sessions-closed/sec (tcp stream cache, of del-sessions/sec) * tcp-sessions-timedout/sec (tcp stream cache, of del-sessions/sec) * tcp-sessions-pruned/sec (tcp stream cache, of del-sessions/sec) * tcp-sessions-dropped_async/sec (tcp stream cache, of del-sessions/sec) * hosts in attribute table * attribute table reloads * */int LogBasePerfStats(SFBASE_STATS *sfBaseStats, FILE * fh ){ double sys=0.0,usr=0.0,idle=0.0;#ifdef LINUX_SMP int iCtr;#endif if( ! fh ) return 0; fprintf(fh,"%lu,%.3f,%.3f,%.3f,%.3f,%d,%.3f,", (unsigned long)sfBaseStats->time, sfBaseStats->pkt_drop_percent, sfBaseStats->wire_mbits_per_sec.realtime, sfBaseStats->alerts_per_second, sfBaseStats->kpackets_per_sec.realtime, sfBaseStats->avg_bytes_per_packet, sfBaseStats->patmatch_percent); /* Session estimation statistics */ fprintf(fh, "%.3f,%.3f,%.3f,%.3f," CSVu64 CSVu64, sfBaseStats->syns_per_second, sfBaseStats->synacks_per_second, sfBaseStats->new_sessions_per_second, sfBaseStats->deleted_sessions_per_second, sfBaseStats->total_sessions, sfBaseStats->max_sessions); fprintf(fh, "%.3f," CSVu64 CSVu64, sfBaseStats->stream_flushes_per_second, sfBaseStats->stream_faults, sfBaseStats->stream_timeouts); fprintf(fh, "%.3f,%.3f,%.3f,%.3f,%.3f,%.3f," CSVu64 CSVu64 CSVu64 CSVu64, sfBaseStats->frag_creates_per_second, sfBaseStats->frag_completes_per_second, sfBaseStats->frag_inserts_per_second, sfBaseStats->frag_deletes_per_second, sfBaseStats->frag_autofrees_per_second, sfBaseStats->frag_flushes_per_second, sfBaseStats->current_frags, sfBaseStats->max_frags, sfBaseStats->frag_timeouts, sfBaseStats->frag_faults); /* CPU STATS - at the end of output record */ #ifdef LINUX_SMP /* First the number of CPUs */ fprintf(fh, "%d,", sfBaseStats->sfProcPidStats->iCPUs); /* Next, stats for each CPU (a triple) */ for(iCtr = 0; iCtr < sfBaseStats->sfProcPidStats->iCPUs; iCtr++) { usr= sfBaseStats->sfProcPidStats->SysCPUs[iCtr].user; sys= sfBaseStats->sfProcPidStats->SysCPUs[iCtr].sys; idle= sfBaseStats->sfProcPidStats->SysCPUs[iCtr].idle; fprintf(fh,"%.3f,%.3f,%.3f,",usr,sys,idle); }#else usr=sfBaseStats->user_cpu_time; sys=sfBaseStats->system_cpu_time; idle=sfBaseStats->idle_cpu_time; /* 1 CPU hardcoded */ fprintf(fh,"1,%.3f,%.3f,%.3f,",usr,sys,idle);#endif /* Status for MBits/s, Bytes/Pkt, KPkts/s for each of * wire, IP Fragmented, IP Reassembled, Stream Reassembled, * App Layer (data that reaches protocol decoders). */ fprintf(fh,"%.3f,%.3f,%.3f,%.3f,%.3f,", sfBaseStats->wire_mbits_per_sec.realtime, sfBaseStats->ipfrag_mbits_per_sec.realtime, sfBaseStats->ipreass_mbits_per_sec.realtime, sfBaseStats->rebuilt_mbits_per_sec.realtime, sfBaseStats->mbits_per_sec.realtime); fprintf(fh,"%d,%d,%d,%d,%d,", sfBaseStats->avg_bytes_per_wire_packet, sfBaseStats->avg_bytes_per_ipfrag_packet, sfBaseStats->avg_bytes_per_ipreass_packet, sfBaseStats->avg_bytes_per_rebuilt_packet, sfBaseStats->avg_bytes_per_packet); fprintf(fh,"%.3f,%.3f,%.3f,%.3f,%.3f,", sfBaseStats->kpackets_wire_per_sec.realtime, sfBaseStats->kpackets_ipfrag_per_sec.realtime, sfBaseStats->kpackets_ipreass_per_sec.realtime, sfBaseStats->kpackets_rebuilt_per_sec.realtime, sfBaseStats->kpackets_per_sec.realtime); fprintf(fh, CSVu64,sfBaseStats->pkt_stats.pkts_recv); fprintf(fh, CSVu64, sfBaseStats->pkt_stats.pkts_drop); fprintf(fh, CSVu64, sfBaseStats->total_blocked_packets); fprintf(fh, "%.3f,%.3f," CSVu64 CSVu64, sfBaseStats->new_udp_sessions_per_second, sfBaseStats->deleted_udp_sessions_per_second, sfBaseStats->total_udp_sessions, sfBaseStats->max_udp_sessions); fprintf(fh, CSVu64 CSVu64 CSVu64 CSVu64 "%.3f,%.3f,%.3f,%.3f,%.3f,", sfBaseStats->max_tcp_sessions_interval, sfBaseStats->curr_tcp_sessions_initializing, sfBaseStats->curr_tcp_sessions_established, sfBaseStats->curr_tcp_sessions_closing, sfBaseStats->tcp_sessions_midstream_per_second, sfBaseStats->tcp_sessions_closed_per_second, sfBaseStats->tcp_sessions_timedout_per_second, sfBaseStats->tcp_sessions_pruned_per_second, sfBaseStats->tcp_sessions_dropped_async_per_second); fprintf(fh, CSVu64 CSVu64, sfBaseStats->current_attribute_hosts, sfBaseStats->attribute_table_reloads); fprintf(fh,"\n"); fflush(fh);#ifdef LINUX //LogScheduler();#endif return 0;}/*** NAME ** DisplayBasePerfStats** ** DESCRIPTION** Output Function. We can easily code multiple output buffers** because all that is received is a SFBASE_STATS struct which** holds all the information to output. This current output** function just prints to stdout.**** FORMAL INPUTS** SFBASE_STATS * - struct with perf information** int - flags for output**** FORMAL OUTPUTS** int - 0 is successful*/int DisplayBasePerfStatsConsole(SFBASE_STATS *sfBaseStats, int iFlags){#ifdef LINUX_SMP int iCtr;#endif LogMessage("\n\nSnort Realtime Performance : %s--------------------------\n", ctime(&sfBaseStats->time)); LogMessage("Pkts Recv: " STDu64 "\n", sfBaseStats->pkt_stats.pkts_recv); LogMessage("Pkts Drop: " STDu64 "\n", sfBaseStats->pkt_stats.pkts_drop); LogMessage("%% Dropped: %.3f%%\n", sfBaseStats->pkt_drop_percent); LogMessage("Blocked: " STDu64 "\n\n", sfBaseStats->total_blocked_packets); LogMessage("Mbits/Sec: %.3f (wire)\n", sfBaseStats->wire_mbits_per_sec.realtime); LogMessage("Mbits/Sec: %.3f (ip fragmented)\n", sfBaseStats->ipfrag_mbits_per_sec.realtime); LogMessage("Mbits/Sec: %.3f (ip reassembled)\n", sfBaseStats->ipreass_mbits_per_sec.realtime); LogMessage("Mbits/Sec: %.3f (tcp rebuilt)\n", sfBaseStats->rebuilt_mbits_per_sec.realtime); LogMessage("Mbits/Sec: %.3f (app layer)\n\n", sfBaseStats->mbits_per_sec.realtime); LogMessage("Bytes/Pkt: %d (wire)\n", sfBaseStats->avg_bytes_per_wire_packet); LogMessage("Bytes/Pkt: %d (ip fragmented)\n", sfBaseStats->avg_bytes_per_ipfrag_packet); LogMessage("Bytes/Pkt: %d (ip reassembled)\n", sfBaseStats->avg_bytes_per_ipreass_packet); LogMessage("Bytes/Pkt: %d (tcp rebuilt)\n", sfBaseStats->avg_bytes_per_rebuilt_packet); LogMessage("Bytes/Pkt: %d (app layer)\n\n", sfBaseStats->avg_bytes_per_packet); LogMessage("KPkts/Sec: %.3f (wire)\n", sfBaseStats->kpackets_wire_per_sec.realtime); LogMessage("KPkts/Sec: %.3f (ip fragmented)\n", sfBaseStats->kpackets_ipfrag_per_sec.realtime); LogMessage("KPkts/Sec: %.3f (ip reassembled)\n", sfBaseStats->kpackets_ipreass_per_sec.realtime); LogMessage("KPkts/Sec: %.3f (tcp rebuilt)\n", sfBaseStats->kpackets_rebuilt_per_sec.realtime); LogMessage("KPkts/Sec: %.3f (app layer)\n\n", sfBaseStats->kpackets_per_sec.realtime); LogMessage("PatMatch: %.3f%%\n\n", sfBaseStats->patmatch_percent); /* ** The following ifdefs are for CPU stats dealing with multiple ** CPUs in Linux. Snort will show user, system and idle time for ** each CPU. The methods of calculating this are different though, ** since getrusage is broken for multiple CPUs in Linux. We get the ** CPU stats instead from the proc filesystem on Linux. */#ifdef LINUX_SMP for(iCtr = 0; iCtr < sfBaseStats->sfProcPidStats->iCPUs; iCtr++) { LogMessage("CPU%d Usage: %.3f%% (user) %.3f%% (sys) %.3f%% (idle)\n", iCtr, sfBaseStats->sfProcPidStats->SysCPUs[iCtr].user, sfBaseStats->sfProcPidStats->SysCPUs[iCtr].sys, sfBaseStats->sfProcPidStats->SysCPUs[iCtr].idle); } printf("\n");#else LogMessage("CPU Usage: %.3f%% (user) %.3f%% (sys) %.3f%% (idle)\n\n", sfBaseStats->user_cpu_time, sfBaseStats->system_cpu_time, sfBaseStats->idle_cpu_time);#endif /* ** Shows the number of snort alerts per second. */ LogMessage("Alerts/Sec : %.3f\n", sfBaseStats->alerts_per_second); /* Session estimation statistics */ LogMessage("Syns/Sec : %.3f\n", sfBaseStats->syns_per_second); LogMessage("Syn-Acks/Sec : %.3f\n", sfBaseStats->synacks_per_second); LogMessage("New Cached Sessions/Sec: %.3f\n", sfBaseStats->new_sessions_per_second); LogMessage("Midstream Sessions/Sec : %.3f\n", sfBaseStats->tcp_sessions_midstream_per_second); LogMessage("Cached Sessions Del/Sec: %.3f\n", sfBaseStats->deleted_sessions_per_second); LogMessage("Closed Sessions/Sec : %.3f\n", sfBaseStats->tcp_sessions_closed_per_second); LogMessage("TimedOut Sessions/Sec : %.3f\n", sfBaseStats->tcp_sessions_timedout_per_second); LogMessage("Pruned Sessions/Sec : %.3f\n", sfBaseStats->tcp_sessions_pruned_per_second); LogMessage("Dropped Async Ssns/Sec : %.3f\n", sfBaseStats->tcp_sessions_dropped_async_per_second); LogMessage("Current Cached Sessions: " STDu64 "\n", sfBaseStats->total_sessions); LogMessage("Sessions Initializing : " STDu64 "\n", sfBaseStats->curr_tcp_sessions_initializing); LogMessage("Sessions Established : " STDu64 "\n", sfBaseStats->curr_tcp_sessions_established); LogMessage("Sessions Closing : " STDu64 "\n", sfBaseStats->curr_tcp_sessions_closing); LogMessage("Max Cached Sessions : " STDu64 "\n", sfBaseStats->max_sessions); LogMessage("Max Sessions (interval): " STDu64 "\n", sfBaseStats->max_tcp_sessions_interval); /* more instrumentation for stream4/frag2 */ LogMessage("Stream Flushes/Sec : %.3f\n", sfBaseStats->stream_flushes_per_second); LogMessage("Stream Cache Faults/Sec: " STDu64 "\n", sfBaseStats->stream_faults); LogMessage("Stream Cache Timeouts : " STDu64 "\n", sfBaseStats->stream_timeouts); LogMessage("Frag Creates()s/Sec : %.3f\n", sfBaseStats->frag_creates_per_second); LogMessage("Frag Completes()s/Sec : %.3f\n", sfBaseStats->frag_completes_per_second); LogMessage("Frag Inserts()s/Sec : %.3f\n", sfBaseStats->frag_inserts_per_second); LogMessage("Frag Deletes/Sec : %.3f\n", sfBaseStats->frag_deletes_per_second); LogMessage("Frag AutoFrees/Sec : %.3f\n", sfBaseStats->frag_autofrees_per_second); LogMessage("Frag Flushes/Sec : %.3f\n", sfBaseStats->frag_flushes_per_second); LogMessage("Current Cached Frags : " STDu64 "\n", sfBaseStats->current_frags); LogMessage("Max Cached Frags : " STDu64 "\n", sfBaseStats->max_frags); LogMessage("Frag Timeouts : " STDu64 "\n", sfBaseStats->frag_timeouts); LogMessage("Frag Faults : " STDu64 "\n\n", sfBaseStats->frag_faults); LogMessage("New Cached UDP Ssns/Sec: %.3f\n", sfBaseStats->new_udp_sessions_per_second); LogMessage("Cached UDP Ssns Del/Sec: %.3f\n", sfBaseStats->deleted_udp_sessions_per_second); LogMessage("Current Cached UDP Ssns: " STDu64 "\n", sfBaseStats->total_udp_sessions); LogMessage("Max Cached UDP Ssns : " STDu64 "\n\n", sfBaseStats->max_udp_sessions);#ifdef TARGET_BASED LogMessage("Attribute Table Hosts : " STDu64 "\n", sfBaseStats->current_attribute_hosts); LogMessage("Attribute Table Reloads: " STDu64 "\n\n", sfBaseStats->attribute_table_reloads);#endif /* ** Snort Maximum Performance Statistics ** These statistics calculate the maximum performance that ** snort could attain by using the getrusage numbers. We've ** seen in testing that these numbers come close to the actual ** throughput for Mbits/Sec and Pkt/Sec. But note that these ** are not hard numbers and rigorous testing is necessary to ** establish snort performance on any hardware setting. */ if(iFlags & MAX_PERF_STATS) { LogMessage("Snort Maximum Performance\n"); LogMessage("-------------------------\n\n"); LogMessage("Mbits/Second\n"); LogMessage("----------------\n"); LogMessage("Snort: %.3f\n",sfBaseStats->mbits_per_sec.usertime); LogMessage("Sniffing: %.3f\n",sfBaseStats->mbits_per_sec.systemtime); LogMessage("Combined: %.3f\n\n",sfBaseStats->mbits_per_sec.totaltime); LogMessage("uSeconds/Pkt\n"); LogMessage("----------------\n"); LogMessage("Snort: %.3f\n",sfBaseStats->usecs_per_packet.usertime); LogMessage("Sniffing: %.3f\n",sfBaseStats->usecs_per_packet.systemtime); LogMessage("Combined: %.3f\n\n",sfBaseStats->usecs_per_packet.totaltime); LogMessage("KPkts/Second\n"); LogMessage("------------------\n"); LogMessage("Snort: %.3f\n",sfBaseStats->kpackets_per_sec.usertime); LogMessage("Sniffing: %.3f\n",sfBaseStats->kpackets_per_sec.systemtime); LogMessage("Combined: %.3f\n\n",sfBaseStats->kpackets_per_sec.totaltime); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -