1

私の問題は、ruby が require 'packetfu' を認識し、PacketFu を IRB に含めることですが、スクリプトとして実行すると機能しません。gem ディレクトリの整理方法が原因なのか、アプリを実行するために 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)

どんな助けでも大歓迎です。ご覧いただきありがとうございます。

4

1 に答える 1

1

通常、sudo 環境で gem が見つからないことが原因です。

RVM を使用している場合 (およびそうすべきです: rvm.io )、rvmsudo代わりに使用できます。これにより、Ruby 環境が保持されます。

なんらかの理由で RVM を使用できないが、最新バージョンの sudo を使用している場合はsudo -E、環境の保持を試みることができます。

于 2012-05-13T02:04:19.733 に答える