Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 鲁比:你怎么用。uniq!在数组上查找基于regex.scan的重复项?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 鲁比:你怎么用。uniq!在数组上查找基于regex.scan的重复项?

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

我很难理解这个。uniq!方法。我正在尝试删除视图中重复的ips警报

如果我使用
原始代码:
中的代码,我会在
索引视图:
中收到来自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_数据]
结束
结束