私の問題は、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)
どんな助けでも大歓迎です。ご覧いただきありがとうございます。