尝试阅读pcap文件,yield和& block说明

时间:2014-01-10 04:01:20

标签: ruby-on-rails ruby pcap

我不明白如何在pcap_simple(https://github.com/ryanbreed/pcap_simple/blob/master/lib/pcap_simple.rb)gem中使用此方法,什么是& block?

def each(&block)
  file.seek(PCAP_HEADER_LEN)
  loop do
    header_data=file.read(PACKET_HEADER_LEN)
    break if (header_data.nil? || header_data.length < PACKET_HEADER_LEN)
    header=PcapRecord.new(header_data)
    raw=file.read(header.incl_len)
    break if (raw.nil? || raw.length < header.incl_len)
    packet=Packet.new(:raw_data=>raw,:header=>header)

    yield packet unless packet.datagram.nil?
  end
end

和&#34;产生数据包&#34;,我知道数据包是一个类,但它如何与yield一起工作?

我尝试了类似这样的东西,但没有,我可以打开文件的第一行。

    @archivo = PcapSimple::PcapFile.new("file_name","/home/deniel/Sites Ruby on Rails/h2/out.pcap") 

@archivo.each() do

logger.info "HELLLLLLLLLLLLLLLLLLLLLLLLLLO!"

end

抱歉,谢谢!我是红宝石的新人。

1 个答案:

答案 0 :(得分:0)

我这样做就像这样直接在我的课上复制粘贴gem方法。

  @file=File.open("/home/deniel/Sites Ruby on Rails/h2/out2.pcap","r")
  @header=PcapHeader.new(@file.read((5*32 + 2*16)/8))

   @file.seek((5*32 + 2*16)/8) 
   loop do
   header_data = @file.read((5*32 + 2*16)/8)    
    break if (header_data.nil? || header_data.length < ((4*32)/8) )
   header=PcapRecord.new(header_data)
   raw=@file.read(header.incl_len)
    break if (raw.nil? || raw.length < header.incl_len)
   packet=Packet.new(:raw_data=>raw,:header=>header)
   logger.info packet.src
   end

所以......我还是不知道

是什么
  除非packet.datagram.nil?

,否则

产生数据包

如果我离开该行,则出现此错误:

LocalJumpError in WelcomeController#index

no block given