packetman 0.1.2 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a30c3ba57b035cf5927580b722a5651aefc55317
4
- data.tar.gz: 68c4aa0507610985b538da8e6b8b432ffbd6aa49
2
+ SHA256:
3
+ metadata.gz: d3b1cf3885dcdce498b69eb568a10f6bb728a9af2ca0d0bd9f50510137416f9e
4
+ data.tar.gz: e4af77b424e0074748bb7c034a191a475e68c5f5daaf545b0c23910b01447dc0
5
5
  SHA512:
6
- metadata.gz: 976a934d36e13ceb1593728d7067198bbbe78d036da0a600ffa58703483709ca35c813feb3198aa3575ed9f6c9ca680a96572c31a05358ee542438c5d248fec3
7
- data.tar.gz: 727bf261f5a87940af9abd8e636272dce8d1e2de7746976b2079b2b6dff2717da849fbd780b0da17df47ee2fed1a981f48ae0e7ce7cdb52ad7e61cd532f8354f
6
+ metadata.gz: 188bb0f019470028ccabc251bbe195038728c81be5dcbdec98f121d153ca273b19e51390613600a99b0eadca571f20fb33530e4f9a3d871a2d49a5dc1e8deee4
7
+ data.tar.gz: 794018ddb9156cfcfcb174163877fb4518cebc57df9d1cf22fe021a54899b71c94e9fb73c70f62ee236a2c3518df35c300aa7b00d70b46da8fcf0e090cf2e879
data/.bundle/config ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_PATH: "vendor/bundle"
@@ -0,0 +1,55 @@
1
+ version: 2.1
2
+ jobs:
3
+ build:
4
+ parameters:
5
+ ruby_version:
6
+ description: Version of ruby to test
7
+ type: string
8
+ environment:
9
+ GEM_HOME: vendor/bundle
10
+ docker:
11
+ - image: circleci/ruby:<< parameters.ruby_version >>
12
+ working_directory: /tmp/project
13
+ steps:
14
+ - checkout
15
+ - restore_cache:
16
+ keys:
17
+ - v1-bundle-{{ .Environment.CIRCLE_JOB }}-{{ .Environment.CIRCLE_SHA1 }}
18
+ - v1-bundle-{{ .Environment.CIRCLE_JOB }}-
19
+ - run:
20
+ name: Bundle install
21
+ command: >
22
+ gem install bundler -i vendor/bundle
23
+ && bundle install --path vendor/bundle
24
+ - run:
25
+ name: Prepare CodeClimate
26
+ command: >
27
+ curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
28
+ && chmod +x ./cc-test-reporter
29
+ - save_cache:
30
+ key: v1-bundle-{{ .Environment.CIRCLE_JOB }}-{{ .Environment.CIRCLE_SHA1 }}
31
+ paths:
32
+ - /tmp/project/vendor
33
+ - run:
34
+ name: Run Tests
35
+ command: >
36
+ ./cc-test-reporter before-build
37
+ bundle exec rake spec
38
+ ./cc-test-reporter after-build
39
+
40
+ workflows:
41
+ version: 2
42
+ build:
43
+ jobs:
44
+ - build:
45
+ name: ruby_2_3_8
46
+ ruby_version: 2.3.8
47
+ - build:
48
+ name: ruby_2_4_10
49
+ ruby_version: 2.4.10
50
+ - build:
51
+ name: ruby_2_5_8
52
+ ruby_version: 2.5.8
53
+ - build:
54
+ name: ruby_2_6_6
55
+ ruby_version: 2.6.6
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /vendor/
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Packetman
2
2
 
3
- Advanced tcpdump and Wireshark capture generator.
3
+ Advanced tcpdump and Wireshark filter string generator.
4
4
 
5
5
  [![Gem Version](https://badge.fury.io/rb/packetman.svg)](http://badge.fury.io/rb/packetman)
6
6
  [![Test Coverage](https://codeclimate.com/github/jescholl/packetman/badges/coverage.svg)](https://codeclimate.com/github/jescholl/packetman/coverage)
@@ -38,7 +38,40 @@ Or install it yourself as:
38
38
 
39
39
  ## Usage
40
40
 
41
- TODO: Write usage instructions here
41
+ $ packetman -h
42
+
43
+ Usage: packetman [OPTIONS] FILTER_STRING
44
+ -p, --protocol PROTO Transport Protocol (tcp,udp,icmp)
45
+ -t, --transport OFFSET starts at transport header instead of data payload
46
+ -r, --radix RADIX Treat FILTER_STRING as RADIX instead of String
47
+ -o, --offset OFFSET Offset in bits
48
+ -b, --byte-offset Use 8-bit bytes instead of bits for offset
49
+ -w, --wildcard [CHARACTER=?] Treat CHARACTER as single-character wildcard
50
+ -v, --version Show version
51
+
52
+ Create and use a filter string to capture all HTTP GET requests to `/foo/bar`
53
+
54
+ $ sudo tcpdump -nA `packetman GET /foo/bar`
55
+ tcpdump: data link type PKTAP
56
+ tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
57
+ listening on pktap, link-type PKTAP (Packet Tap), capture size 262144 bytes
58
+ 16:49:04.516409 IP 127.0.0.1.54662 > 127.0.0.1.80: Flags [P.], seq 1488105913:1488105994, ack 1397163988, win 4121, options [nop,nop,TS val 875380202 ecr 2751916352], length 81: HTTP: GET /foo/bar HTTP/1.1
59
+ .....b....j...E.....@.@..S..
60
+ ..:.....PX...SG......75.....
61
+ 4-=....@GET /foo/bar HTTP/1.1
62
+ Host: localhost
63
+ User-Agent: curl/7.43.0
64
+ Accept: */*
65
+
66
+ Hexadecimal string with wildcards
67
+
68
+ $ packetman -r 16 -w '?' "A8C401???C200A"
69
+ tcp[((tcp[12:1] & 0xf0) >> 2) + 0:4] & 0xffffff00 = 0xa8c40100 && tcp[((tcp[12:1] & 0xf0) >> 2) + 4:2] & 0x0fff = 0x0c20 && tcp[((tcp[12:1] & 0xf0) >> 2) + 6:1] & 0xff = 0x0a
70
+
71
+ Base 4 string with wildcards and offset beginning at start of the TCP header
72
+
73
+ $ packetman -t -o 3 -r 4 -w i 1223iiii2212
74
+ tcp[0:4] & 0x1fe01fe0 = 0x0d6014c0
42
75
 
43
76
  ## Development
44
77
 
@@ -0,0 +1,14 @@
1
+ ---
2
+ dns: # packetman -bo 13 -p udp -w '.' 'google.com'
3
+ :offset: 13
4
+ :start_with_transport: false
5
+ :offset_type: :bytes
6
+ :wildcard: .
7
+ :transport: udp
8
+
9
+ dns_tcp: # packetman -bo 15 -p tcp -w '.' 'google.com'
10
+ :offset: 15 # DNS over TCP adds a 2 byte length field to the beginning of the standard DNS protocol
11
+ :start_with_transport: false
12
+ :offset_type: :bytes
13
+ :wildcard: .
14
+ :transport: tcp
data/config/protocols.yml CHANGED
@@ -1,29 +1,56 @@
1
1
  ---
2
2
  tcp:
3
3
  table:
4
- Source Port: 16
5
- Destination Port: 16
6
- Sequence Number: 32
7
- Acknowledgement Number: 32
8
- Data Offset: 4
9
- RESERVED: 3
10
- ECN: 3
11
- Control Bits: 6
12
- Window: 16
13
- Checksum: 16
14
- Urgent Pointer: 16
15
- Options and Padding: 32
4
+ - - :value: Source Port
5
+ :colspan: 16
6
+ - :value: Destination Port
7
+ :colspan: 16
8
+ - :separator
9
+ - - :value: Sequence Number
10
+ :colspan: 32
11
+ - :separator
12
+ - - :value: Acknowledgement Number
13
+ :colspan: 32
14
+ - :separator
15
+ - - :value: Data Offset
16
+ :colspan: 4
17
+ - :value: RESERVED
18
+ :colspan: 3
19
+ - :value: ECN
20
+ :colspan: 3
21
+ - :value: Control Bits
22
+ :colspan: 6
23
+ - :value: Window
24
+ :colspan: 16
25
+ - :separator
26
+ - - :value: Checksum
27
+ :colspan: 16
28
+ - :value: Urgent Pointer
29
+ :colspan: 16
30
+ - :separator
31
+ - - :value: Options and Padding
32
+ :colspan: 32
16
33
  payload_query: '((tcp[12:1] & 0xf0) >> 2)'
17
34
  udp:
18
35
  table:
19
- Source Port: 16
20
- Destination Port: 16
21
- Length: 16
22
- Checksum: 16
36
+ - - :value: Source Port
37
+ :colspan: 16
38
+ - :value: Destination Port
39
+ :colspan: 16
40
+ - :separator
41
+ - - :value: Length
42
+ :colspan: 16
43
+ - :value: Checksum
44
+ :colspan: 16
23
45
  payload_query: 8
24
46
  icmp:
25
47
  table:
26
- Type: 8
27
- Code: 8
28
- Checksum: 16
29
- Type Specific Options: 32
48
+ - - :value: Type
49
+ :colspan: 8
50
+ - :value: Code
51
+ :colspan: 8
52
+ - :value: Checksum
53
+ :colspan: 16
54
+ - :separator
55
+ - - :value: Type Specific Options
56
+ :colspan: 32
data/exe/packetman CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'packetman'
3
3
 
4
- search_str = Packetman.config.parse_opts
4
+ catch :exit do
5
+ search_str = Packetman.config.parse_opts
5
6
 
6
- puts Packetman::Filter.new(search_str)
7
+ puts Packetman::Filter.new(search_str)
8
+ end
@@ -2,24 +2,31 @@ module Packetman
2
2
  class Clause
3
3
  include ConfigMethods
4
4
 
5
- attr_accessor :search, :mask, :offset
5
+ attr_accessor :search, :mask, :start_bit
6
6
 
7
- def initialize(search, mask, offset)
7
+ def initialize(search, mask, start_bit)
8
8
  self.search = search
9
9
  self.mask = mask
10
- self.offset = offset
10
+ self.start_bit = start_bit
11
11
  end
12
12
 
13
- def start_byte(start_bit)
14
- "#{config.payload_query} + #{(config.offset_bits + start_bit)/8}"
13
+ # Address of first byte
14
+ def start_byte
15
+ [config.payload_query, (config.offset_bits + start_bit)/8].compact.join(' + ')
15
16
  end
16
17
 
17
- def data_address(start_bit, data_bits)
18
- "#{config.transport}[#{start_byte(start_bit)}:#{data_bits/8}]"
18
+ def num_bytes
19
+ Filter.bit_length(search)/8
19
20
  end
20
21
 
22
+ # Full address of the query data (eg. `tcp[0:4]`)
23
+ def data_address
24
+ "#{config.transport}[#{start_byte}:#{num_bytes}]"
25
+ end
26
+
27
+ # The whole filter clause fully assembled
21
28
  def to_s
22
- "#{data_address(offset, Filter.bit_length(search))} & #{mask} = #{search}"
29
+ "#{data_address} & #{mask} = #{search}"
23
30
  end
24
31
 
25
32
  end
@@ -2,48 +2,63 @@ require 'optparse'
2
2
 
3
3
  module Packetman
4
4
  class Config
5
- attr_accessor :transport, :application, :use_bytes, :radix, :start_with_transport, :offset, :wildcard
5
+ attr_accessor :transport, :application, :offset_type, :radix, :start_with_transport, :offset, :wildcard
6
6
 
7
7
  def initialize
8
- @transport = "tcp"
9
- @offset = 0
8
+ self.transport = "tcp"
9
+ self.offset = 0
10
+ self.offset_type = :bits
10
11
  end
11
12
 
12
13
  def protocols
13
14
  @protocols ||= YAML.load(File.read(File.expand_path('../../../config/protocols.yml', __FILE__)))
14
15
  end
15
16
 
17
+ def applications
18
+ @applications ||= YAML.load(File.read(File.expand_path('../../../config/applications.yml', __FILE__)))
19
+ end
20
+
16
21
  def payload_query
17
22
  protocols[transport]['payload_query'] unless start_with_transport
18
23
  end
19
24
 
20
25
  def offset_bits
21
- if use_bytes
26
+ if offset_type == :bytes
22
27
  offset*8
23
28
  else
24
29
  offset
25
30
  end
26
31
  end
27
32
 
33
+ # FIXME figure out a way to do defaults so this can just set defaults
34
+ def application_override(app_name)
35
+ applications[app_name].each do |key, value|
36
+ __send__("#{key}=", value)
37
+ end
38
+ end
39
+
28
40
  def opts
29
41
  @opts ||= OptionParser.new do |opt|
30
42
  opt.banner = "Usage: #{File.basename($PROGRAM_NAME)} [OPTIONS] FILTER_STRING"
31
- opt.on("-p", "--protocol PROTO", protocols.keys, "Transport Protocol ( #{protocols.keys.join(',')})") { |v| self.transport = v }
43
+ opt.on("-p", "--protocol PROTO", protocols.keys, "Transport Protocol (#{protocols.keys.join(',')})") { |v| self.transport = v }
44
+ opt.on("-a", "--application APPLICATION", applications.keys, "Application Protocol (#{applications.keys.join(',')}) OVERRIDES ALL OTHER SETTINGS") { |v| application_override(v) }
32
45
  opt.on("-t", "--transport", "OFFSET starts at transport header instead of data payload") { |v| self.start_with_transport = v }
33
46
  opt.on("-r", "--radix RADIX", Integer, "Treat FILTER_STRING as RADIX instead of String") { |v| self.radix = v }
34
47
  opt.on("-o", "--offset OFFSET", Integer, "Offset in bits") { |v| self.offset = v }
35
- opt.on("-b", "--byte-offset", "Use 8-bit bytes instead of bits for offset") { |v| self.use_bytes = v }
36
- opt.on("-w", "--wildcard [CHARACTER=?]", "Treat CHARACTER as single-character wildcard") { |v| raise "invalid wildcard" if v.to_s.length > 1; self.wildcard = v || '?' }
37
- opt.on("-v", "--version", "Show version") { puts Packetman::VERSION; exit }
48
+ opt.on("-b", "--byte-offset", "Use 8-bit bytes instead of bits for offset") { |v| self.offset_type = :bytes if v }
49
+ opt.on("-w", "--wildcard CHARACTER", "Treat CHARACTER as single-character wildcard") { |v| raise "invalid wildcard" if v.to_s.length > 1; self.wildcard = v }
50
+ opt.on("--table", "Show transport header table") { puts Packetman::Table.new; throw :exit }
51
+ opt.on("-v", "--version", "Show version") { puts Packetman::VERSION; throw :exit }
38
52
  end
39
53
  end
40
54
 
41
-
42
55
  def parse_opts
43
- filter_str = ARGV.pop
44
- raise "Invalid command line arguments" unless filter_str
45
- opts.parse!
46
- filter_str
56
+ unparsed_opts = opts.parse!
57
+ if unparsed_opts.length < 1
58
+ puts opts
59
+ throw :exit
60
+ end
61
+ unparsed_opts.join(" ")
47
62
  end
48
63
 
49
64
  end
@@ -13,33 +13,36 @@ module Packetman
13
13
  case num
14
14
  when /^0x/
15
15
  $'.length * bit_density(16)
16
- when /^0b/
17
- $'.length * bit_density(2)
18
16
  else
19
17
  nil
20
18
  end
21
19
  end
22
20
 
23
21
  def self.bit_density(radix=config.radix)
24
- (radix.nil?) ? 8 : Math.log2(radix).to_i
22
+ (radix.nil?) ? 8 : Math.log2(radix).ceil
25
23
  end
26
24
 
27
25
  def map_chr
28
- pad_right(input.scan(/./).map{ |chr| yield chr }.join)
26
+ shift_and_pad(input.scan(/./).map{ |chr| yield chr }.join)
29
27
  end
30
28
 
31
- def pad_right(bin_str)
32
- bin_str.ljust(desired_length, '0')
29
+ def shift_and_pad(bin_str)
30
+ #shift
31
+ bin_str.ljust(target_bit_length, '0').
32
+ #pad
33
+ rjust(target_bit_length + config.offset_bits % 8, '0')
33
34
  end
34
35
 
35
- def desired_length
36
- ((input.length + config.offset_bits)/8.to_f).ceil*8 - config.offset_bits
36
+ def target_bit_length
37
+ ((input.length*self.class.bit_density + config.offset_bits)/8.to_f).ceil*8 - config.offset_bits
37
38
  end
38
39
 
40
+ # Mask for 1 character of current radix
39
41
  def radix_mask
40
42
  ("1"*self.class.bit_density).to_i(2)
41
43
  end
42
44
 
45
+ # Mask string for _chr_ substituting wildcards as necessary
43
46
  def mask_chr(chr)
44
47
  if chr == config.wildcard
45
48
  0
@@ -48,14 +51,21 @@ module Packetman
48
51
  end.to_s(2).rjust(self.class.bit_density, '0')
49
52
  end
50
53
 
54
+ # Converts the `chr` from `config.radix` to binary, substituting wildcards as necessary
55
+ #
56
+ # @param chr [String] character to convert to binary
57
+ # @return [String] binary string
51
58
  def bin_chr(chr)
52
- chr = '0' if chr == config.wildcard
53
-
54
59
  if config.radix
60
+ chr = '0' if chr == config.wildcard
55
61
  raise "invalid character '#{chr}' for radix=#{config.radix}" if chr.downcase != chr.to_i(config.radix).to_s(config.radix).downcase
56
62
  chr.to_i(config.radix)
57
63
  else
58
- chr.ord
64
+ if chr == config.wildcard
65
+ 0
66
+ else
67
+ chr.ord
68
+ end
59
69
  end.to_s(2).rjust(self.class.bit_density, '0')
60
70
  end
61
71
 
@@ -67,6 +77,7 @@ module Packetman
67
77
  hex_encode(map_chr{ |c| bin_chr(c) })
68
78
  end
69
79
 
80
+ # Transform _bin_str_ to array of 32, 16, and 8 bit hex encoded strings
70
81
  def hex_encode(bin_str)
71
82
  bin_str.reverse.scan(/.{1,4}/).map{ |chunk|
72
83
  chunk.reverse.to_i(2).to_s(16)
@@ -75,14 +86,18 @@ module Packetman
75
86
  }
76
87
  end
77
88
 
78
- def to_s
79
- offset = 0
89
+ def clauses
90
+ start_bit = 0
80
91
  [].tap do |filter|
81
92
  search_hex.zip(mask_hex).each do |search, mask|
82
- filter << Packetman::Clause.new(search, mask, offset)
83
- offset += self.class.bit_length(search)
93
+ filter << Packetman::Clause.new(search, mask, start_bit)
94
+ start_bit += self.class.bit_length(search)
84
95
  end
85
- end.map{ |b| b.to_s }.join(' && ')
96
+ end
97
+ end
98
+
99
+ def to_s
100
+ clauses.map{ |clause| clause.to_s }.join(' && ')
86
101
  end
87
102
 
88
103
  end
@@ -1,57 +1,28 @@
1
+ require 'terminal-table'
2
+
1
3
  module Packetman
2
4
  class Table
3
5
  include ConfigMethods
4
6
 
5
- attr_reader :line_h, :line_v
6
- attr_accessor :columns
7
-
8
- def initialize(cols = 32)
9
- @line_v = '|'
10
- @line_h = '-'
11
- @columns = cols
12
- end
13
-
14
- def line_h=(value)
15
- raise "Invalid character" if value.length != 1
16
- @line_h = value
17
- end
18
-
19
- def line_v=(value)
20
- raise "Invalid character" if value.length != 1
21
- @line_v = value
22
- end
23
-
24
- def column_width
25
- (columns-1).to_s.length
26
- end
7
+ def initialize
27
8
 
28
- def horizontal_bar
29
- line_v + line_h*(table_width - 2) + line_v + "\n"
9
+ @term_table = Terminal::Table.new(headings: headings, rows: rows, style: style)
30
10
  end
31
11
 
32
- def table_width
33
- columns*(column_width + 1) + 1
12
+ def headings
13
+ [*0..31].map{ |c| "%02d" % c }
34
14
  end
35
15
 
36
- def cell_size(field_size)
37
- field_size*(column_width + 1) - 1
16
+ def rows
17
+ protocols[config.transport]['table']
38
18
  end
39
19
 
40
- def header_row
41
- line_v + columns.times.map{ |n| sprintf "%0#{column_width}d", n }.join(line_v) + line_v + "\n"
20
+ def style
21
+ { alignment: :center, padding_left: 0, padding_right: 0}
42
22
  end
43
23
 
44
24
  def to_s
45
- output = horizontal_bar + header_row + horizontal_bar
46
-
47
- protocols[config.transport]['table'].each do |label, size|
48
- output += sprintf "%s%.#{cell_size(size)}s", line_v, label.center(cell_size(size))
49
- if output.split("\n").last.length == (table_width - 1)
50
- output += line_v + "\n"
51
- output += horizontal_bar
52
- end
53
- end
54
- output
25
+ @term_table.to_s
55
26
  end
56
27
 
57
28
  end
@@ -1,3 +1,3 @@
1
1
  module Packetman
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.6"
3
3
  end
data/packetman.gemspec CHANGED
@@ -19,9 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec", "~> 3.3"
25
- spec.add_development_dependency "pry", "~> 0.10"
26
- spec.add_development_dependency "codeclimate-test-reporter"
22
+ spec.add_dependency "terminal-table", "~> 1.8"
23
+ spec.add_development_dependency "bundler", "~> 2.0"
24
+ spec.add_development_dependency "rake", "~> 13.0"
25
+ spec.add_development_dependency "rspec", "~> 3.9"
26
+ spec.add_development_dependency "simplecov", "~> 0.17"
27
+ spec.add_development_dependency "pry", "~> 0.12"
27
28
  end
metadata CHANGED
@@ -1,85 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packetman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Scholl
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-28 00:00:00.000000000 Z
11
+ date: 2021-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: terminal-table
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: '1'
33
+ version: '2.0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: '1'
40
+ version: '2.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '10.0'
47
+ version: '13.0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '10.0'
54
+ version: '13.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '3.3'
61
+ version: '3.9'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '3.3'
68
+ version: '3.9'
55
69
  - !ruby/object:Gem::Dependency
56
- name: pry
70
+ name: simplecov
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '0.10'
75
+ version: '0.17'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '0.10'
82
+ version: '0.17'
69
83
  - !ruby/object:Gem::Dependency
70
- name: codeclimate-test-reporter
84
+ name: pry
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ">="
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '0'
89
+ version: '0.12'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ">="
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '0'
96
+ version: '0.12'
83
97
  description: Simple tool for creating advanced tcpdump queries, because manually writing
84
98
  `tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420` is no fun.
85
99
  email:
@@ -89,9 +103,10 @@ executables:
89
103
  extensions: []
90
104
  extra_rdoc_files: []
91
105
  files:
106
+ - ".bundle/config"
107
+ - ".circleci/config.yml"
92
108
  - ".gitignore"
93
109
  - ".rspec"
94
- - ".travis.yml"
95
110
  - Gemfile
96
111
  - LICENSE.txt
97
112
  - NOTES.md
@@ -100,7 +115,7 @@ files:
100
115
  - TODO.md
101
116
  - bin/console
102
117
  - bin/setup
103
- - circle.yml
118
+ - config/applications.yml
104
119
  - config/protocols.yml
105
120
  - exe/packetman
106
121
  - lib/packetman.rb
@@ -115,7 +130,7 @@ homepage: https://github.com/jescholl/packetman
115
130
  licenses:
116
131
  - MIT
117
132
  metadata: {}
118
- post_install_message:
133
+ post_install_message:
119
134
  rdoc_options: []
120
135
  require_paths:
121
136
  - lib
@@ -130,9 +145,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
145
  - !ruby/object:Gem::Version
131
146
  version: '0'
132
147
  requirements: []
133
- rubyforge_project:
134
- rubygems_version: 2.4.5.1
135
- signing_key:
148
+ rubyforge_project:
149
+ rubygems_version: 2.7.6.2
150
+ signing_key:
136
151
  specification_version: 4
137
152
  summary: Advanced tcpdump and Wiresharp filter generator.
138
153
  test_files: []
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.2
4
- before_install: gem install bundler -v 1.10.5
data/circle.yml DELETED
@@ -1,3 +0,0 @@
1
- machine:
2
- ruby:
3
- version: 2.1.6