pcaprub 0.12.1 → 0.13.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b40590aca5ff2daad1628f3b1a0e6c97a9708c34
4
- data.tar.gz: a6e49962b099f5d7a1e35db4052c35d532338b0e
2
+ SHA256:
3
+ metadata.gz: c73d004b9ff68405a37b7f4a9466c187f3c5fd30110b8688ef9ec35a1a58954c
4
+ data.tar.gz: 48d2147906a775f47b76192b6c407fd9d2393b39a7383c08e2e14270daded436
5
5
  SHA512:
6
- metadata.gz: 8417a0109228972f697b536fb01ed951f582d05872188a874c0ffb939f44161153501289dfeaf269de8d24b7d013394549b02d9d758caa85fd0bf86860d6d3f8
7
- data.tar.gz: adea669c22d2d0547bf772cb62ec1bb1ecdc53dd2cf7141b61fc886889b34bbcf3339aea37f6d2be39c170620ab781e5c4b5f57f74fbdaa30d8770236035a73d
6
+ metadata.gz: b2d143fb92771897a20ababd154e1e4d136ce6d4685538211a4d80ab8c67337fc00728e75509fd8bfb2d9a77b146c23db130ac793f328acb2d63da113c4a5554
7
+ data.tar.gz: 2c57a1ea128a82e91b5f65f187849cae11a53eec67fb4f35291208e92fba27370cc1150910a55b7452cc55dbe9e040d987fa65f12ed7a8f634b8ee14bad0b7c2
data/.travis.yml CHANGED
@@ -1,11 +1,20 @@
1
1
  language: ruby
2
2
  before_install:
3
3
  - sudo apt-get install libpcap-dev -qq
4
+ before_script:
5
+ - travis_retry gem update bundler
4
6
  rvm:
5
- - 1.8.7
6
- - 1.9.3
7
- - 2.0.0
8
- - 2.1.0
9
- # - ruby-head
7
+ - 2.5
8
+ - 2.6
9
+ - 2.7
10
+ - 3.0
11
+ - ruby-head
12
+ env:
13
+ rvmsudo_secure_path: 1
14
+ cache: bundler
15
+ matrix:
16
+ allow_failures:
17
+ - rvm: ruby-head
18
+ fast_finish: true
10
19
  script:
11
- - rvmsudo bundle exec rake
20
+ - rvmsudo bundle exec rake
data/Gemfile CHANGED
@@ -1,21 +1,17 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # No more static spec file
4
-
5
- platforms :ruby_18 do
6
- gem 'rdoc'
7
- end
8
-
9
3
  group :development, :test do
10
4
  # Prevent occasions where minitest is not bundled in packaged versions of ruby (see #3826)
11
5
  gem 'minitest', '~> 4.7.0'
12
6
  gem 'shoulda-context', '~> 1.1.6'
13
- platforms :ruby_19, :ruby_20, :ruby_21 do
14
- gem 'coveralls', :require => false
15
- end
7
+ gem 'test-unit'
8
+ gem 'coveralls', :require => false
16
9
  end
17
10
 
18
- gem 'rake', '>= 0.9.2'
19
11
  gem 'rake-compiler', '>= 0.6.0'
20
12
  gem 'rubygems-tasks'
21
- gem 'git'
13
+
14
+ if Bundler.current_ruby.mri? || Bundler.current_ruby.mingw? || Bundler.current_ruby.x64_mingw?
15
+ gem 'rake', '>= 0.9.2'
16
+ gem 'git', '~> 1.3.0'
17
+ end
data/README.rdoc CHANGED
@@ -20,21 +20,17 @@ For packet processing capability look at ruby gems PCAPFU, PCAPLET, etc..
20
20
 
21
21
  == Requirements
22
22
 
23
- MRI POSIX Ruby (Native compilation)
24
- Ruby 1.8.7 (EOL June 2014)
25
- Ruby 1.9.3 or higher
26
- Ruby 2.x or higher
23
+ MRI POSIX Ruby (Native compilation) [Travis-CI Tested]
24
+ ~> Ruby 2.4
27
25
 
28
26
  libpcap - http://www.tcpdump.org
29
27
 
30
- MRI Windows Ruby (Native compilation)
31
- Ruby 1.8.7 (EOL June 2014)
32
- Ruby 1.9.3 or higher
33
- Ruby 2.x or higher
34
-
28
+ Ruby with DevKit(32bit) on Windows [AppVeyor Tested]
29
+ Ruby 1.9.3
30
+ ~> Ruby 2.x
31
+
35
32
  WinPcap Developer's Pack - http://www.winpcap.org
36
33
 
37
-
38
34
  == Installation
39
35
 
40
36
  gem install pcaprub
data/Rakefile CHANGED
@@ -9,15 +9,16 @@ ENV['LANG'] = "en_US.UTF-8"
9
9
 
10
10
 
11
11
  @gemspec = Gem::Specification.new do |spec|
12
- spec.name = "pcaprub"
13
- spec.version = PCAPRUB::Pcap.version
14
- spec.authors = ["shadowbq", "crondaemon", "jmcavinee", "unmarshal"]
15
- spec.email = "shadowbq@gmail.com"
16
- spec.description = "libpcap bindings for ruby with Ruby1.8, Ruby1.9, Ruby 2.x"
17
- spec.summary = "libpcap bindings for ruby"
18
- spec.homepage = "https://github.com/pcaprub/pcaprub"
19
- spec.requirements = "libpcap"
20
- spec.license = "LGPL-2.1"
12
+ spec.name = "pcaprub"
13
+ spec.version = PCAPRUB::Pcap.version
14
+ spec.authors = ["shadowbq", "crondaemon", "jmcavinee", "unmarshal"]
15
+ spec.email = "shadowbq@gmail.com"
16
+ spec.description = "libpcap bindings for Ruby 2.x"
17
+ spec.summary = "libpcap bindings for ruby"
18
+ spec.homepage = "https://github.com/pcaprub/pcaprub"
19
+ spec.requirements = "libpcap"
20
+ spec.license = "LGPL-2.1"
21
+ spec.required_ruby_version = '>= 2.0'
21
22
 
22
23
  spec.files = [
23
24
  ".document",
@@ -114,6 +115,7 @@ Gem::Tasks.new
114
115
  # Override standard release task
115
116
  require 'git'
116
117
  Rake::Task["release"].clear
118
+ desc 'Release the gem (create tag, build, publish)'
117
119
  task :release do
118
120
  version = "#{PCAPRUB::VERSION::STRING}"
119
121
  remote = 'origin'
@@ -4,8 +4,7 @@ extension_name = 'pcaprub_c'
4
4
  puts "\n[*] Running checks for #{extension_name} code..."
5
5
  puts("platform is #{RUBY_PLATFORM}")
6
6
 
7
- if /i386-mingw32/ =~ RUBY_PLATFORM
8
-
7
+ if /i386-mingw32/ =~ RUBY_PLATFORM || /x64-mingw32/ =~ RUBY_PLATFORM
9
8
  unless have_library("ws2_32" ) and
10
9
  have_library("iphlpapi") and
11
10
  have_header("windows.h") and
@@ -18,19 +17,38 @@ if /i386-mingw32/ =~ RUBY_PLATFORM
18
17
  pcap_dir = with_config("pcap-dir", "C:/WpdPack")
19
18
  pcap_includedir = with_config("pcap-includedir", pcap_dir + "/include")
20
19
  pcap_libdir = with_config("pcap-libdir", pcap_dir + "/lib")
20
+
21
+ if /x64-mingw32/ =~ RUBY_PLATFORM
22
+ pcap_libdir += "/x64"
23
+ end
24
+
21
25
  $CFLAGS = "-DWIN32 -I#{pcap_includedir}"
26
+ $CFLAGS += " -g" if with_config("debug")
22
27
  $LDFLAGS = "-L#{pcap_libdir}"
28
+ $LDFLAGS += " -g" if with_config("debug")
23
29
 
30
+ have_header("ruby/thread.h")
31
+ have_func("rb_thread_blocking_region") # Pre ruby 2.2
32
+ have_func("rb_thread_call_without_gvl") # Post ruby 2.2
24
33
  have_library("wpcap", "pcap_open_live")
25
34
  have_library("wpcap", "pcap_setnonblock")
26
-
27
- elsif /i386-mswin32/ =~ RUBY_PLATFORM
35
+ elsif /i386-mswin32/ =~ RUBY_PLATFORM || /x64-mswin32/ =~ RUBY_PLATFORM
28
36
  pcap_dir = with_config("pcap-dir", "C:\\WpdPack")
29
37
  pcap_includedir = with_config("pcap-includedir", pcap_dir + "\\include")
30
38
  pcap_libdir = with_config("pcap-libdir", pcap_dir + "\\lib")
31
39
 
40
+ if /x64-mingw32/ =~ RUBY_PLATFORM
41
+ pcap_libdir += "\\x64"
42
+ end
43
+
32
44
  $CFLAGS = "-DWIN32 -I#{pcap_includedir}"
45
+ $CFLAGS += " -g" if with_config("debug")
33
46
  $LDFLAGS = "/link /LIBPATH:#{pcap_libdir}"
47
+ $LDFLAGS += " -g" if with_config("debug")
48
+ have_header("ruby/thread.h")
49
+ have_func("rb_thread_blocking_region") # Pre ruby 2.2
50
+ have_func("rb_thread_call_without_gvl") # Post ruby 2.2
51
+
34
52
  have_library("wpcap", "pcap_open_live")
35
53
  have_library("wpcap", "pcap_setnonblock")
36
54
  else
@@ -61,8 +79,15 @@ else
61
79
 
62
80
  dir_config("pcap", header_dirs, lib_dirs)
63
81
 
82
+ have_header("ruby/thread.h")
83
+ have_func("rb_thread_blocking_region") # Pre ruby 2.2
84
+ have_func("rb_thread_call_without_gvl") # Post ruby 2.2
85
+
64
86
  have_library("pcap", "pcap_open_live", ["pcap.h"])
65
87
  have_library("pcap", "pcap_setnonblock", ["pcap.h"])
88
+
89
+ $CFLAGS = "-g" if with_config("debug")
90
+ $LDFLAGS = "-g" if with_config("debug")
66
91
  end
67
92
 
68
93
  create_makefile(extension_name)
@@ -1,10 +1,13 @@
1
1
  #include "ruby.h"
2
2
 
3
+ #ifdef HAVE_RUBY_THREAD_H
4
+ #include "ruby/thread.h"
5
+ #endif
6
+
3
7
  #ifdef MAKE_TRAP
4
8
  #include "rubysig.h"
5
9
  #endif
6
10
 
7
-
8
11
  #include <pcap.h>
9
12
  #if defined(WIN32)
10
13
  #include <Win32-Extensions.h>
@@ -29,6 +32,7 @@ static VALUE rbpcap_thread_wait_handle(HANDLE fno);
29
32
 
30
33
  #define OFFLINE 1
31
34
  #define LIVE 2
35
+ #define DEAD 3
32
36
 
33
37
  #if !defined(PCAP_NETMASK_UNKNOWN)
34
38
  /*
@@ -57,6 +61,15 @@ typedef struct rbpacket {
57
61
  u_char* pkt;
58
62
  } rbpacket_t;
59
63
 
64
+ /*
65
+ * Return the pcap version
66
+ */
67
+ static VALUE
68
+ rbpcap_s_lib_version(VALUE self)
69
+ {
70
+ return rb_str_new2(pcap_lib_version());
71
+ }
72
+
60
73
  /*
61
74
  * Return the name of a network device on the system.
62
75
  *
@@ -410,7 +423,11 @@ rbpcap_setfilter(VALUE self, VALUE filter)
410
423
  if(TYPE(filter) != T_STRING)
411
424
  rb_raise(eBPFilterError, "filter must be a string");
412
425
 
413
- if(! rbpcap_ready(rbp)) return self;
426
+ if(! rbpcap_ready(rbp)) return self;
427
+
428
+ if(rbp->type == DEAD) {
429
+ rb_raise(eBPFilterError, "unable to set bpf filter on OPEN_DEAD");
430
+ }
414
431
 
415
432
  if(rbp->type == LIVE)
416
433
  if(pcap_lookupnet(rbp->iface, &netid, &mask, eb) < 0) {
@@ -424,7 +441,7 @@ rbpcap_setfilter(VALUE self, VALUE filter)
424
441
  }
425
442
 
426
443
  if(pcap_setfilter(rbp->pd, &bpf) < 0) {
427
- pcap_freecode(&bpf);
444
+ pcap_freecode(&bpf);
428
445
  rb_raise(eBPFilterError, "unable to set bpf filter: %s", pcap_geterr(rbp->pd));
429
446
  }
430
447
 
@@ -659,7 +676,6 @@ rbpcap_open_dead(VALUE self, VALUE linktype, VALUE snaplen)
659
676
  {
660
677
  rbpcap_t *rbp;
661
678
 
662
-
663
679
  if(TYPE(linktype) != T_FIXNUM)
664
680
  rb_raise(rb_eArgError, "linktype must be a fixnum");
665
681
  if(TYPE(snaplen) != T_FIXNUM)
@@ -668,7 +684,7 @@ rbpcap_open_dead(VALUE self, VALUE linktype, VALUE snaplen)
668
684
  Data_Get_Struct(self, rbpcap_t, rbp);
669
685
 
670
686
  memset(rbp->iface, 0, sizeof(rbp->iface));
671
- rbp->type = OFFLINE;
687
+ rbp->type = DEAD;
672
688
 
673
689
  rbp->pd = pcap_open_dead(
674
690
  NUM2INT(linktype),
@@ -887,6 +903,10 @@ rbpcap_next_data(VALUE self)
887
903
  if(rbp->type == OFFLINE && ret <= 0)
888
904
  return Qnil;
889
905
 
906
+ if(rbp->type == DEAD && ret <= 0)
907
+ return Qnil;
908
+
909
+
890
910
  if(ret > 0 && job.hdr.caplen > 0)
891
911
  return rb_str_new((char *) job.pkt, job.hdr.caplen);
892
912
 
@@ -932,6 +952,9 @@ rbpcap_next_packet(VALUE self)
932
952
  if(rbp->type == OFFLINE && ret <= 0)
933
953
  return Qnil;
934
954
 
955
+ if(rbp->type == DEAD && ret <= 0)
956
+ return Qnil;
957
+
935
958
  if(ret > 0 && job.hdr.caplen > 0)
936
959
  {
937
960
  rbpacket = ALLOC(rbpacket_t);
@@ -974,6 +997,7 @@ rbpcap_each_data(VALUE self)
974
997
  for(;;) {
975
998
  VALUE packet = rbpcap_next_data(self);
976
999
  if(packet == Qnil && rbp->type == OFFLINE) break;
1000
+ if(packet == Qnil && rbp->type == DEAD) break;
977
1001
  #if defined(WIN32)
978
1002
  packet == Qnil ? rbpcap_thread_wait_handle(fno) : rb_yield(packet);
979
1003
  #else
@@ -1015,6 +1039,7 @@ rbpcap_each_packet(VALUE self)
1015
1039
  for(;;) {
1016
1040
  VALUE packet = rbpcap_next_packet(self);
1017
1041
  if(packet == Qnil && rbp->type == OFFLINE) break;
1042
+ if(packet == Qnil && rbp->type == DEAD) break;
1018
1043
  #if defined(WIN32)
1019
1044
  packet == Qnil ? rbpcap_thread_wait_handle(fno) : rb_yield(packet);
1020
1045
  #else
@@ -1244,6 +1269,10 @@ rbpcap_thread_wait_handle(HANDLE fno)
1244
1269
  #if MAKE_TRAP
1245
1270
  // Ruby 1.8 doesn't support rb_thread_blocking_region
1246
1271
  result = rb_thread_polling();
1272
+ #elif defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
1273
+ result = (VALUE)rb_thread_call_without_gvl(
1274
+ rbpcap_thread_wait_handle_blocking,
1275
+ fno, RUBY_UBF_IO, 0);
1247
1276
  #else
1248
1277
  result = (VALUE)rb_thread_blocking_region(
1249
1278
  rbpcap_thread_wait_handle_blocking,
@@ -1275,6 +1304,7 @@ Init_pcaprub_c()
1275
1304
 
1276
1305
  rb_define_module_function(rb_cPcap, "lookupdev", rbpcap_s_lookupdev, 0);
1277
1306
  rb_define_module_function(rb_cPcap, "lookupnet", rbpcap_s_lookupnet, 1);
1307
+ rb_define_module_function(rb_cPcap, "lib_version", rbpcap_s_lib_version, 0);
1278
1308
 
1279
1309
  rb_define_const(rb_cPcap, "DLT_NULL", INT2NUM(DLT_NULL));
1280
1310
  rb_define_const(rb_cPcap, "DLT_EN10MB", INT2NUM(DLT_EN10MB));
@@ -1293,10 +1323,41 @@ Init_pcaprub_c()
1293
1323
  rb_define_const(rb_cPcap, "DLT_PPP_BSDOS", INT2NUM(DLT_PPP_BSDOS));
1294
1324
  rb_define_const(rb_cPcap, "DLT_IEEE802_11", INT2NUM(DLT_IEEE802_11));
1295
1325
  rb_define_const(rb_cPcap, "DLT_IEEE802_11_RADIO", INT2NUM(DLT_IEEE802_11_RADIO));
1326
+ #ifdef DLT_IEEE802_11_RADIO_AVS
1296
1327
  rb_define_const(rb_cPcap, "DLT_IEEE802_11_RADIO_AVS", INT2NUM(DLT_IEEE802_11_RADIO_AVS));
1328
+ #endif /* DLT_IEEE802_11_RADIO_AVS */
1329
+ #ifdef DLT_LINUX_SLL
1297
1330
  rb_define_const(rb_cPcap, "DLT_LINUX_SLL", INT2NUM(DLT_LINUX_SLL));
1331
+ #endif /* DLT_LINUX_SLL */
1332
+ #ifdef DLT_PRISM_HEADER
1298
1333
  rb_define_const(rb_cPcap, "DLT_PRISM_HEADER", INT2NUM(DLT_PRISM_HEADER));
1334
+ #endif /* DLT_PRISM_HEADER */
1335
+ #ifdef DLT_AIRONET_HEADER
1299
1336
  rb_define_const(rb_cPcap, "DLT_AIRONET_HEADER", INT2NUM(DLT_AIRONET_HEADER));
1337
+ #endif /* DLT_AIRONET_HEADER */
1338
+
1339
+ #ifdef DLT_BLUETOOTH_HCI_H4
1340
+ rb_define_const(rb_cPcap, "DLT_BLUETOOTH_HCI_H4", INT2NUM(DLT_BLUETOOTH_HCI_H4));
1341
+ #endif
1342
+ #ifdef DLT_BLUETOOTH_HCI_H4_WITH_PHDR
1343
+ rb_define_const(rb_cPcap, "DLT_BLUETOOTH_HCI_H4_WITH_PHDR", INT2NUM(DLT_BLUETOOTH_HCI_H4_WITH_PHDR));
1344
+ #endif
1345
+ #ifdef DLT_IPFILTER
1346
+ rb_define_const(rb_cPcap, "DLT_IPFILTER", INT2NUM(DLT_IPFILTER));
1347
+ #endif
1348
+ #ifdef DLT_LOOP
1349
+ rb_define_const(rb_cPcap, "DLT_LOOP", INT2NUM(DLT_LOOP));
1350
+ #endif
1351
+ #ifdef DLT_USB
1352
+ rb_define_const(rb_cPcap, "DLT_USB", INT2NUM(DLT_USB));
1353
+ #endif
1354
+ #ifdef DLT_USB_LINUX
1355
+ rb_define_const(rb_cPcap, "DLT_USB_LINUX", INT2NUM(DLT_USB_LINUX));
1356
+ #endif
1357
+ #ifdef DLT_DOCSIS
1358
+ rb_define_const(rb_cPcap, "DLT_DOCSIS", INT2NUM(DLT_DOCSIS));
1359
+ #endif
1360
+
1300
1361
  /* Pcap Error Codes
1301
1362
  * Error codes for the pcap API.
1302
1363
  * These will all be negative, so you can check for the success or
data/lib/pcaprub/ext.rb CHANGED
@@ -1,15 +1,15 @@
1
1
  begin
2
- if RUBY_VERSION =~ /1.8/
3
- require '1.8/pcaprub_c'
4
- elsif RUBY_VERSION =~ /1.9/
5
- require '1.9/pcaprub_c'
6
- elsif RUBY_VERSION =~ /2.0/
2
+ if RUBY_VERSION =~ /2.0/
7
3
  require '2.0/pcaprub_c'
8
4
  elsif RUBY_VERSION =~ /2.1/
9
5
  require '2.1/pcaprub_c'
6
+ elsif RUBY_VERSION =~ /2.2/
7
+ require '2.2/pcaprub_c'
8
+ elsif RUBY_VERSION =~ /2.3/
9
+ require '2.3/pcaprub_c'
10
10
  else
11
11
  require 'pcaprub_c'
12
12
  end
13
13
  rescue Exception
14
14
  require 'pcaprub_c'
15
- end
15
+ end
@@ -3,7 +3,7 @@ module PCAPRUB #:nodoc:
3
3
  module VERSION #:nodoc:
4
4
 
5
5
  MAJOR = 0
6
- MINOR = 12
6
+ MINOR = 13
7
7
  TINY = 1
8
8
 
9
9
  STRING = [MAJOR, MINOR, TINY].join('.')
data/test/test_helper.rb CHANGED
@@ -8,9 +8,5 @@ require "minitest/autorun"
8
8
  require 'test/unit'
9
9
  require 'pcaprub'
10
10
 
11
-
12
- if RUBY_VERSION >= "1.9.2"
13
- require 'coveralls'
14
- Coveralls.wear!
15
- end
16
-
11
+ require 'coveralls'
12
+ Coveralls.wear!
@@ -13,19 +13,20 @@ require File.expand_path '../test_helper.rb', __FILE__
13
13
  class Pcap::UnitTest < Test::Unit::TestCase
14
14
  def test_version
15
15
  assert_equal(String, Pcap.version.class)
16
- puts "Pcaprub version: #{Pcap.version}"
16
+ # puts "Pcaprub version: #{Pcap.version}"
17
17
  end
18
18
 
19
19
  def test_lookupdev
20
20
  assert_equal(String, Pcap.lookupdev.class)
21
- puts "Pcaprub default device: #{Pcap.lookupdev}"
21
+ # puts "Pcaprub default device: #{Pcap.lookupdev}"
22
22
  end
23
23
 
24
24
  def test_lookupnet
25
25
  dev = Pcap.lookupdev
26
26
  assert_equal(Array, Pcap.lookupnet(dev).class)
27
27
  net = Pcap.lookupnet(dev)
28
- puts "Pcaprub net (#{dev}): #{net[0]} #{[net[1]].pack("N").unpack("H*")[0]}"
28
+ assert net
29
+ # puts "Pcaprub net (#{dev}): #{net[0]} #{[net[1]].pack("N").unpack("H*")[0]}"
29
30
  end
30
31
 
31
32
  def test_pcap_new
@@ -56,19 +57,21 @@ class Pcap::UnitTest < Test::Unit::TestCase
56
57
  o = Pcap.open_live(d, 65535, true, 1)
57
58
  r = o.inject("X" * 512)
58
59
 
60
+ assert_equal(512, r)
61
+ # UPDATE: TRAVIS CI is now on a new hardware platform.
59
62
  # Travis CI's virtual network interface does not support injection
60
- if ENV['CI']
61
- assert_equal(-1,r)
62
- else
63
- assert_equal(512, r)
64
- end
63
+ #if ENV['CI']
64
+ # assert_equal(-1,r)
65
+ #else
66
+ # assert_equal(512, r)
67
+ #end
65
68
  end
66
69
 
67
70
  def test_pcap_datalink
68
71
  d = Pcap.lookupdev
69
72
  o = Pcap.open_live(d, 65535, true, 1)
70
73
  r = o.datalink
71
- assert_equal(Fixnum, r.class)
74
+ assert_equal(Integer, r.class)
72
75
  end
73
76
 
74
77
  def test_pcap_snapshot
@@ -104,8 +107,8 @@ class Pcap::UnitTest < Test::Unit::TestCase
104
107
  end
105
108
 
106
109
  t.kill
107
- puts "Background thread ticked #{@c} times while capture was running"
108
- puts "Captured #{pkt_count} packets"
110
+ # puts "Background thread ticked #{@c} times while capture was running"
111
+ # puts "Captured #{pkt_count} packets"
109
112
  assert(0 < @c, "Background thread failed to tick while capture was running");
110
113
  true
111
114
  end
@@ -121,7 +124,12 @@ class Pcap::UnitTest < Test::Unit::TestCase
121
124
  d = Pcap.lookupdev
122
125
  o = Pcap.open_live(d, 65535, true, -1)
123
126
  dls = o.listdatalinks
124
- assert_equal(o,o.setdatalink(dls.values.first))
127
+ begin
128
+ assert_equal(o,o.setdatalink(dls.values.first))
129
+ rescue PCAPRUB::LinkTypeError
130
+ print "#{dls} - Data LinkType Binding issue in the environment (Skipping)"
131
+ assert_equal(o,o)
132
+ end
125
133
  end
126
134
 
127
135
  def test_monitor
@@ -131,6 +139,17 @@ class Pcap::UnitTest < Test::Unit::TestCase
131
139
  assert_equal(o, o.setmonitor(true))
132
140
  end
133
141
 
142
+ def test_open_dead
143
+ # No applied filters on OPEN_DEAD just compile checking
144
+ o = Pcap.open_dead(Pcap::DLT_NULL, 65535)
145
+ assert_nothing_raised do
146
+ o.compile("ip host 1.2.3.4")
147
+ end
148
+ assert_raise PCAPRUB::BPFError do
149
+ o.setfilter("ip host 1.2.3.5")
150
+ end
151
+ end
152
+
134
153
  def test_filter
135
154
  d = Pcap.lookupdev
136
155
  o = Pcap.create(d)
@@ -142,4 +161,11 @@ class Pcap::UnitTest < Test::Unit::TestCase
142
161
  o.compile("A non working filter")
143
162
  end
144
163
  end
164
+
165
+ def test_lib_version
166
+ v = Pcap.lib_version.split
167
+ assert_equal "libpcap", v[0]
168
+ assert_equal "version", v[1]
169
+ assert_equal 3, v[2].split('.').size
170
+ end
145
171
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pcaprub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.1
4
+ version: 0.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - shadowbq
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-01-20 00:00:00.000000000 Z
14
+ date: 2021-10-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -107,7 +107,7 @@ dependencies:
107
107
  - - ">="
108
108
  - !ruby/object:Gem::Version
109
109
  version: 4.7.0
110
- description: libpcap bindings for ruby with Ruby1.8, Ruby1.9, Ruby 2.x
110
+ description: libpcap bindings for Ruby 2.x
111
111
  email: shadowbq@gmail.com
112
112
  executables: []
113
113
  extensions:
@@ -151,7 +151,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
151
  requirements:
152
152
  - - ">="
153
153
  - !ruby/object:Gem::Version
154
- version: '0'
154
+ version: '2.0'
155
155
  required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -159,8 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
159
  version: '0'
160
160
  requirements:
161
161
  - libpcap
162
- rubyforge_project:
163
- rubygems_version: 2.4.8
162
+ rubygems_version: 3.1.6
164
163
  signing_key:
165
164
  specification_version: 4
166
165
  summary: libpcap bindings for ruby