redhound 1.0.1 → 2.0.0.rc2

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.
Files changed (232) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +51 -0
  3. data/README.md +97 -31
  4. data/docs/API.md +104 -0
  5. data/docs/FILTERS.md +37 -0
  6. data/docs/MIGRATION.md +23 -0
  7. data/docs/PROTOCOLS.md +54 -0
  8. data/docs/USAGE.md +86 -0
  9. data/docs/VALIDATION.md +175 -0
  10. data/docs/json-schema.json +64 -0
  11. data/exe/redhound +2 -1
  12. data/lib/redhound/analysis/flow_key.rb +59 -0
  13. data/lib/redhound/analysis/flow_table.rb +124 -0
  14. data/lib/redhound/analysis/ip_reassembler.rb +209 -0
  15. data/lib/redhound/analysis/stats.rb +150 -0
  16. data/lib/redhound/analysis/tcp_analysis.rb +43 -0
  17. data/lib/redhound/analysis/tcp_reassembler.rb +176 -0
  18. data/lib/redhound/analysis/tcp_stream.rb +156 -0
  19. data/lib/redhound/analysis.rb +157 -0
  20. data/lib/redhound/capture/bsd/bpf_device.rb +155 -0
  21. data/lib/redhound/capture/bsd/constants.rb +29 -0
  22. data/lib/redhound/capture/bsd/ifreq.rb +41 -0
  23. data/lib/redhound/capture/file_source.rb +214 -0
  24. data/lib/redhound/capture/interface.rb +70 -0
  25. data/lib/redhound/capture/linktype.rb +30 -0
  26. data/lib/redhound/capture/linux/constants.rb +37 -0
  27. data/lib/redhound/capture/linux/cooked.rb +18 -0
  28. data/lib/redhound/capture/linux/ifreq.rb +42 -0
  29. data/lib/redhound/capture/linux/packet_socket.rb +224 -0
  30. data/lib/redhound/capture/linux/sockaddr_ll.rb +33 -0
  31. data/lib/redhound/capture/linux/tpacket_v3.rb +137 -0
  32. data/lib/redhound/capture/source.rb +79 -0
  33. data/lib/redhound/capture/stats.rb +22 -0
  34. data/lib/redhound/capture.rb +70 -0
  35. data/lib/redhound/cli/command.rb +42 -0
  36. data/lib/redhound/cli/options.rb +133 -0
  37. data/lib/redhound/cli/privileges.rb +29 -0
  38. data/lib/redhound/cli/runner.rb +129 -0
  39. data/lib/redhound/context.rb +20 -0
  40. data/lib/redhound/cursor.rb +69 -0
  41. data/lib/redhound/diagnostic.rb +7 -0
  42. data/lib/redhound/dissector.rb +152 -0
  43. data/lib/redhound/engine.rb +69 -0
  44. data/lib/redhound/errors.rb +38 -0
  45. data/lib/redhound/field.rb +62 -0
  46. data/lib/redhound/file/format.rb +63 -0
  47. data/lib/redhound/file/pcap_reader.rb +43 -0
  48. data/lib/redhound/file/pcap_writer.rb +79 -0
  49. data/lib/redhound/file/pcapng_reader.rb +221 -0
  50. data/lib/redhound/file/pcapng_writer.rb +151 -0
  51. data/lib/redhound/file/rotating_writer.rb +98 -0
  52. data/lib/redhound/filter/analyzer.rb +197 -0
  53. data/lib/redhound/filter/bpf/assembler.rb +121 -0
  54. data/lib/redhound/filter/bpf/disassembler.rb +58 -0
  55. data/lib/redhound/filter/bpf/validator.rb +77 -0
  56. data/lib/redhound/filter/bpf/vm.rb +109 -0
  57. data/lib/redhound/filter/codegen.rb +413 -0
  58. data/lib/redhound/filter/lexer.rb +46 -0
  59. data/lib/redhound/filter/parser.rb +206 -0
  60. data/lib/redhound/filter/program.rb +55 -0
  61. data/lib/redhound/filter.rb +30 -0
  62. data/lib/redhound/layer.rb +75 -0
  63. data/lib/redhound/output/fields.rb +20 -0
  64. data/lib/redhound/output/follow.rb +64 -0
  65. data/lib/redhound/output/hexdump.rb +29 -0
  66. data/lib/redhound/output/json.rb +32 -0
  67. data/lib/redhound/output/summary.rb +84 -0
  68. data/lib/redhound/output/timestamp.rb +34 -0
  69. data/lib/redhound/output/tree.rb +25 -0
  70. data/lib/redhound/packet.rb +77 -0
  71. data/lib/redhound/protocols/arp.rb +39 -0
  72. data/lib/redhound/protocols/checksum.rb +38 -0
  73. data/lib/redhound/protocols/data.rb +23 -0
  74. data/lib/redhound/protocols/dhcp.rb +140 -0
  75. data/lib/redhound/protocols/dns.rb +268 -0
  76. data/lib/redhound/protocols/ethernet.rb +24 -0
  77. data/lib/redhound/protocols/http.rb +185 -0
  78. data/lib/redhound/protocols/icmp.rb +205 -0
  79. data/lib/redhound/protocols/ipv4.rb +56 -0
  80. data/lib/redhound/protocols/ipv6.rb +68 -0
  81. data/lib/redhound/protocols/link.rb +70 -0
  82. data/lib/redhound/protocols/llc.rb +37 -0
  83. data/lib/redhound/protocols/ntp.rb +45 -0
  84. data/lib/redhound/protocols/tcp.rb +88 -0
  85. data/lib/redhound/protocols/tls.rb +218 -0
  86. data/lib/redhound/protocols/tunnel.rb +48 -0
  87. data/lib/redhound/protocols/udp.rb +32 -0
  88. data/lib/redhound/protocols/vlan.rb +23 -0
  89. data/lib/redhound/reader.rb +8 -0
  90. data/lib/redhound/registry.rb +64 -0
  91. data/lib/redhound/stream_dissector.rb +168 -0
  92. data/lib/redhound/util/seq.rb +21 -0
  93. data/lib/redhound/version.rb +2 -1
  94. data/lib/redhound/writer.rb +25 -43
  95. data/lib/redhound.rb +81 -9
  96. data/sig/generated/redhound/analysis/flow_key.rbs +15 -0
  97. data/sig/generated/redhound/analysis/flow_table.rbs +102 -0
  98. data/sig/generated/redhound/analysis/ip_reassembler.rbs +52 -0
  99. data/sig/generated/redhound/analysis/stats.rbs +80 -0
  100. data/sig/generated/redhound/analysis/tcp_analysis.rbs +15 -0
  101. data/sig/generated/redhound/analysis/tcp_reassembler.rbs +39 -0
  102. data/sig/generated/redhound/analysis/tcp_stream.rbs +60 -0
  103. data/sig/generated/redhound/analysis.rbs +38 -0
  104. data/sig/generated/redhound/capture/bsd/bpf_device.rbs +39 -0
  105. data/sig/generated/redhound/capture/bsd/constants.rbs +40 -0
  106. data/sig/generated/redhound/capture/bsd/ifreq.rbs +15 -0
  107. data/sig/generated/redhound/capture/file_source.rbs +67 -0
  108. data/sig/generated/redhound/capture/interface.rbs +53 -0
  109. data/sig/generated/redhound/capture/linktype.rbs +20 -0
  110. data/sig/generated/redhound/capture/linux/constants.rbs +58 -0
  111. data/sig/generated/redhound/capture/linux/cooked.rbs +15 -0
  112. data/sig/generated/redhound/capture/linux/ifreq.rbs +18 -0
  113. data/sig/generated/redhound/capture/linux/packet_socket.rbs +64 -0
  114. data/sig/generated/redhound/capture/linux/sockaddr_ll.rbs +31 -0
  115. data/sig/generated/redhound/capture/linux/tpacket_v3.rbs +35 -0
  116. data/sig/generated/redhound/capture/source.rbs +44 -0
  117. data/sig/generated/redhound/capture/stats.rbs +25 -0
  118. data/sig/generated/redhound/capture.rbs +14 -0
  119. data/sig/generated/redhound/cli/command.rbs +12 -0
  120. data/sig/generated/redhound/cli/options.rbs +25 -0
  121. data/sig/generated/redhound/cli/privileges.rbs +12 -0
  122. data/sig/generated/redhound/cli/runner.rbs +27 -0
  123. data/sig/generated/redhound/context.rbs +27 -0
  124. data/sig/generated/redhound/cursor.rbs +59 -0
  125. data/sig/generated/redhound/diagnostic.rbs +21 -0
  126. data/sig/generated/redhound/dissector.rbs +117 -0
  127. data/sig/generated/redhound/engine.rbs +23 -0
  128. data/sig/generated/redhound/errors.rbs +56 -0
  129. data/sig/generated/redhound/field.rbs +74 -0
  130. data/sig/generated/redhound/file/format.rbs +39 -0
  131. data/sig/generated/redhound/file/pcap_reader.rbs +19 -0
  132. data/sig/generated/redhound/file/pcap_writer.rbs +38 -0
  133. data/sig/generated/redhound/file/pcapng_reader.rbs +54 -0
  134. data/sig/generated/redhound/file/pcapng_writer.rbs +50 -0
  135. data/sig/generated/redhound/file/rotating_writer.rbs +42 -0
  136. data/sig/generated/redhound/filter/analyzer.rbs +42 -0
  137. data/sig/generated/redhound/filter/bpf/assembler.rbs +39 -0
  138. data/sig/generated/redhound/filter/bpf/disassembler.rbs +18 -0
  139. data/sig/generated/redhound/filter/bpf/validator.rbs +30 -0
  140. data/sig/generated/redhound/filter/bpf/vm.rbs +28 -0
  141. data/sig/generated/redhound/filter/codegen.rbs +101 -0
  142. data/sig/generated/redhound/filter/lexer.rbs +15 -0
  143. data/sig/generated/redhound/filter/parser.rbs +65 -0
  144. data/sig/generated/redhound/filter/program.rbs +48 -0
  145. data/sig/generated/redhound/filter.rbs +10 -0
  146. data/sig/generated/redhound/layer.rbs +81 -0
  147. data/sig/generated/redhound/output/fields.rbs +15 -0
  148. data/sig/generated/redhound/output/follow.rbs +21 -0
  149. data/sig/generated/redhound/output/hexdump.rbs +15 -0
  150. data/sig/generated/redhound/output/json.rbs +18 -0
  151. data/sig/generated/redhound/output/summary.rbs +21 -0
  152. data/sig/generated/redhound/output/timestamp.rbs +21 -0
  153. data/sig/generated/redhound/output/tree.rbs +15 -0
  154. data/sig/generated/redhound/packet.rbs +82 -0
  155. data/sig/generated/redhound/protocols/arp.rbs +15 -0
  156. data/sig/generated/redhound/protocols/checksum.rbs +15 -0
  157. data/sig/generated/redhound/protocols/data.rbs +17 -0
  158. data/sig/generated/redhound/protocols/dhcp.rbs +31 -0
  159. data/sig/generated/redhound/protocols/dns.rbs +42 -0
  160. data/sig/generated/redhound/protocols/ethernet.rbs +15 -0
  161. data/sig/generated/redhound/protocols/http.rbs +36 -0
  162. data/sig/generated/redhound/protocols/icmp.rbs +41 -0
  163. data/sig/generated/redhound/protocols/ipv4.rbs +15 -0
  164. data/sig/generated/redhound/protocols/ipv6.rbs +24 -0
  165. data/sig/generated/redhound/protocols/link.rbs +33 -0
  166. data/sig/generated/redhound/protocols/llc.rbs +15 -0
  167. data/sig/generated/redhound/protocols/ntp.rbs +17 -0
  168. data/sig/generated/redhound/protocols/tcp.rbs +25 -0
  169. data/sig/generated/redhound/protocols/tls.rbs +51 -0
  170. data/sig/generated/redhound/protocols/tunnel.rbs +24 -0
  171. data/sig/generated/redhound/protocols/udp.rbs +18 -0
  172. data/sig/generated/redhound/protocols/vlan.rbs +12 -0
  173. data/sig/generated/redhound/reader.rbs +7 -0
  174. data/sig/generated/redhound/registry.rbs +45 -0
  175. data/sig/generated/redhound/stream_dissector.rbs +44 -0
  176. data/sig/generated/redhound/util/seq.rbs +20 -0
  177. data/sig/generated/redhound/version.rbs +1 -0
  178. data/sig/generated/redhound/writer.rbs +6 -19
  179. data/sig/generated/redhound.rbs +18 -0
  180. data/sig/shims/io.rbs +7 -0
  181. data/sig/shims/process.rbs +3 -0
  182. metadata +177 -55
  183. data/CODE_OF_CONDUCT.md +0 -132
  184. data/Dockerfile +0 -7
  185. data/Rakefile +0 -15
  186. data/Steepfile +0 -4
  187. data/docker-compose.yml +0 -9
  188. data/lib/redhound/analyzer.rb +0 -34
  189. data/lib/redhound/builder/packet_mreq.rb +0 -56
  190. data/lib/redhound/builder/socket.rb +0 -35
  191. data/lib/redhound/builder.rb +0 -4
  192. data/lib/redhound/command.rb +0 -67
  193. data/lib/redhound/l2/ether.rb +0 -68
  194. data/lib/redhound/l2/protocol.rb +0 -33
  195. data/lib/redhound/l2.rb +0 -4
  196. data/lib/redhound/l3/arp.rb +0 -114
  197. data/lib/redhound/l3/base.rb +0 -49
  198. data/lib/redhound/l3/ipv4.rb +0 -95
  199. data/lib/redhound/l3/ipv6.rb +0 -69
  200. data/lib/redhound/l3/protocol.rb +0 -173
  201. data/lib/redhound/l3/resolver.rb +0 -30
  202. data/lib/redhound/l3.rb +0 -9
  203. data/lib/redhound/l4/base.rb +0 -31
  204. data/lib/redhound/l4/icmp.rb +0 -71
  205. data/lib/redhound/l4/resolver.rb +0 -28
  206. data/lib/redhound/l4/udp.rb +0 -63
  207. data/lib/redhound/l4.rb +0 -6
  208. data/lib/redhound/receiver.rb +0 -45
  209. data/lib/redhound/resolver.rb +0 -22
  210. data/lib/redhound/source/socket.rb +0 -18
  211. data/lib/redhound/source.rb +0 -3
  212. data/rbs_collection.lock.yaml +0 -20
  213. data/rbs_collection.yaml +0 -17
  214. data/sig/generated/redhound/analyzer.rbs +0 -14
  215. data/sig/generated/redhound/builder/packet_mreq.rbs +0 -39
  216. data/sig/generated/redhound/builder/socket.rbs +0 -24
  217. data/sig/generated/redhound/command.rbs +0 -19
  218. data/sig/generated/redhound/l2/ether.rbs +0 -41
  219. data/sig/generated/redhound/l2/protocol.rbs +0 -15
  220. data/sig/generated/redhound/l3/arp.rbs +0 -57
  221. data/sig/generated/redhound/l3/base.rbs +0 -28
  222. data/sig/generated/redhound/l3/ipv4.rbs +0 -53
  223. data/sig/generated/redhound/l3/ipv6.rbs +0 -38
  224. data/sig/generated/redhound/l3/protocol.rbs +0 -16
  225. data/sig/generated/redhound/l3/resolver.rbs +0 -16
  226. data/sig/generated/redhound/l4/base.rbs +0 -19
  227. data/sig/generated/redhound/l4/icmp.rbs +0 -33
  228. data/sig/generated/redhound/l4/resolver.rbs +0 -16
  229. data/sig/generated/redhound/l4/udp.rbs +0 -36
  230. data/sig/generated/redhound/receiver.rbs +0 -19
  231. data/sig/generated/redhound/resolver.rbs +0 -11
  232. data/sig/generated/redhound/source/socket.rbs +0 -13
@@ -1,71 +0,0 @@
1
- # rbs_inline: enabled
2
- # frozen_string_literal: true
3
-
4
- module Redhound
5
- class L4
6
- class Icmp < Base
7
- # @rbs (bytes: Array[Integer]) -> void
8
- def initialize(bytes:)
9
- raise ArgumentError, "bytes must be bigger than #{size} bytes" unless bytes.size >= size
10
-
11
- @bytes = bytes
12
- end
13
-
14
- # @rbs () -> Redhound::L4::Icmp
15
- def generate
16
- @type = @bytes[0]
17
- @code = @bytes[1]
18
- @check = @bytes[2..3]
19
- # refs: https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml#icmp-parameters-types
20
- if @type.zero? || @type == 8
21
- @id = @bytes[4..5]
22
- @seq = @bytes[6..7]
23
- @data = @bytes[8..]
24
- else
25
- @data = @bytes[4..]
26
- end
27
- self
28
- end
29
-
30
- # @rbs () -> Integer
31
- def size = 8
32
-
33
- # @rbs () -> String
34
- def to_s
35
- if @type.zero? || @type == 8
36
- <<-ICMP.chomp
37
- └─ ICMP Type: #{@type} Code: #{@code} Checksum: #{check} ID: #{id} Sequence: #{seq}
38
- └─ Payload: #{data}
39
- ICMP
40
- else
41
- <<-ICMP.chomp
42
- └─ ICMP Type: #{@type} Code: #{@code} Checksum: #{check}
43
- └─ Payload: #{data}
44
- ICMP
45
- end
46
- end
47
-
48
- private
49
-
50
- # @rbs () -> Integer
51
- def check
52
- @check.map { |b| b.to_s(16).rjust(2, '0') }.join
53
- end
54
-
55
- # @rbs () -> Integer
56
- def id
57
- @id.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
58
- end
59
-
60
- # @rbs () -> Integer
61
- def seq
62
- @seq.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
63
- end
64
-
65
- # @rbs () -> String
66
- def data
67
- @data.map(&:chr).join.force_encoding("UTF-8")
68
- end
69
- end
70
- end
71
- end
@@ -1,28 +0,0 @@
1
- # rbs_inline: enabled
2
- # frozen_string_literal: true
3
-
4
- module Redhound
5
- class L4
6
- class Resolver
7
- # @rbs (bytes: Array[Integer], l3: Redhound::L3::Base) -> Redhound::L4::Base?
8
- def self.resolve(bytes:, l3:)
9
- new(bytes:, l3:).resolve
10
- end
11
-
12
- # @rbs (bytes: Array[Integer], l3: Redhound::L3::Base) -> void
13
- def initialize(bytes:, l3:)
14
- @bytes = bytes
15
- @l3 = l3
16
- end
17
-
18
- # @rbs () -> Redhound::L4::Base?
19
- def resolve
20
- if @l3.protocol.udp?
21
- Udp.generate(bytes: @bytes)
22
- elsif @l3.protocol.icmp?
23
- Icmp.generate(bytes: @bytes)
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,63 +0,0 @@
1
- # rbs_inline: enabled
2
- # frozen_string_literal: true
3
-
4
- module Redhound
5
- class L4
6
- class Udp < Base
7
- # @rbs (bytes: Array[Integer]) -> void
8
- def initialize(bytes:)
9
- raise ArgumentError, "bytes must be bigger than #{size} bytes" unless bytes.size >= size
10
-
11
- @bytes = bytes
12
- end
13
-
14
- # @rbs () -> Redhound::L4::Udp
15
- def generate
16
- @sport = @bytes[0..1]
17
- @dport = @bytes[2..3]
18
- @len = @bytes[4..5]
19
- @check = @bytes[6..7]
20
- @data = @bytes[8..]
21
- self
22
- end
23
-
24
- # @rbs () -> Integer
25
- def size = 8
26
-
27
- # @rbs () -> String
28
- def to_s
29
- <<-UDP
30
- └─ UDP Src: #{sport} Dst: #{dport} Len: #{len} Checksum: #{check}
31
- └─ Payload: #{data}
32
- UDP
33
- end
34
-
35
- private
36
-
37
- # @rbs () -> Integer
38
- def sport
39
- @sport.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
40
- end
41
-
42
- # @rbs () -> Integer
43
- def dport
44
- @dport.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
45
- end
46
-
47
- # @rbs () -> Integer
48
- def len
49
- @len.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
50
- end
51
-
52
- # @rbs () -> Integer
53
- def check
54
- @check.map { |b| b.to_s(16).rjust(2, '0') }.join.to_i(16)
55
- end
56
-
57
- # @rbs () -> String
58
- def data
59
- @data.map(&:chr).join
60
- end
61
- end
62
- end
63
- end
data/lib/redhound/l4.rb DELETED
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'l4/base'
4
- require_relative 'l4/icmp'
5
- require_relative 'l4/resolver'
6
- require_relative 'l4/udp'
@@ -1,45 +0,0 @@
1
- # rbs_inline: enabled
2
- # frozen_string_literal: true
3
-
4
- require 'socket'
5
-
6
- module Redhound
7
- class Receiver
8
- class << self
9
- # @rbs (ifname: String, filename: String) -> void
10
- def run(ifname:, filename:)
11
- new(ifname:, filename:).run
12
- end
13
- end
14
-
15
- # @rbs (ifname: String, filename: String) -> void
16
- def initialize(ifname:, filename:)
17
- @ifname = ifname
18
- @source = Resolver.resolve(ifname:)
19
- if filename
20
- @writer = Writer.new(filename:)
21
- @writer.start
22
- end
23
- @count = 0
24
- end
25
-
26
- # @rbs () -> void
27
- def run
28
- loop do
29
- msg, = @source.next_packet
30
- Analyzer.analyze(msg:, count: increment)
31
- @writer&.write(msg:)
32
- rescue Interrupt
33
- @writer&.stop
34
- break
35
- end
36
- end
37
-
38
- private
39
-
40
- # @rbs () -> Integer
41
- def increment
42
- @count.tap { @count += 1 }
43
- end
44
- end
45
- end
@@ -1,22 +0,0 @@
1
- # rbs_inline: enabled
2
- # frozen_string_literal: true
3
-
4
- module Redhound
5
- class Resolver
6
- class << self
7
- # @rbs (ifname: String) -> void
8
- def resolve(ifname:)
9
- new.resolve(ifname:)
10
- end
11
- end
12
-
13
- # @rbs (ifname: String) -> Redhound::Source::Socket
14
- def resolve(ifname:)
15
- if RUBY_PLATFORM =~ /darwin/
16
- raise 'Not implemented yet'
17
- else
18
- Redhound::Builder::Socket.build(ifname:)
19
- end
20
- end
21
- end
22
- end
@@ -1,18 +0,0 @@
1
- # rbs_inline: enabled
2
- # frozen_string_literal: true
3
-
4
- module Redhound
5
- module Source
6
- class Socket
7
- # @rbs (socket: ::Socket) -> void
8
- def initialize(socket:)
9
- @socket = socket
10
- end
11
-
12
- # @rbs (Integer size) -> [String, Addrinfo]
13
- def next_packet(size = 2048)
14
- @socket.recvfrom(size)
15
- end
16
- end
17
- end
18
- end
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'source/socket'
@@ -1,20 +0,0 @@
1
- ---
2
- path: ".gem_rbs_collection"
3
- gems:
4
- - name: fileutils
5
- version: '0'
6
- source:
7
- type: stdlib
8
- - name: rake
9
- version: '13.0'
10
- source:
11
- type: git
12
- name: ruby/gem_rbs_collection
13
- revision: f83c613ed7d038c0031f25fcbcdf12603ba36e79
14
- remote: https://github.com/ruby/gem_rbs_collection.git
15
- repo_dir: gems
16
- - name: socket
17
- version: '0'
18
- source:
19
- type: stdlib
20
- gemfile_lock_path: Gemfile.lock
data/rbs_collection.yaml DELETED
@@ -1,17 +0,0 @@
1
- # Download sources
2
- sources:
3
- - type: git
4
- name: ruby/gem_rbs_collection
5
- remote: https://github.com/ruby/gem_rbs_collection.git
6
- revision: main
7
- repo_dir: gems
8
-
9
- # You can specify local directories as sources also.
10
- # - type: local
11
- # path: path/to/your/local/repository
12
-
13
- # A directory to install the downloaded RBSs
14
- path: .gem_rbs_collection
15
-
16
- gems:
17
- - name: socket
@@ -1,14 +0,0 @@
1
- # Generated from lib/redhound/analyzer.rb with RBS::Inline
2
-
3
- module Redhound
4
- class Analyzer
5
- # @rbs (msg: String, count: Integer) -> void
6
- def self.analyze: (msg: String, count: Integer) -> void
7
-
8
- # @rbs (msg: String, count: Integer) -> void
9
- def initialize: (msg: String, count: Integer) -> void
10
-
11
- # @rbs () -> void
12
- def analyze: () -> void
13
- end
14
- end
@@ -1,39 +0,0 @@
1
- # Generated from lib/redhound/builder/packet_mreq.rb with RBS::Inline
2
-
3
- module Redhound
4
- module Builder
5
- class PacketMreq
6
- PACKET_MR_PROMISC: ::Integer
7
-
8
- # @rbs (ifname: String) -> void
9
- def initialize: (ifname: String) -> void
10
-
11
- # see: https://man7.org/linux/man-pages/man7/packet.7.html
12
- # struct packet_mreq {
13
- # int mr_ifindex; /* interface index */
14
- # unsigned short mr_type; /* action */
15
- # unsigned short mr_alen; /* address length */
16
- # unsigned char mr_address[8]; /* physical-layer address */
17
- # };
18
- # @rbs () -> String
19
- def build: () -> String
20
-
21
- # @rbs () -> String
22
- def mr_ifindex: () -> String
23
-
24
- private
25
-
26
- # @rbs () -> Integer?
27
- def index: () -> Integer?
28
-
29
- # @rbs () -> String
30
- def mr_type: () -> String
31
-
32
- # @rbs () -> String
33
- def mr_alen: () -> String
34
-
35
- # @rbs () -> String
36
- def mr_address: () -> String
37
- end
38
- end
39
- end
@@ -1,24 +0,0 @@
1
- # Generated from lib/redhound/builder/socket.rb with RBS::Inline
2
-
3
- module Redhound
4
- module Builder
5
- class Socket
6
- SOL_PACKET: ::Integer
7
-
8
- PACKET_ADD_MEMBERSHIP: ::Integer
9
-
10
- ETH_P_ALL: ::Integer
11
-
12
- PACKED_ETH_P_ALL: untyped
13
-
14
- # @rbs (ifname: String) -> Redhound::Source::Socket
15
- def self.build: (ifname: String) -> Redhound::Source::Socket
16
-
17
- # @rbs (ifname: String) -> void
18
- def initialize: (ifname: String) -> void
19
-
20
- # @rbs () -> Redhound::Source::Socket
21
- def build: () -> Redhound::Source::Socket
22
- end
23
- end
24
- end
@@ -1,19 +0,0 @@
1
- # Generated from lib/redhound/command.rb with RBS::Inline
2
-
3
- module Redhound
4
- class Command
5
- # @rbs () -> void
6
- def initialize: () -> void
7
-
8
- # @rbs (Array[untyped] argv) -> void
9
- def run: (Array[untyped] argv) -> void
10
-
11
- # @rbs (Array[untyped] argv) -> void
12
- def parse: (Array[untyped] argv) -> void
13
-
14
- private
15
-
16
- # @rbs () -> void
17
- def list_interfaces: () -> void
18
- end
19
- end
@@ -1,41 +0,0 @@
1
- # Generated from lib/redhound/l2/ether.rb with RBS::Inline
2
-
3
- module Redhound
4
- class L2
5
- class Ether
6
- attr_reader type: Protocol
7
-
8
- # @rbs (bytes: Array[Integer], count: Integer) -> Redhound::L2::Ether
9
- def self.generate: (bytes: Array[Integer], count: Integer) -> Redhound::L2::Ether
10
-
11
- # @rbs (bytes: Array[Integer], count: Integer) -> void
12
- def initialize: (bytes: Array[Integer], count: Integer) -> void
13
-
14
- # @rbs () -> Integer
15
- def size: () -> Integer
16
-
17
- # @rbs () -> Redhound::L2::Ether
18
- def generate: () -> Redhound::L2::Ether
19
-
20
- # @rbs () -> void
21
- def dump: () -> void
22
-
23
- # @rbs () -> String
24
- def to_s: () -> String
25
-
26
- # @rbs () -> bool
27
- def supported_type?: () -> bool
28
-
29
- private
30
-
31
- # @rbs () -> String
32
- def dhost: () -> String
33
-
34
- # @rbs () -> String
35
- def shost: () -> String
36
-
37
- # @rbs (Array[Integer] type) -> Integer
38
- def hex_type: (Array[Integer] type) -> Integer
39
- end
40
- end
41
- end
@@ -1,15 +0,0 @@
1
- # Generated from lib/redhound/l2/protocol.rb with RBS::Inline
2
-
3
- module Redhound
4
- class L2
5
- class Protocol
6
- PROTO_TABLE: ::Hash[untyped, untyped]
7
-
8
- # @rbs (protocol: Integer) -> void
9
- def initialize: (protocol: Integer) -> void
10
-
11
- # @rbs () -> String
12
- def to_s: () -> String
13
- end
14
- end
15
- end
@@ -1,57 +0,0 @@
1
- # Generated from lib/redhound/l3/arp.rb with RBS::Inline
2
-
3
- module Redhound
4
- class L3
5
- class Arp < Base
6
- # @rbs (bytes: Array[Integer]) -> Redhound::L3::Arp
7
- def self.generate: (bytes: Array[Integer]) -> Redhound::L3::Arp
8
-
9
- # @rbs (bytes: Array[Integer]) -> void
10
- def initialize: (bytes: Array[Integer]) -> void
11
-
12
- # @rbs () -> Redhound::L3::Arp
13
- def generate: () -> Redhound::L3::Arp
14
-
15
- # @rbs () -> Integer
16
- def arp_size: () -> Integer
17
-
18
- # @rbs () -> Integer
19
- def size: () -> Integer
20
-
21
- # @rbs () -> String
22
- def to_s: () -> String
23
-
24
- # @rbs () -> bool
25
- def supported_protocol?: () -> bool
26
-
27
- # @rbs () -> String?
28
- def protocol: () -> String?
29
-
30
- private
31
-
32
- # @rbs () -> Integer
33
- def htype: () -> Integer
34
-
35
- # @rbs () -> Integer
36
- def ptype: () -> Integer
37
-
38
- # @rbs () -> Integer
39
- def oper: () -> Integer
40
-
41
- # @rbs () -> String
42
- def sha: () -> String
43
-
44
- # @rbs () -> String
45
- def spa: () -> String
46
-
47
- # @rbs () -> String
48
- def tha: () -> String
49
-
50
- # @rbs () -> String
51
- def tpa: () -> String
52
-
53
- # @rbs () -> Redhound::L3::Base?
54
- def generate_l3: () -> Redhound::L3::Base?
55
- end
56
- end
57
- end
@@ -1,28 +0,0 @@
1
- # Generated from lib/redhound/l3/base.rb with RBS::Inline
2
-
3
- module Redhound
4
- class L3
5
- class Base
6
- # @rbs (bytes: Array[Integer]) -> Redhound::L3::Base
7
- def self.generate: (bytes: Array[Integer]) -> Redhound::L3::Base
8
-
9
- # @rbs (bytes: Array[Integer]) -> void
10
- def initialize: (bytes: Array[Integer]) -> void
11
-
12
- # @rbs () -> Redhound::L3::Base
13
- def generate: () -> Redhound::L3::Base
14
-
15
- # @rbs () -> void
16
- def dump: () -> void
17
-
18
- # @rbs () -> Integer
19
- def size: () -> Integer
20
-
21
- # @rbs () -> bool
22
- def supported_protocol?: () -> bool
23
-
24
- # @rbs () -> Protocol
25
- def protocol: () -> Protocol
26
- end
27
- end
28
- end
@@ -1,53 +0,0 @@
1
- # Generated from lib/redhound/l3/ipv4.rb with RBS::Inline
2
-
3
- module Redhound
4
- class L3
5
- class Ipv4 < Base
6
- # @rbs (bytes: Array[Integer]) -> Redhound::L3::Ipv4
7
- def self.generate: (bytes: Array[Integer]) -> Redhound::L3::Ipv4
8
-
9
- attr_reader protocol: Protocol
10
-
11
- # @rbs (bytes: Array[Integer]) -> void
12
- def initialize: (bytes: Array[Integer]) -> void
13
-
14
- # @rbs () -> Redhound::L3::Ipv4
15
- def generate: () -> Redhound::L3::Ipv4
16
-
17
- # @rbs () -> Integer
18
- def size: () -> Integer
19
-
20
- # @rbs () -> String
21
- def to_s: () -> String
22
-
23
- # @rbs () -> bool
24
- def supported_protocol?: () -> bool
25
-
26
- private
27
-
28
- # @rbs () -> Integer
29
- def version: () -> Integer
30
-
31
- # @rbs () -> Integer
32
- def ihl: () -> Integer
33
-
34
- # @rbs () -> Integer
35
- def tot_len: () -> Integer
36
-
37
- # @rbs () -> Integer
38
- def id: () -> Integer
39
-
40
- # @rbs () -> Integer
41
- def frag_off: () -> Integer
42
-
43
- # @rbs () -> Integer
44
- def check: () -> Integer
45
-
46
- # @rbs () -> String
47
- def saddr: () -> String
48
-
49
- # @rbs () -> String
50
- def daddr: () -> String
51
- end
52
- end
53
- end
@@ -1,38 +0,0 @@
1
- # Generated from lib/redhound/l3/ipv6.rb with RBS::Inline
2
-
3
- module Redhound
4
- class L3
5
- class Ipv6 < Base
6
- # @rbs (bytes: Array[Integer]) -> Redhound::L3::Ipv6
7
- def self.generate: (bytes: Array[Integer]) -> Redhound::L3::Ipv6
8
-
9
- attr_reader protocol: Protocol
10
-
11
- # @rbs (bytes: Array[Integer]) -> void
12
- def initialize: (bytes: Array[Integer]) -> void
13
-
14
- # @rbs () -> Integer
15
- def size: () -> Integer
16
-
17
- # @rbs () -> Redhound::L3::Ipv6
18
- def generate: () -> Redhound::L3::Ipv6
19
-
20
- # @rbs () -> String
21
- def to_s: () -> String
22
-
23
- # @rbs () -> bool
24
- def supported_protocol?: () -> bool
25
-
26
- private
27
-
28
- # @rbs () -> Integer
29
- def payload_length: () -> Integer
30
-
31
- # @rbs () -> Integer
32
- def saddr: () -> Integer
33
-
34
- # @rbs () -> Integer
35
- def daddr: () -> Integer
36
- end
37
- end
38
- end
@@ -1,16 +0,0 @@
1
- # Generated from lib/redhound/l3/protocol.rb with RBS::Inline
2
-
3
- module Redhound
4
- class L3
5
- class Protocol
6
- # refs: https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml#protocol-numbers-1
7
- PROTO_TABLE: untyped
8
-
9
- # @rbs (protocol: Integer) -> void
10
- def initialize: (protocol: Integer) -> void
11
-
12
- # @rbs () -> String
13
- def to_s: () -> String
14
- end
15
- end
16
- end
@@ -1,16 +0,0 @@
1
- # Generated from lib/redhound/l3/resolver.rb with RBS::Inline
2
-
3
- module Redhound
4
- class L3
5
- class Resolver
6
- # @rbs (bytes: Array[Integer], l2: Redhound::L2::Ether) -> Redhound::L3::Base?
7
- def self.resolve: (bytes: Array[Integer], l2: Redhound::L2::Ether) -> Redhound::L3::Base?
8
-
9
- # @rbs (bytes: Array[Integer], l2: Redhound::L2::Ether) -> void
10
- def initialize: (bytes: Array[Integer], l2: Redhound::L2::Ether) -> void
11
-
12
- # @rbs () -> Redhound::L3::Base?
13
- def resolve: () -> Redhound::L3::Base?
14
- end
15
- end
16
- end