pcapr 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/pcapr/pcapr.rb +21 -10
- data/lib/pcapr/version.rb +1 -1
- data/pcapr.gemspec +2 -2
- data/spec/pcapr_spec.rb +44 -0
- metadata +5 -5
data/lib/pcapr/pcapr.rb
CHANGED
@@ -3,6 +3,7 @@ require 'nokogiri'
|
|
3
3
|
require 'patron'
|
4
4
|
require 'digest'
|
5
5
|
require 'timeout'
|
6
|
+
require 'uri'
|
6
7
|
|
7
8
|
require 'fileutils'
|
8
9
|
|
@@ -15,13 +16,17 @@ class Pcapr
|
|
15
16
|
|
16
17
|
#驱动浏览器底层的接口, patron对象
|
17
18
|
@driver = Patron::Session.new
|
18
|
-
@driver.timeout =
|
19
|
+
@driver.timeout = 60 * 60 # 1 hour
|
20
|
+
@driver.connect_timeout = 10000
|
19
21
|
@driver.base_url = "http://www.pcapr.net"
|
20
22
|
@driver.handle_cookies
|
21
23
|
|
22
24
|
@protos = nil
|
23
25
|
end
|
24
26
|
|
27
|
+
# for spec test
|
28
|
+
attr_reader :driver
|
29
|
+
|
25
30
|
attr_accessor :logger
|
26
31
|
|
27
32
|
def login
|
@@ -45,9 +50,17 @@ class Pcapr
|
|
45
50
|
end
|
46
51
|
|
47
52
|
def pcap_urls(proto)
|
48
|
-
|
49
|
-
|
50
|
-
|
53
|
+
ret = []
|
54
|
+
proto_url = URI.encode("/browse?proto=#{proto}")
|
55
|
+
url = @driver.get(proto_url).body
|
56
|
+
nokogiri_parser = Nokogiri::HTML(url)
|
57
|
+
ret += nokogiri_parser.css("ul#p-main div.p-body>a").collect { |link| link['href'] }
|
58
|
+
if nokogiri_parser.css('li.p-overflow a').size > 0
|
59
|
+
href = nokogiri_parser.css('li.p-overflow a').attr('href').value
|
60
|
+
url = @driver.get( "/browse" + href.gsub(" ","%20") ).body
|
61
|
+
ret += Nokogiri::HTML(url).css('li.l0 div.p-body>a').collect { |link| link['href'] }
|
62
|
+
end
|
63
|
+
ret
|
51
64
|
end
|
52
65
|
|
53
66
|
#获取该数据包文件
|
@@ -69,16 +82,14 @@ class Pcapr
|
|
69
82
|
logger.info "proto: #{proto}, downloading...(pcap save as: #{proto_dir}"
|
70
83
|
pcap_urls(proto).each do |pcap_url|
|
71
84
|
file = File.join( proto_dir, File.basename(pcap_url).gsub(/\.html$/,"").tr("\\/:*?\"<>|"," ") )
|
72
|
-
logger.info " pcap file: #{
|
85
|
+
logger.info " pcap file: #{pcap_url} save at '#{file}'"
|
73
86
|
begin
|
74
|
-
|
75
|
-
pcap_file(pcap_url, file)
|
76
|
-
end
|
87
|
+
pcap_file(pcap_url, file)
|
77
88
|
logger.debug " save ok"
|
89
|
+
rescue Patron::TimeoutError
|
90
|
+
logger.error " save fail: timeout after #{@driver.timeout} seconds"
|
78
91
|
rescue =>e
|
79
92
|
logger.error " save fail: #{$!}"
|
80
|
-
rescue Timeout::Error
|
81
|
-
logger.error " save fail: timeout in 2 hours"
|
82
93
|
end
|
83
94
|
end
|
84
95
|
end
|
data/lib/pcapr/version.rb
CHANGED
data/pcapr.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ["yafei LI"]
|
9
9
|
s.email = ["lyfi2003@gmail.com"]
|
10
10
|
s.homepage = ""
|
11
|
-
s.summary = %q{a
|
12
|
-
s.description = %q{a
|
11
|
+
s.summary = %q{a library for downloading all pcap files from pcapr.net}
|
12
|
+
s.description = %q{a library for downloading all pcap files from pcapr.net}
|
13
13
|
|
14
14
|
s.rubyforge_project = "pcapr"
|
15
15
|
|
data/spec/pcapr_spec.rb
CHANGED
@@ -35,11 +35,55 @@ describe Pcapr do
|
|
35
35
|
@o.protos.should be_include("m2pa (id 12)")
|
36
36
|
end
|
37
37
|
|
38
|
+
it "should get pcapfile urls when proto include quote" do
|
39
|
+
@o.login
|
40
|
+
urls = @o.pcap_urls("afs (rx)")
|
41
|
+
urls.size.should >= 7
|
42
|
+
urls.should be_include("/view/tyson.key/2009/10/0/6/LiquidWar_Lobby_1_00002_20091101140004.pcap.html")
|
43
|
+
urls = @o.pcap_urls("fc els")
|
44
|
+
urls.size.should > 0
|
45
|
+
urls = @o.pcap_urls("gtp <ftp>")
|
46
|
+
urls.size.should > 0
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should support more pcap urls" do
|
50
|
+
@o.login
|
51
|
+
urls = @o.pcap_urls("dns")
|
52
|
+
urls.size.should == 34
|
53
|
+
end
|
54
|
+
|
38
55
|
it "all_proto should get auth.cap" do
|
39
56
|
@o.login
|
40
57
|
@o.pcap_urls("dns").should be_include("/view/siim/2011/11/3/7/capture.pcap.html")
|
41
58
|
end
|
42
59
|
|
60
|
+
#~ it "should have pcap files more than 3000(excute slow)" do
|
61
|
+
#~ @o.login
|
62
|
+
#~ files = []
|
63
|
+
#~ @o.protos.each_with_index do |proto,i|
|
64
|
+
#~ @o.logger.info("proto: #{proto}, index=#{i}")
|
65
|
+
#~ files += @o.pcap_urls(proto)
|
66
|
+
#~ end
|
67
|
+
#~ files.should >= 3085
|
68
|
+
#~ end
|
69
|
+
|
70
|
+
it "file get it but timeout" do
|
71
|
+
begin
|
72
|
+
@o.login
|
73
|
+
pcap_url = "/view/sudhakar_gajjala/2010/6/1/21/6462.pcap.html"
|
74
|
+
file = File.join($helper_dir, 'timeout.pcap')
|
75
|
+
@o.driver.timeout = 1
|
76
|
+
lambda { @o.pcap_file(pcap_url,file) }.should raise_error(Patron::TimeoutError)
|
77
|
+
ensure
|
78
|
+
@o.driver.timeout = 60*60
|
79
|
+
File.delete(file) if File.exist?(file)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
it "driver timeout default is 1 hour" do
|
84
|
+
@o.driver.timeout.should == 60*60
|
85
|
+
end
|
86
|
+
|
43
87
|
it "file get it " do
|
44
88
|
@o.login
|
45
89
|
pcap_url = "/view/siim/2011/11/3/7/capture.pcap.html"
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 6
|
9
|
+
version: 0.0.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- yafei LI
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-03-
|
17
|
+
date: 2012-03-14 00:00:00 +08:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: "0"
|
44
44
|
type: :runtime
|
45
45
|
version_requirements: *id002
|
46
|
-
description: a
|
46
|
+
description: a library for downloading all pcap files from pcapr.net
|
47
47
|
email:
|
48
48
|
- lyfi2003@gmail.com
|
49
49
|
executables:
|
@@ -96,7 +96,7 @@ rubyforge_project: pcapr
|
|
96
96
|
rubygems_version: 1.3.7
|
97
97
|
signing_key:
|
98
98
|
specification_version: 3
|
99
|
-
summary: a
|
99
|
+
summary: a library for downloading all pcap files from pcapr.net
|
100
100
|
test_files:
|
101
101
|
- spec/pcapr_spec.rb
|
102
102
|
- spec/spec_helper.rb
|