Ruby on rails 鲁比:你怎么用。uniq!在数组上查找基于regex.scan的重复项?
我很难理解这个。uniq!方法。我正在尝试删除视图中重复的ips警报 如果我使用Ruby on rails 鲁比:你怎么用。uniq!在数组上查找基于regex.scan的重复项?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我很难理解这个。uniq!方法。我正在尝试删除视图中重复的ips警报 如果我使用原始代码:中的代码,我会在索引视图:中收到来自IP的所有警报。 例如,这将显示所有警报;我将收到500个警报,这些警报可以根据签名ID(sid)、源IP(IP_src)和目标IP(IP_dst)压缩为1个警报。如果我只是附加.uniq!(如果应该这样使用)我没有得到任何不同的结果,我假设它不起作用,因为时间戳和源端口不一样,所以它已经是唯一的了。下面是两条示例消息,它们应该是一条而不是两条 04/04-16:13:4
原始代码:
中的代码,我会在索引视图:
中收到来自IP的所有警报。
例如,这将显示所有警报;我将收到500个警报,这些警报可以根据签名ID(sid)、源IP(IP_src)和目标IP(IP_dst)压缩为1个警报。如果我只是附加.uniq!(如果应该这样使用)我没有得到任何不同的结果,我假设它不起作用,因为时间戳和源端口不一样,所以它已经是唯一的了。下面是两条示例消息,它们应该是一条而不是两条
04/04-16:13:47.451062[**][1:10000001:1]删除-WP管理员尝试[**][分类:Web应用程序攻击][优先级:1]{TCP}10.17.21.37:55749->173.239.96.163:80
04/04-16:13:28.474894[**][1:10000001:1]删除-WP管理员尝试[**][分类:Web应用程序攻击][优先级:1]{TCP}10.17.21.37:55707->173.239.96.163:80
我想使用每条消息的签名ID(sid)、源IP(IP_src)和目标IP(IP_dst),并删除重复项
我使用.scan
方法查找签名ID、源IP和目标IP。它们被构建为sid、ip_src、ip_dst
。我被困在线路@filtered\u snort\u detail\u query.push(ips\u detail.uniq)上了
并且不知道我需要如何使用sid、ip_src、ip_dst
中的信息来进行@filtered\u snort\u detail\u查询
将唯一警报传递给我的视图
索引视图:
<% 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 %>
0%>
时间戳
标签信息
消息
没有返回结果。
原始代码:
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
if@es\u snort\u detail\u query.count>0
@过滤的\u snort\u详细信息\u查询=Array.new
@es|u snort|u detail|u query.each do|ips|u detail|
下一步如果ips_详细信息[''源]['type']!='snort-ips'
下一步如果ips_详细信息[''源]['@timestamp']<@ts
@过滤的\u snort\u detail\u query.push(ips\u detail)
结束
结束
修改代码:
if @es_snort_detail_query.count > 0
sid = Array.new
ip_src = Array.new
ip_dst = Array.new
@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
if ips_detail['_source']['message'].nil?
text_msg = ips_detail['_source']['message']
else
text_msg = ips_detail['_source']['message']
end
unless text_msg.nil?
sid_data = text_msg.scan(/\[\d+:\d+:\d+\]/)
src_ip_data = text_msg.scan(/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/)
dst_ip_data = text_msg.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?
@filtered_snort_detail_query.push(ips_detail).uniq!
#[{:unique_ids => sid}, {:unique_ids => ip_src}, {:unique_ids => ip_dst}]
end
end
end
if@es\u snort\u detail\u query.count>0
sid=Array.new
ip_src=Array.new
ip_dst=Array.new
@过滤的\u snort\u详细信息\u查询=Array.new
@es|u snort|u detail|u query.each do|ips|u detail|
下一步如果ips_详细信息[''源]['type']!='snort-ips'
下一步如果ips_详细信息[''源]['@timestamp']<@ts
如果ips_详细信息[''源]['消息].nil?
text_msg=ips_详细信息[''u来源]['message']
其他的
text_msg=ips_详细信息[''u来源]['message']
结束
除非文本为零?
sid\u data=text\u msg.scan(/\[\d+:\d+:\d+\]/)
src_ip_data=text_msg.scan(/(?:[0-9]{1,3}\){3}[0-9]{1,3}/)
dst_ip_data=text_msg.scan(/(?:[0-9]{1,3}\){3}[0-9]{1,3}/)
sid.push(sid_数据[0]),除非sid_数据[0].nil?
ip_src.push(src_ip_数据[0]),除非src_ip_数据[0]。nil?
ip_dst.push(dst_ip_数据[1]),除非dst_ip_数据[1]。无?
@过滤的\u snort\u detail\u query.push(ips\u detail.uniq!
#[{:unique_id=>sid},{:unique_id=>ip_src},{:unique_id=>ip_dst}]
结束
结束
结束
您可以将一个块传递给它,告诉它您希望如何对阵列进行重复数据消除:
@filtered_snort_detail_query = @es_snort_detail_query.reject do |ips_detail|
ips_detail['_source']['type'] != 'snort-ips' || ips_detail['_source']['@timestamp'] < @ts
end.uniq do |ips_detail|
if ips_detail['_source']['message'].nil?
text_msg = ips_detail['_source']['message']
else
text_msg = ips_detail['_source']['message']
end
unless text_msg.nil?
sid_data = text_msg.scan(/\[\d+:\d+:\d+\]/)
src_ip_data = text_msg.scan(/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/)
dst_ip_data = text_msg.scan(/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/)
[sid_data, src_ip_data, dst_ip_data]
end
end
@filtered_snort_detail_query=@es_snort_detail_query.reject do|ips_detail|
ips_详细信息[''来源]['类型]!='snort ips'| | ips|U详细信息[''源]['@timestamp']<@ts
end.uniq do|ips|u详图|
如果ips_详细信息[''源]['消息].nil?
text_msg=ips_详细信息[''u来源]['message']
其他的
text_msg=ips_详细信息[''u来源]['message']
结束
除非文本为零?
sid\u data=text\u msg.scan(/\[\d+:\d+:\d+\]/)
src_ip_data=text_msg.scan(/(?:[0-9]{1,3}\){3}[0-9]{1,3}/)
dst_ip_data=text_msg.scan(/(?:[0-9]{1,3}\){3}[0-9]{1,3}/)
[sid_数据、src_ip_数据、dst_ip_数据]
结束
结束