我不明白如何在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
抱歉,谢谢!我是红宝石的新人。
答案 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