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 +5 -5
- data/.travis.yml +15 -6
- data/Gemfile +7 -11
- data/README.rdoc +6 -10
- data/Rakefile +11 -9
- data/ext/pcaprub_c/extconf.rb +29 -4
- data/ext/pcaprub_c/pcaprub.c +66 -5
- data/lib/pcaprub/ext.rb +6 -6
- data/lib/pcaprub/version.rb +1 -1
- data/test/test_helper.rb +2 -6
- data/test/test_pcaprub_unit.rb +38 -12
- metadata +5 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c73d004b9ff68405a37b7f4a9466c187f3c5fd30110b8688ef9ec35a1a58954c
|
4
|
+
data.tar.gz: 48d2147906a775f47b76192b6c407fd9d2393b39a7383c08e2e14270daded436
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
-
|
6
|
-
-
|
7
|
-
- 2.
|
8
|
-
-
|
9
|
-
|
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
|
-
|
14
|
-
|
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
|
-
|
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
|
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
|
-
|
31
|
-
Ruby 1.
|
32
|
-
Ruby
|
33
|
-
|
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
|
13
|
-
spec.version
|
14
|
-
spec.authors
|
15
|
-
spec.email
|
16
|
-
spec.description
|
17
|
-
spec.summary
|
18
|
-
spec.homepage
|
19
|
-
spec.requirements
|
20
|
-
spec.license
|
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'
|
data/ext/pcaprub_c/extconf.rb
CHANGED
@@ -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)
|
data/ext/pcaprub_c/pcaprub.c
CHANGED
@@ -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
|
-
|
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
|
-
|
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 =
|
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 =~ /
|
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
|
data/lib/pcaprub/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
data/test/test_pcaprub_unit.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
62
|
-
else
|
63
|
-
|
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(
|
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
|
-
|
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.
|
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:
|
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
|
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
|
-
|
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
|