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
         |