2012-05-12 14 views
1

私の問題はrubyがrequire packetfuを認識し、PacketFuをIRBに含めることですが、スクリプトとして実行するとうまくいきません。私はそれが私の宝石のディレクトリが編成されている方法や、私がアプリを実行するためにsudoとしてチェックインする際に何か変わったことがあるかどうかを知りたい。ここでPacketfu Gem Recognition Error

は、私は通常のユーザーとして、それを実行したときに生成されるエラーです:

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では動作しません。なぜ?:簡単なスニファプログラムのpacketfu文書から

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>' 

サンプルコード:

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) 

すべてのヘルプは高く評価されます。見てくれてありがとう!

+0

http://stackoverflow.com/questions/3644897/rvm-cannot-use-ruby-with-sudo – Casper

答えて

1

通常、sudo環境があなたの宝石のどれも見つけることができないからです。

RVMを使用している場合(そしてあなたは:rvm.io)、代わりにrvmsudoを使用できます。これはRuby環境を保護します。

理由を問わずRVMを使用することはできませんが、現代版のsudoを使用している場合は、sudo -Eを使用して環境を保持してください。

関連する問題