Packetfu宝石识别错误

时间:2012-05-12 05:28:40

标签: ruby gem packets

我的问题是ruby识别需要'packetfu'并在IRB中包含PacketFu但在我作为脚本运行时不起作用。我想知道这是因为我的宝石目录的组织方式,还是当我以sudo运行应用程序时签入奇怪的东西。

这是我以普通用户身份运行时产生的错误:

  1 tMobile:~ cj3kim$ ruby packetfu.rb
  2 Simple sniffer for PacketFu 1.1.5
  3 /Users/cj3kim/.rvm/gems/ruby-1.9.3-p0/gems/packetfu-1.1.5/lib/packetfu/capture.rb:73:in `capture': Not root, so can't capture packets. Error:  (RuntimeError)
  4     from /Users/cj3kim/.rvm/gems/ruby-1.9.3-p0/gems/packetfu-1.1.5/lib/packetfu/capture.rb:46:in `setup_params'
  5     from /Users/cj3kim/.rvm/gems/ruby-1.9.3-p0/gems/packetfu-1.1.5/lib/packetfu/capture.rb:39:in `initialize'
  6     from packetfu.rb:9:in `new'
  7     from packetfu.rb:9:in `sniff'
  8     from packetfu.rb:20:in `<main>'

不适用于sudo。为什么:

  9 The-BatMobile:~ cj3kim$ sudo ruby packetfu.rb
 10 /Users/cj3kim/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- packetfu (LoadError)
 11     from /Users/cj3kim/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
 12     from packetfu.rb:1:in `<main>'

简单嗅探器程序的packetfu文档中的示例代码:

1 require 'packetfu'
  2 include PacketFu
  3 
  4 puts "Simple sniffer for PacketFu #{PacketFu.version}"
  5 
  6 iface = ARGV[0] || "en0"
  7 
  8 def sniff(iface)
  9         cap = Capture.new(:iface => iface, :start => true)
 10         cap.stream.each do |p|
 11                 pkt = Packet.parse p
 12                 if pkt.is_ip?
 13                         next if pkt.ip_saddr == Utils.ifconfig[:ip_saddr]
 14                         packet_info = [pkt.ip_saddr, pkt.ip_daddr, pkt.size, pkt.proto.last]
 15                         puts "%-15s -> %-15s %-4d %s" % packet_info
 16                 end
 17         end
 18 end
 19 
 20 sniff(iface)

感谢任何帮助。谢谢你的期待!

1 个答案:

答案 0 :(得分:1)

通常,这是因为sudo环境找不到任何宝石。

如果您正在使用RVM(并且您应该:rvm.io),则可以使用rvmsudo代替,这将保留您的Ruby环境。

如果您无法使用RVM,但是您使用的是现代版本的sudo,则可以尝试使用sudo -E来保留环境。