我可能没有使用正确的术语但是这里......
我在仪表板应用上显示IPS警报,并且有许多重复的行。例如,如果一个脚本小子试图暴力破坏RDP服务器,我可以得到150个警报,但可以减少到大约5,因为他们要追踪的主机数量。因此,我尝试删除重复的警报,并且我希望使用sid,src_addr和dst_addr作为我的指标,以确定它们是否重复。
目前我使用以下代码显示@filtered_snort_detail_query
:
This is my view
<% if @filtered_snort_detail_query.count > 0 %>
<table>
<tr>
<th>Timestamp</th>
<th>Tag Info</th>
<th>Message</th>
</tr>
<% @filtered_snort_detail_query.each do |d|
text_msg = d['_source']['message']
if d['_source']['message'].nil?
end
%>
<tr>
<td class='timestamp'><%= d['_source']['@timestamp'].to_time %></td>
<td class='tags'><%= d['_source']['tags'] %></td>
<td class='message'><%= text_msg %></td>
</tr>
<% end %>
</table>
<% else %>
<div> No Results Returned. </div>
<% end %>
Here is my controller
if @es_snort_detail_query.count > 0
@filtered_snort_detail_query = Array.new
@es_snort_detail_query.each do |ips_detail|
next if ips_detail['_source']['type'] != 'snort-ips'
next if ips_detail['_source']['@timestamp'] < @ts
@filtered_snort_detail_query.push(ips_detail)
end
end
以下是我认为我需要做的事情来获取比较控制器中的行所需的指标。
我只是不确定查看每一行@filtered_snort_detail_query
的最佳方法,并使用这些参数构建一个新数组以在我的视图中显示:
向我显示所有行,但如果sid_data
,src_ip_data
和dst_ip_data
发生两次或更多次,则不会显示。
if @es_snort_detail_query.count > 0
@filtered_snort_detail_query = Array.new
@es_snort_detail_query.each do |ips_detail|
next if ips_detail['_source']['type'] != 'snort-ips'
next if ips_detail['_source']['@timestamp'] < @ts
@filtered_snort_detail_query.push(ips_detail)
end
if @filtered_snort_detail_query.count > 0
ip_src = Array.new
ip_dst = Array.new
sid = Array.new
@filtered_snort_detail_query.each do |find_ip, find_sid|
unless find_ip.nil?
sid_data = find_sid.scan(/\[\d+\:\d+\:\d+\]/)
src_ip_data = find_ip.scan(/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/)
dst_ip_data = find_ip.scan(/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/)
sid.push(sid_data[0]) unless sid_data[0].nil?
ip_src.push(src_ip_data[0]) unless src_ip_data[0].nil?
ip_dst.push(dst_ip_data[1]) unless dst_ip_data[1].nil?
end
end
end
end
答案 0 :(得分:0)
很抱歉,如果我误解了这个问题。
如果数组中有一堆对象,并且您希望根据其属性的子集删除重复项,则可以将uniq
方法与块一起使用:
queries.uniq do |query|
[query.sid_data, query.src_ip_data, query.dst_ip_data]
end
它将根据块中创建的数组比较查询,并删除重复项。
转到http://www.compileonline.com/execute_ruby_online.php,复制并粘贴以下代码,然后点击左上角的执行脚本。
queries = [
{ :a => "ab", :b => "ba" },
{ :a => "ab", :b => "xy" },
{ :a => "xy", :b => "xy" }
]
unique_queries = queries.uniq do |q|
q[:a]
end
puts unique_queries
请参阅?比较仅基于:a
键的值完成。这是相同的原则。