pcaprub 0.11.3 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.travis.yml +11 -0
- data/Gemfile +20 -0
- data/README.rdoc +57 -13
- data/Rakefile +71 -49
- data/ext/{pcaprub → pcaprub_c}/extconf.rb +20 -26
- data/ext/{pcaprub → pcaprub_c}/pcaprub.c +405 -139
- data/lib/pcaprub/ext.rb +15 -1
- data/lib/pcaprub/version.rb +7 -7
- data/test/helper.rb +8 -1
- data/test/test_pcaprub_unit.rb +111 -89
- metadata +106 -19
- data/pcaprub.gemspec +0 -60
data/lib/pcaprub/ext.rb
CHANGED
@@ -1 +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/
|
7
|
+
require '2.0/pcaprub_c'
|
8
|
+
elsif RUBY_VERSION =~ /2.1/
|
9
|
+
require '2.1/pcapru_c'
|
10
|
+
else
|
11
|
+
require 'pcaprub_c'
|
12
|
+
end
|
13
|
+
rescue Exception
|
14
|
+
require 'pcaprub_c'
|
15
|
+
end
|
data/lib/pcaprub/version.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
module PCAPRUB #:nodoc:
|
2
|
-
|
2
|
+
|
3
3
|
module VERSION #:nodoc:
|
4
|
-
|
4
|
+
|
5
5
|
MAJOR = 0
|
6
|
-
MINOR =
|
7
|
-
TINY =
|
6
|
+
MINOR = 12
|
7
|
+
TINY = 0
|
8
8
|
|
9
9
|
STRING = [MAJOR, MINOR, TINY].join('.')
|
10
|
-
|
10
|
+
|
11
11
|
end
|
12
12
|
class Pcap
|
13
|
-
def self.version
|
13
|
+
def self.version
|
14
14
|
return PCAPRUB::VERSION::STRING
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
end
|
data/test/helper.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
2
3
|
require 'test/unit'
|
3
|
-
require 'shoulda'
|
4
|
+
require 'shoulda-context'
|
4
5
|
|
5
6
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
7
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
@@ -8,3 +9,9 @@ require 'pcaprub'
|
|
8
9
|
|
9
10
|
class Test::Unit::TestCase
|
10
11
|
end
|
12
|
+
|
13
|
+
if RUBY_VERSION >= "1.9.2"
|
14
|
+
require 'coveralls'
|
15
|
+
Coveralls.wear!
|
16
|
+
end
|
17
|
+
|
data/test/test_pcaprub_unit.rb
CHANGED
@@ -11,94 +11,116 @@ require 'pcaprub'
|
|
11
11
|
#
|
12
12
|
|
13
13
|
class Pcap::UnitTest < Test::Unit::TestCase
|
14
|
+
def test_version
|
15
|
+
assert_equal(String, Pcap.version.class)
|
16
|
+
puts "Pcaprub version: #{Pcap.version}"
|
17
|
+
end
|
14
18
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
19
|
+
def test_lookupdev
|
20
|
+
assert_equal(String, Pcap.lookupdev.class)
|
21
|
+
puts "Pcaprub default device: #{Pcap.lookupdev}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_lookupnet
|
25
|
+
dev = Pcap.lookupdev
|
26
|
+
assert_equal(Array, Pcap.lookupnet(dev).class)
|
27
|
+
net = Pcap.lookupnet(dev)
|
28
|
+
puts "Pcaprub net (#{dev}): #{net[0]} #{[net[1]].pack("N").unpack("H*")[0]}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_pcap_new
|
32
|
+
o = Pcap.new
|
33
|
+
assert_equal(Pcap, o.class)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_pcap_setfilter_bad
|
37
|
+
e = nil
|
38
|
+
o = Pcap.new
|
39
|
+
begin
|
40
|
+
o.setfilter("not ip")
|
41
|
+
rescue ::Exception => e
|
42
|
+
end
|
43
|
+
|
44
|
+
assert_equal(e.class, PCAPRUB::PCAPRUBError)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_pcap_setfilter
|
48
|
+
d = Pcap.lookupdev
|
49
|
+
o = Pcap.open_live(d, 65535, true, 1)
|
50
|
+
r = o.setfilter("not ip")
|
51
|
+
assert_equal(Pcap, r.class)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_pcap_inject
|
55
|
+
d = Pcap.lookupdev
|
56
|
+
o = Pcap.open_live(d, 65535, true, 1)
|
57
|
+
r = o.inject("X" * 512)
|
58
|
+
|
59
|
+
# 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
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_pcap_datalink
|
68
|
+
d = Pcap.lookupdev
|
69
|
+
o = Pcap.open_live(d, 65535, true, 1)
|
70
|
+
r = o.datalink
|
71
|
+
assert_equal(Fixnum, r.class)
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_pcap_snapshot
|
75
|
+
d = Pcap.lookupdev
|
76
|
+
o = Pcap.open_live(d, 1344, true, 1)
|
77
|
+
r = o.snapshot
|
78
|
+
assert_equal(1344, r)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_pcap_stats
|
82
|
+
d = Pcap.lookupdev
|
83
|
+
o = Pcap.open_live(d, 1344, true, 1)
|
84
|
+
r = o.stats
|
85
|
+
assert_equal(Hash, r.class)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_pcap_next
|
89
|
+
d = Pcap.lookupdev
|
90
|
+
o = Pcap.open_live(d, 1344, true, 1)
|
91
|
+
|
92
|
+
@c = 0
|
93
|
+
t = Thread.new { while(true); @c += 1; select(nil, nil, nil, 0.10); end; }
|
94
|
+
|
95
|
+
pkt_count = 0
|
96
|
+
require 'timeout'
|
97
|
+
begin
|
98
|
+
Timeout.timeout(10) do
|
99
|
+
o.each do |pkt|
|
100
|
+
pkt_count += 1
|
101
|
+
end
|
102
|
+
end
|
103
|
+
rescue ::Timeout::Error
|
104
|
+
end
|
105
|
+
|
106
|
+
t.kill
|
107
|
+
puts "Background thread ticked #{@c} times while capture was running"
|
108
|
+
puts "Captured #{pkt_count} packets"
|
109
|
+
assert(0 < @c, "Background thread failed to tick while capture was running");
|
110
|
+
true
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_create_from_primitives
|
114
|
+
d = Pcap.lookupdev
|
115
|
+
o = Pcap.create(d).setsnaplen(65535).settimeout(100).setpromisc(true)
|
116
|
+
assert_equal(o, o.activate)
|
117
|
+
o.close
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_monitor
|
121
|
+
return if RUBY_PLATFORM =~ /mingw|win/
|
122
|
+
d = Pcap.lookupdev
|
123
|
+
o = Pcap.create(d)
|
124
|
+
assert_equal(o, o.setmonitor(true))
|
125
|
+
end
|
104
126
|
end
|
metadata
CHANGED
@@ -1,30 +1,114 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pcaprub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.12.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- shadowbq
|
8
|
+
- crondaemon
|
9
|
+
- jmcavinee
|
10
|
+
- unmarshal
|
9
11
|
autorequire:
|
10
12
|
bindir: bin
|
11
13
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
14
|
-
|
14
|
+
date: 2014-08-10 00:00:00.000000000 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: bundler
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: !binary |-
|
23
|
+
MS4z
|
24
|
+
type: :development
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: !binary |-
|
31
|
+
MS4z
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: rake
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: !binary |-
|
39
|
+
MC45LjI=
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: !binary |-
|
47
|
+
MC45LjI=
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rake-compiler
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: !binary |-
|
55
|
+
MC42LjA=
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: !binary |-
|
63
|
+
MC42LjA=
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: shoulda-context
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ~>
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: !binary |-
|
71
|
+
MS4xLjY=
|
72
|
+
type: :development
|
73
|
+
prerelease: false
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ~>
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: !binary |-
|
79
|
+
MS4xLjY=
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: minitest
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ~>
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: !binary |-
|
87
|
+
NC43LjA=
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ~>
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: !binary |-
|
95
|
+
NC43LjA=
|
96
|
+
description: libpcap bindings for ruby with Ruby1.8, Ruby1.9, Ruby 2.x
|
15
97
|
email: shadowbq@gmail.com
|
16
98
|
executables: []
|
17
99
|
extensions:
|
18
|
-
- ext/
|
100
|
+
- ext/pcaprub_c/extconf.rb
|
19
101
|
extra_rdoc_files:
|
20
102
|
- FAQ.rdoc
|
21
103
|
- LICENSE
|
22
104
|
- README.rdoc
|
23
105
|
- USAGE.rdoc
|
24
|
-
- ext/
|
106
|
+
- ext/pcaprub_c/pcaprub.c
|
25
107
|
files:
|
26
108
|
- .document
|
109
|
+
- .travis.yml
|
27
110
|
- FAQ.rdoc
|
111
|
+
- Gemfile
|
28
112
|
- LICENSE
|
29
113
|
- README.rdoc
|
30
114
|
- Rakefile
|
@@ -33,38 +117,41 @@ files:
|
|
33
117
|
- examples/file_cap.rb
|
34
118
|
- examples/simple_cap.rb
|
35
119
|
- examples/telnet-raw.pcap
|
36
|
-
- ext/
|
37
|
-
- ext/
|
120
|
+
- ext/pcaprub_c/extconf.rb
|
121
|
+
- ext/pcaprub_c/pcaprub.c
|
38
122
|
- lib/pcaprub.rb
|
39
123
|
- lib/pcaprub/common.rb
|
40
124
|
- lib/pcaprub/ext.rb
|
41
125
|
- lib/pcaprub/version.rb
|
42
|
-
- pcaprub.gemspec
|
43
126
|
- test/helper.rb
|
44
127
|
- test/test_pcaprub.rb
|
45
128
|
- test/test_pcaprub_unit.rb
|
46
|
-
homepage:
|
47
|
-
licenses:
|
129
|
+
homepage: https://github.com/pcaprub/pcaprub
|
130
|
+
licenses:
|
131
|
+
- LGPL-2.1
|
132
|
+
metadata: {}
|
48
133
|
post_install_message:
|
49
134
|
rdoc_options: []
|
50
135
|
require_paths:
|
51
136
|
- lib
|
52
137
|
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
54
138
|
requirements:
|
55
139
|
- - ! '>='
|
56
140
|
- !ruby/object:Gem::Version
|
57
141
|
version: '0'
|
58
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
143
|
requirements:
|
61
144
|
- - ! '>='
|
62
145
|
- !ruby/object:Gem::Version
|
63
146
|
version: '0'
|
64
|
-
requirements:
|
65
|
-
|
66
|
-
|
147
|
+
requirements:
|
148
|
+
- libpcap
|
149
|
+
rubyforge_project:
|
150
|
+
rubygems_version: 2.4.1
|
67
151
|
signing_key:
|
68
|
-
specification_version:
|
152
|
+
specification_version: 4
|
69
153
|
summary: libpcap bindings for ruby
|
70
|
-
test_files:
|
154
|
+
test_files:
|
155
|
+
- test/helper.rb
|
156
|
+
- test/test_pcaprub.rb
|
157
|
+
- test/test_pcaprub_unit.rb
|
data/pcaprub.gemspec
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = "pcaprub"
|
8
|
-
s.version = "0.11.3"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["shadowbq"]
|
12
|
-
s.date = "2012-11-27"
|
13
|
-
s.description = "libpcap bindings for ruby compat with JRUBY Ruby1.8 Ruby1.9"
|
14
|
-
s.email = "shadowbq@gmail.com"
|
15
|
-
s.extensions = ["ext/pcaprub/extconf.rb"]
|
16
|
-
s.extra_rdoc_files = [
|
17
|
-
"FAQ.rdoc",
|
18
|
-
"LICENSE",
|
19
|
-
"README.rdoc",
|
20
|
-
"USAGE.rdoc",
|
21
|
-
"ext/pcaprub/pcaprub.c"
|
22
|
-
]
|
23
|
-
s.files = [
|
24
|
-
".document",
|
25
|
-
"FAQ.rdoc",
|
26
|
-
"LICENSE",
|
27
|
-
"README.rdoc",
|
28
|
-
"Rakefile",
|
29
|
-
"USAGE.rdoc",
|
30
|
-
"examples/dead_cap.rb",
|
31
|
-
"examples/file_cap.rb",
|
32
|
-
"examples/simple_cap.rb",
|
33
|
-
"examples/telnet-raw.pcap",
|
34
|
-
"ext/pcaprub/extconf.rb",
|
35
|
-
"ext/pcaprub/pcaprub.c",
|
36
|
-
"lib/pcaprub.rb",
|
37
|
-
"lib/pcaprub/common.rb",
|
38
|
-
"lib/pcaprub/ext.rb",
|
39
|
-
"lib/pcaprub/version.rb",
|
40
|
-
"pcaprub.gemspec",
|
41
|
-
"test/helper.rb",
|
42
|
-
"test/test_pcaprub.rb",
|
43
|
-
"test/test_pcaprub_unit.rb"
|
44
|
-
]
|
45
|
-
s.homepage = "http://github.com/shadowbq/pcaprub"
|
46
|
-
s.require_paths = ["lib"]
|
47
|
-
s.rubyforge_project = "pcaprub"
|
48
|
-
s.rubygems_version = "1.8.24"
|
49
|
-
s.summary = "libpcap bindings for ruby"
|
50
|
-
|
51
|
-
if s.respond_to? :specification_version then
|
52
|
-
s.specification_version = 3
|
53
|
-
|
54
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
55
|
-
else
|
56
|
-
end
|
57
|
-
else
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|