pcaprub / pcaprub

libpcap bindings for ruby
http://rubyforge.org/projects/pcaprub/
GNU Lesser General Public License v2.1
79 stars 38 forks source link

Can't setfilter on open_dead(Pcap::DLT_EN10MB, 65535 #38

Closed chytreg closed 8 years ago

chytreg commented 9 years ago

Backtrace here:

irb(main):010:0> capture = PCAPRUB::Pcap.open_dead(Pcap::DLT_EN10MB, 65535); capture.setfilter('ether host 33:33:33:33:33:33')
(irb):10: [BUG] Segmentation fault at 0x00000000000000
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin13.0]

-- Crash Report log information --------------------------------------------
   See Crash Report log file under the one of following:
     * ~/Library/Logs/CrashReporter
     * /Library/Logs/CrashReporter
     * ~/Library/Logs/DiagnosticReports
     * /Library/Logs/DiagnosticReports
   for more details.

-- Control frame information -----------------------------------------------
c:0019 p:---- s:0076 e:000075 CFUNC  :setfilter
c:0018 p:0036 s:0072 e:000071 EVAL   (irb):10 [FINISH]
c:0017 p:---- s:0070 e:000069 CFUNC  :eval
c:0016 p:0024 s:0063 e:000062 METHOD /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/workspace.rb:86
c:0015 p:0025 s:0056 e:000054 METHOD /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/context.rb:380
c:0014 p:0022 s:0050 e:000049 BLOCK  /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:492
c:0013 p:0040 s:0042 e:000041 METHOD /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:624
c:0012 p:0009 s:0037 e:000036 BLOCK  /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:489
c:0011 p:0118 s:0033 e:000032 BLOCK  /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-lex.rb:247 [FINISH]
c:0010 p:---- s:0030 e:000029 CFUNC  :loop
c:0009 p:0007 s:0027 e:000026 BLOCK  /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-lex.rb:233 [FINISH]
c:0008 p:---- s:0025 e:000024 CFUNC  :catch
c:0007 p:0015 s:0021 e:000020 METHOD /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-lex.rb:232
c:0006 p:0030 s:0018 E:0015a8 METHOD /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:488
c:0005 p:0008 s:0015 e:000014 BLOCK  /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:397 [FINISH]
c:0004 p:---- s:0013 e:000012 CFUNC  :catch
c:0003 p:0143 s:0009 E:001888 METHOD /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:396
c:0002 p:0021 s:0004 E:001768 EVAL   /Users/chytreg/.rbenv/versions/2.1.5/bin/irb:11 [FINISH]
c:0001 p:0000 s:0002 E:001e08 TOP    [FINISH]

/Users/chytreg/.rbenv/versions/2.1.5/bin/irb:11:in `<main>'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:396:in `start'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:396:in `catch'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:397:in `block in start'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:488:in `eval_input'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-lex.rb:232:in `each_top_level_statement'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-lex.rb:232:in `catch'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-lex.rb:233:in `block in each_top_level_statement'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-lex.rb:233:in `loop'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-lex.rb:247:in `block (2 levels) in each_top_level_statement'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:489:in `block in eval_input'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:624:in `signal_status'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb:492:in `block (2 levels) in eval_input'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/context.rb:380:in `evaluate'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/workspace.rb:86:in `evaluate'
/Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/workspace.rb:86:in `eval'
(irb):10:in `irb_binding'
(irb):10:in `setfilter'

-- C level backtrace information -------------------------------------------
0   ruby                                0x0000000105f371d0 rb_vm_bugreport + 144
1   ruby                                0x0000000105de8e71 report_bug + 305
2   ruby                                0x0000000105de8d34 rb_bug + 180
3   ruby                                0x0000000105eb951c sigsegv + 156
4   libsystem_platform.dylib            0x00007fff864a15aa _sigtramp + 26
5   ???                                 0x0000000000000000 0x0 + 0
6   pcaprub_c.bundle                    0x00000001061cdc46 rbpcap_setfilter + 342
7   ruby                                0x0000000105f359d7 vm_call_cfunc + 1063
8   ruby                                0x0000000105f35322 vm_call_method + 866
9   ruby                                0x0000000105f1caad vm_exec_core + 11933
10  ruby                                0x0000000105f2b4a1 vm_exec + 129
11  ruby                                0x0000000105f31e4f eval_string_with_cref + 1631
12  ruby                                0x0000000105f286a1 rb_f_eval + 161
13  ruby                                0x0000000105f359d7 vm_call_cfunc + 1063
14  ruby                                0x0000000105f1caad vm_exec_core + 11933
15  ruby                                0x0000000105f2b4a1 vm_exec + 129
16  ruby                                0x0000000105f300d5 invoke_block_from_c + 2213
17  ruby                                0x0000000105f31721 loop_i + 49
18  ruby                                0x0000000105df22b6 rb_rescue2 + 278
19  ruby                                0x0000000105f299f3 rb_f_loop + 51
20  ruby                                0x0000000105f359d7 vm_call_cfunc + 1063
21  ruby                                0x0000000105f35322 vm_call_method + 866
22  ruby                                0x0000000105f1c8e3 vm_exec_core + 11475
23  ruby                                0x0000000105f2b4a1 vm_exec + 129
24  ruby                                0x0000000105f300d5 invoke_block_from_c + 2213
25  ruby                                0x0000000105f317c8 catch_i + 88
26  ruby                                0x0000000105f293d9 rb_catch_protect + 185
27  ruby                                0x0000000105f2996c rb_f_catch + 76
28  ruby                                0x0000000105f359d7 vm_call_cfunc + 1063
29  ruby                                0x0000000105f35322 vm_call_method + 866
30  ruby                                0x0000000105f1c8e3 vm_exec_core + 11475
31  ruby                                0x0000000105f2b4a1 vm_exec + 129
32  ruby                                0x0000000105f300d5 invoke_block_from_c + 2213
33  ruby                                0x0000000105f317c8 catch_i + 88
34  ruby                                0x0000000105f293d9 rb_catch_protect + 185
35  ruby                                0x0000000105f2996c rb_f_catch + 76
36  ruby                                0x0000000105f359d7 vm_call_cfunc + 1063
37  ruby                                0x0000000105f35322 vm_call_method + 866
38  ruby                                0x0000000105f1c8e3 vm_exec_core + 11475
39  ruby                                0x0000000105f2b4a1 vm_exec + 129
40  ruby                                0x0000000105f2c42c rb_iseq_eval_main + 396
41  ruby                                0x0000000105df1744 ruby_exec_internal + 148
42  ruby                                0x0000000105df166e ruby_run_node + 78
43  ruby                                0x0000000105dac44f main + 79

-- Other runtime information -----------------------------------------------

* Loaded script: irb

* Loaded features:

    0 enumerator.so
    1 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/x86_64-darwin13.0/enc/encdb.bundle
    2 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/x86_64-darwin13.0/enc/trans/transdb.bundle
    3 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/x86_64-darwin13.0/rbconfig.rb
    4 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/compatibility.rb
    5 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/defaults.rb
    6 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/deprecate.rb
    7 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/errors.rb
    8 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/version.rb
    9 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/requirement.rb
   10 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/platform.rb
   11 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/basic_specification.rb
   12 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/stub_specification.rb
   13 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/util/stringio.rb
   14 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/specification.rb
   15 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/exceptions.rb
   16 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/core_ext/kernel_gem.rb
   17 thread.rb
   18 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/x86_64-darwin13.0/thread.bundle
   19 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/monitor.rb
   20 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb
   21 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems.rb
   22 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/e2mmap.rb
   23 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/init.rb
   24 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/workspace.rb
   25 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/inspector.rb
   26 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/context.rb
   27 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/extend-command.rb
   28 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/output-method.rb
   29 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/notifier.rb
   30 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/slex.rb
   31 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-token.rb
   32 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/ruby-lex.rb
   33 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/src_encoding.rb
   34 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/magic-file.rb
   35 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/x86_64-darwin13.0/readline.bundle
   36 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/input-method.rb
   37 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/locale.rb
   38 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb.rb
   39 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/path_support.rb
   40 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/dependency.rb
   41 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/pcaprub-0.12.0/lib/pcaprub/common.rb
   42 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/pcaprub-0.12.0/lib/pcaprub/version.rb
   43 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/pcaprub-0.12.0/lib/pcaprub_c.bundle
   44 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/pcaprub-0.12.0/lib/pcaprub/ext.rb
   45 /Users/chytreg/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/pcaprub-0.12.0/lib/pcaprub.rb

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
Don't forget to include the above Crash Report log file.
For details: http://www.ruby-lang.org/bugreport.html

zsh: abort      irb
chytreg commented 9 years ago

According to the tcpdump documentation it should be possible: http://www.tcpdump.org/manpages/pcap_open_dead.3pcap.html

shadowbq commented 8 years ago

We dont 'setfilter' on open_dead. We just use it for bpf compile checks.

Given that.. if still should not SEGFAULT..

[2] pry(main)> require 'pcaprub'
=> true
[3] pry(main)> capture = PCAPRUB::Pcap.open_dead(Pcap::DLT_NULL, 65535)
=> #<PCAPRUB::Pcap:0x00000002a31810>
[4] pry(main)> capture.compile('net 10.0.0.0/8')
=> #<PCAPRUB::Pcap:0x00000002a31810>
[5] pry(main)> 
shadowbq commented 8 years ago

Fixed in 0.12.4 ruby gem.

Now raises PCAPRUB::BPFError if you attempt set a filter on a OPEN_DEAD link

./test_open_dead.rb:4:in `setfilter': unable to set bpf filter on OPEN_DEAD (PCAPRUB::BPFError)
from ./est_open_dead.rb:4:in `<main>'