pcapr 0.0.4 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|