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 +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +2 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +43 -0
- data/Rakefile +12 -0
- data/bin/cymru_asn +13 -0
- data/bin/cymru_bogon +13 -0
- data/bin/cymru_malware +13 -0
- data/bin/cymru_twitter +17 -0
- data/lib/teamcymru.rb +5 -0
- data/lib/teamcymru/asnclient.rb +77 -0
- data/lib/teamcymru/bogon.rb +46 -0
- data/lib/teamcymru/malware.rb +33 -0
- data/lib/teamcymru/twitterfeed.rb +23 -0
- data/lib/teamcymru/version.rb +3 -0
- data/teamcymru.gemspec +31 -0
- data/test/helper.rb +2 -0
- data/test/test_team-cymru.rb +59 -0
- metadata +189 -0
- metadata.gz.sig +0 -0
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
data/.gitignore
ADDED
data/Gemfile
ADDED
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
data/bin/cymru_asn
ADDED
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
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,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
|
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,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
|