teamcymru 1.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f81d63bbaa1697e14e0f5a3d38b11de442bafc35
4
+ data.tar.gz: daa6ff74ea7d82f3afbe2be651e1a7f45700746e
5
+ SHA512:
6
+ metadata.gz: e540639d106916688115a2f72da46acac7b5bb2279551d2590906f38e43becd640e756a8116958c791c8f9d374190074ce21e79ac275734cf1ba95beaeba5272
7
+ data.tar.gz: c8ccbe8d09d0500a60e631e543bba0c3ba3495a0f36cb7e6d8f33acbf45198b84ad316bcef839e22f02baf564ba43428dee458bf2c0f74565a211cfc041f5ba6
checksums.yaml.gz.sig ADDED
Binary file
data.tar.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ �H�ܷ\�R0)<�進:�zo��C����h���C��}�e��L���j����(�~)�Vu���qo����֟wLWV�����ny��D-�
2
+ �l��6l������� +(P�w�`�}������(]���.�Z�1eL2��I������os�}K�
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in teamcymru.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 chrislee35
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # Teamcymru
2
+
3
+ The team-cymru gem connects to several of Team Cymru's public services: bogon lists, IP to ASN mappings, and malware hash checking.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'teamcymru'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install teamcymru
18
+
19
+ ## Usage
20
+
21
+ c = TeamCymru::ASNClient.new
22
+ res = c.lookup("130.207.244.251").to_s => "2637 | 130.207.244.251 | 130.207.0.0/16 | US | arin | 1988-10-10 | | GEORGIA-TECH - Georgia Institute of Technology"
23
+
24
+ c = TeamCymru::Bogon.new
25
+ c.bogon?("127.0.4.1") => true
26
+
27
+ c = TeamCymru::Malware.new
28
+ c.lookup("cbed16069043a0bf3c92fff9a99cccdc") => MalwareResult instance, .hash will be the hash, .timestamp will be the result time, and .percent_detect will be the percent of AV that detects the sample
29
+
30
+ c = TeamCymru::TwitterFeed.new
31
+ c.messages.each do |date, tweet|
32
+ puts date
33
+ puts tweet
34
+ puts
35
+ end
36
+
37
+ ## Contributing
38
+
39
+ 1. Fork it
40
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
41
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
42
+ 4. Push to the branch (`git push origin my-new-feature`)
43
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << 'lib'
8
+ t.test_files = FileList['test/test_*.rb']
9
+ t.verbose = true
10
+ end
11
+
12
+ task :default => :test
data/bin/cymru_asn ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ require 'teamcymru'
3
+
4
+ c = TeamCymru::ASNClient.new
5
+ if ARGV.length > 0
6
+ ARGV.each do |ipdata|
7
+ puts c.lookup(ipdata)
8
+ end
9
+ else
10
+ $stdin.each_line do |ipdata|
11
+ puts c.lookup(ipdata.chomp)
12
+ end
13
+ end
data/bin/cymru_bogon ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ require 'teamcymru'
3
+
4
+ c = TeamCymru::Bogon.new
5
+ if ARGV.length > 0
6
+ ARGV.each do |ipdata|
7
+ puts ipdata+" "+c.bogon?(ipdata).to_s
8
+ end
9
+ else
10
+ $stdin.each_line do |ipdata|
11
+ puts ipdata.chomp+" "+c.bogon?(ipdata.chomp).to_s
12
+ end
13
+ end
data/bin/cymru_malware ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ require 'teamcymru'
3
+
4
+ c = TeamCymru::Malware.new
5
+ if ARGV.length > 0
6
+ ARGV.each do |hash|
7
+ puts c.lookup(hash)
8
+ end
9
+ else
10
+ $stdin.each_line do |hash|
11
+ puts c.lookup(hash.chomp)
12
+ end
13
+ end
data/bin/cymru_twitter ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ require 'teamcymru'
3
+ require 'configparser'
4
+
5
+ config = ConfigParser.new("#{ENV['HOME']}/.teamcymru")
6
+ config = {
7
+ :consumer_key => config['teamcymru']['consumer_key'],
8
+ :consumer_secret => config['teamcymru']['consumer_secret'],
9
+ :oauth_token => config['teamcymru']['oauth_token'],
10
+ :oauth_token_secret => config['teamcymru']['oauth_token_secret']
11
+ }
12
+ c = TeamCymru::TwitterFeed.new(config)
13
+ c.messages.each do |msg|
14
+ puts msg[0]
15
+ puts msg[1]
16
+ puts
17
+ end
data/lib/teamcymru.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "teamcymru/version"
2
+ require "teamcymru/asnclient"
3
+ require 'teamcymru/bogon'
4
+ require 'teamcymru/malware'
5
+ require 'teamcymru/twitterfeed'
@@ -0,0 +1,77 @@
1
+ require 'ipaddr'
2
+ require 'cache' # gem's name is ruby-cache
3
+ require 'structformatter'
4
+
5
+ module TeamCymru
6
+ class ASNRecord < Struct.new(:asn, :ip, :cidr, :cc, :nic, :alloc, :data, :org)
7
+ def to_s
8
+ "#{self.asn.ljust(8)}| #{self.ip.ljust(17)}| #{self.cidr.ljust(20)}| #{self.cc.ljust(3)}| #{self.nic.ljust(9)}| #{self.alloc.ljust(11)}| #{self.data} | #{self.org}"
9
+ end
10
+ def ASNRecord::from_s(str)
11
+ args = str.chomp.split(/\|/).map{|x| x.strip}
12
+ if args.length == 7
13
+ args.insert(6,'')
14
+ elsif args.length == 5 # used for AS lookups
15
+ args.insert(2,'')
16
+ args.insert(2,'')
17
+ args.insert(6,'')
18
+ end
19
+ ASNRecord.new(*args)
20
+ end
21
+ def cached=(cached)
22
+ @cached = cached
23
+ end
24
+ def from_cache?
25
+ @cached || false
26
+ end
27
+ end
28
+
29
+ class ASNClient
30
+ def initialize(server='whois.cymru.com', port=43)
31
+ @server = server
32
+ @port = port
33
+ @cache = Cache.new(nil,nil,10000,24*60*60)
34
+ end
35
+
36
+ def lookup(iplines)
37
+ t = TCPSocket.new(@server,@port)
38
+ t.puts("begin")
39
+ t.puts("verbose")
40
+ t.readline
41
+ oneshot = false
42
+ if iplines.class == String
43
+ iplines = [iplines]
44
+ oneshot = true
45
+ end
46
+ recs = []
47
+ iplines.each do |ipdata|
48
+ ip,data = ipdata.split(/ /,2)
49
+ rec = nil
50
+ @cache.each_key do |cidr|
51
+ if cidr.include?(ip)
52
+ rec = @cache[cidr]
53
+ rec.ip = ip
54
+ rec.data = data
55
+ rec.cached = true
56
+ break
57
+ end
58
+ end
59
+ unless rec
60
+ t.puts(ipdata)
61
+ t.flush
62
+ l = t.readline
63
+ rec = ASNRecord.from_s(l)
64
+ cidr = IPAddr.new(rec.cidr) if rec.cidr != ''
65
+ if cidr
66
+ @cache[cidr] = rec
67
+ end
68
+ end
69
+ recs << rec
70
+ end
71
+ t.puts("end")
72
+ t.close
73
+ return recs[0] if oneshot
74
+ recs
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,46 @@
1
+ # Uses Team Cymru's DNS-based bogon lookup system to determine
2
+ # if a given IP is routed or not.
3
+ #
4
+ # Author:: Chris Lee (rubygems@chrislee.dhs.org)
5
+
6
+ require 'resolv'
7
+ module TeamCymru
8
+ # This class implements the lookup of bogon via DNS
9
+ class Bogon
10
+ @@bogon = 'bogons.cymru.com'
11
+ @@v4fullbogon = 'v4.fullbogons.cymru.com'
12
+ @@v6fullbogon = 'v6.fullbogons.cymru.com'
13
+
14
+ # tests if the given ip is a bogon
15
+ # fullbogon flag selects which bogon list to use
16
+ # see http://www.team-cymru.org/Services/Bogons/dns.html for more details
17
+ def bogon?(ip,fullbogon=true)
18
+ # detect if this is ipv4 or ipv6 or bad
19
+ begin
20
+ ip = IPAddr.new(ip)
21
+ if ip.ipv6? and fullbogon
22
+ label = ip.to_string.gsub(/:/,'').split(//).reverse.join(".")+"."+@@v6fullbogon
23
+ elsif ip.ipv4? and fullbogon
24
+ label = ip.to_s.split(/\./).reverse.join(".")+"."+@@v4fullbogon
25
+ elsif ip.ipv4? and not fullbogon
26
+ label = ip.to_s.split(/\./).reverse.join(".")+"."+@@bogon
27
+ else
28
+ puts "Unsupported combination: ipv4=#{ip.ipv4?} and fullbogon=#{fullbogon}"
29
+ return false
30
+ end
31
+ addr = Resolv.getaddress(label)
32
+ if addr
33
+ return true
34
+ else
35
+ return false
36
+ end
37
+ rescue ArgumentError => e
38
+ puts e
39
+ return false
40
+ rescue Resolv::ResolvError
41
+ return false
42
+ end
43
+ end
44
+ alias :lookup :bogon?
45
+ end
46
+ end
@@ -0,0 +1,33 @@
1
+ require 'socket'
2
+ require 'structformatter'
3
+
4
+ module TeamCymru
5
+ class MalwareResult < Struct.new(:hash, :timestamp, :percent_detect)
6
+ def initialize(hash, timestamp, percent_detect)
7
+ self.hash = hash
8
+ self.timestamp = Time.at(timestamp.to_i)
9
+ self.percent_detect = (percent_detect == "NO_DATA") ? 0 : percent_detect.to_i
10
+ end
11
+ end
12
+
13
+ class Malware
14
+ def initialize(server='hash.cymru.com', port=43)
15
+ @server = server
16
+ @port = port
17
+ end
18
+
19
+ def lookup(hashes)
20
+ if hashes.class == Array
21
+ hashes = hashes.join("\n")
22
+ end
23
+ res = []
24
+ t = TCPSocket.new(@server,@port)
25
+ t.write("begin\nverbose\n#{hashes}\nend\n")
26
+ t.each_line do |l|
27
+ next if l =~ /^#/
28
+ res << MalwareResult.new(*(l.chomp.split(/\s+/,3)))
29
+ end
30
+ res
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,23 @@
1
+ require 'twitter'
2
+
3
+ module TeamCymru
4
+ class TwitterFeed
5
+ attr_reader :messages
6
+ def initialize(config)
7
+ @twitname = "teamcymru"
8
+ @messages = []
9
+ @client = Twitter::Client.new(config)
10
+ @client.user_timeline(@twitname).each do |m|
11
+ @messages << [m.created_at,m.text]
12
+ end
13
+ end
14
+
15
+ def refresh
16
+ @messages = []
17
+ @client.user_timeline(@twitname).each do |m|
18
+ @messages << [m.created_at,m.text]
19
+ end
20
+ @messages
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module TeamCymru
2
+ VERSION = "1.0.0"
3
+ end
data/teamcymru.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'teamcymru/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "teamcymru"
8
+ spec.version = TeamCymru::VERSION
9
+ spec.authors = ["chrislee35"]
10
+ spec.email = ["rubygems@chrislee.dhs.org"]
11
+ spec.description = %q{Team Cymru provides a variety of services for network and security operators. This Rubygem tries to wrap several of these services into a Ruby API.}
12
+ spec.summary = %q{Queries Team Cymru's ASN, Malware, and FullBogon services}
13
+ spec.homepage = "http://github.com/chrislee35/teamcymru"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "structformatter", "~> 0.0.1"
22
+ spec.add_runtime_dependency "twitter", "~> 4.7.0"
23
+ spec.add_runtime_dependency "ruby-cache", ">= 0.3.0"
24
+ spec.add_runtime_dependency "json", ">= 1.4.3"
25
+ spec.add_runtime_dependency "configparser", "~> 0.1.1"
26
+ spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "rake"
28
+
29
+ spec.signing_key = "#{File.dirname(__FILE__)}/../gem-private_key.pem"
30
+ spec.cert_chain = ["#{File.dirname(__FILE__)}/../gem-public_cert.pem"]
31
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.expand_path('../../lib/teamcymru.rb', __FILE__)
@@ -0,0 +1,59 @@
1
+ unless Kernel.respond_to?(:require_relative)
2
+ module Kernel
3
+ def require_relative(path)
4
+ require File.join(File.dirname(caller[0]), path.to_str)
5
+ end
6
+ end
7
+ end
8
+
9
+ require_relative 'helper'
10
+ require 'configparser'
11
+
12
+ class TestTeamCymru < Test::Unit::TestCase
13
+ def test_performs_ASN_queries
14
+ c = TeamCymru::ASNClient.new
15
+ res = c.lookup("130.207.244.251")
16
+ assert_equal("2637 | 130.207.244.251 | 130.207.0.0/16 | US | arin | 1988-10-10 | | GEORGIA-TECH - Georgia Institute of Technology",res.to_s)
17
+ assert(! res.from_cache?)
18
+ # this should pull from cache
19
+ res = c.lookup("130.207.244.252")
20
+ assert_equal("2637 | 130.207.244.252 | 130.207.0.0/16 | US | arin | 1988-10-10 | | GEORGIA-TECH - Georgia Institute of Technology",res.to_s)
21
+ assert(res.from_cache?)
22
+ end
23
+
24
+ def test_lookup_bogons
25
+ c = TeamCymru::Bogon.new
26
+ assert(c.bogon?("127.0.5.27"))
27
+ assert(c.bogon?("2001:DB8:FEEB:DEEF::242"))
28
+ assert(! c.bogon?("130.207.244.251"))
29
+ assert(! c.bogon?("2a00:1450:8003::93"))
30
+ end
31
+
32
+ def test_lookup_malware_hashes
33
+ c = TeamCymru::Malware.new
34
+ hashes = ["7697561ccbbdd1661c25c86762117613","cbed16069043a0bf3c92fff9a99cccdc"]
35
+ res = c.lookup(hashes)
36
+ assert_equal("7697561ccbbdd1661c25c86762117613",res[0].hash)
37
+ assert_equal(0,res[0].percent_detect)
38
+ assert_equal("cbed16069043a0bf3c92fff9a99cccdc",res[1].hash)
39
+ assert(res[1].percent_detect > 50)
40
+ end
41
+
42
+ def test_display_twitter_feed
43
+ if(File.exists?("#{ENV['HOME']}/.teamcymru"))
44
+ config = ConfigParser.new("#{ENV['HOME']}/.teamcymru")
45
+ config = {
46
+ :consumer_key => config['teamcymru']['consumer_key'],
47
+ :consumer_secret => config['teamcymru']['consumer_secret'],
48
+ :oauth_token => config['teamcymru']['oauth_token'],
49
+ :oauth_token_secret => config['teamcymru']['oauth_token_secret']
50
+ }
51
+ c = TeamCymru::TwitterFeed.new(config)
52
+ msg = c.messages[0]
53
+ assert_equal(2, msg.length)
54
+ assert_equal(Time, msg[0].class)
55
+ assert_equal(String, msg[1].class)
56
+ assert((Time.now - msg[0]) < (30*24*60*60))
57
+ end
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,189 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: teamcymru
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - chrislee35
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDYjCCAkqgAwIBAgIBADANBgkqhkiG9w0BAQUFADBXMREwDwYDVQQDDAhydWJ5
14
+ Z2VtczEYMBYGCgmSJomT8ixkARkWCGNocmlzbGVlMRMwEQYKCZImiZPyLGQBGRYD
15
+ ZGhzMRMwEQYKCZImiZPyLGQBGRYDb3JnMB4XDTEzMDUyMjEyNTk0N1oXDTE0MDUy
16
+ MjEyNTk0N1owVzERMA8GA1UEAwwIcnVieWdlbXMxGDAWBgoJkiaJk/IsZAEZFghj
17
+ aHJpc2xlZTETMBEGCgmSJomT8ixkARkWA2RoczETMBEGCgmSJomT8ixkARkWA29y
18
+ ZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANcPrx8BZiWIR9xWWG8I
19
+ tqR538tS1t+UJ4FZFl+1vrtU9TiuWX3Vj37TwUpa2fFkziK0n5KupVThyEhcem5m
20
+ OGRjvgrRFbWQJSSscIKOpwqURHVKRpV9gVz/Hnzk8S+xotUR1Buo3Ugr+I1jHewD
21
+ Cgr+y+zgZbtjtHsJtsuujkOcPhEjjUinj68L9Fz9BdeJQt+IacjwAzULix6jWCht
22
+ Uc+g+0z8Esryca2G6I1GsrgX6WHw8dykyQDT9dCtS2flCOwSC1R0K5T/xHW54f+5
23
+ wcw8mm53KLNe+tmgVC6ZHyME+qJsBnP6uxF0aTEnGA/jDBQDhQNTF0ZP/abzyTsL
24
+ zjUCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFO8w
25
+ +aeP7T6kVJblCg6eusOII9DfMA0GCSqGSIb3DQEBBQUAA4IBAQBCQyRJLXsBo2Fy
26
+ 8W6e/W4RemQRrlAw9DK5O6U71JtedVob2oq+Ob+zmS+PifE2+L+3RiJ2H6VTlOzi
27
+ x+A061MUXhGraqVq4J2FC8kt4EQywAD0P0Ta5GU24CGSF08Y3GkJy1Sa4XqTC2YC
28
+ o51s7JP+tkCCtpVYSdzJhTllieRAWBpGV1dtaoeUKE6tYPMBkosxSRcVGczk/Sc3
29
+ 7eQCpexYy9JlUBI9u3BqIY9E+l+MSn8ihXSPmyK0DgrhaCu+voaSFVOX6Y+B5qbo
30
+ jLXMQu2ZgISYwXNjNbGVHehut82U7U9oiHoWcrOGazaRUmGO9TXP+aJLH0gw2dcK
31
+ AfMglXPi
32
+ -----END CERTIFICATE-----
33
+ date: 2013-06-06 00:00:00.000000000 Z
34
+ dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: structformatter
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 0.0.1
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 0.0.1
49
+ - !ruby/object:Gem::Dependency
50
+ name: twitter
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 4.7.0
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 4.7.0
63
+ - !ruby/object:Gem::Dependency
64
+ name: ruby-cache
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 0.3.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 0.3.0
77
+ - !ruby/object:Gem::Dependency
78
+ name: json
79
+ requirement: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: 1.4.3
84
+ type: :runtime
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: 1.4.3
91
+ - !ruby/object:Gem::Dependency
92
+ name: configparser
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: 0.1.1
98
+ type: :runtime
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: 0.1.1
105
+ - !ruby/object:Gem::Dependency
106
+ name: bundler
107
+ requirement: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: '1.3'
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: '1.3'
119
+ - !ruby/object:Gem::Dependency
120
+ name: rake
121
+ requirement: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ type: :development
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ description: Team Cymru provides a variety of services for network and security operators. This
134
+ Rubygem tries to wrap several of these services into a Ruby API.
135
+ email:
136
+ - rubygems@chrislee.dhs.org
137
+ executables:
138
+ - cymru_asn
139
+ - cymru_bogon
140
+ - cymru_malware
141
+ - cymru_twitter
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - .gitignore
146
+ - Gemfile
147
+ - LICENSE.txt
148
+ - README.md
149
+ - Rakefile
150
+ - bin/cymru_asn
151
+ - bin/cymru_bogon
152
+ - bin/cymru_malware
153
+ - bin/cymru_twitter
154
+ - lib/teamcymru.rb
155
+ - lib/teamcymru/asnclient.rb
156
+ - lib/teamcymru/bogon.rb
157
+ - lib/teamcymru/malware.rb
158
+ - lib/teamcymru/twitterfeed.rb
159
+ - lib/teamcymru/version.rb
160
+ - teamcymru.gemspec
161
+ - test/helper.rb
162
+ - test/test_team-cymru.rb
163
+ homepage: http://github.com/chrislee35/teamcymru
164
+ licenses:
165
+ - MIT
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubyforge_project:
183
+ rubygems_version: 2.0.3
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: Queries Team Cymru's ASN, Malware, and FullBogon services
187
+ test_files:
188
+ - test/helper.rb
189
+ - test/test_team-cymru.rb
metadata.gz.sig ADDED
Binary file