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
@@ -0,0 +1,67 @@
1
+ # Generated from lib/redhound/capture/file_source.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ class FileSource < Source
8
+ class ReadStopped < StandardError
9
+ end
10
+
11
+ # @api private
12
+ class FileInput
13
+ # @rbs (::File io) -> void
14
+ def initialize: (::File io) -> void
15
+
16
+ # @rbs (Integer length) -> String?
17
+ def read: (Integer length) -> String?
18
+ end
19
+
20
+ # Nonregular inputs need bounded polling so Source#stop can interrupt an idle pipe.
21
+ class StreamInput
22
+ # @rbs (IO io, Source source) -> void
23
+ def initialize: (IO io, Source source) -> void
24
+
25
+ # @rbs (Integer length) -> String?
26
+ def read: (Integer length) -> String?
27
+ end
28
+
29
+ attr_reader reader: untyped
30
+
31
+ # @rbs (untyped input, ?filter: String?) -> void
32
+ def initialize: (untyped input, ?filter: String?) -> void
33
+
34
+ # @rbs (untyped input, ?filter: String?) -> FileSource
35
+ # @rbs [T] (untyped input, ?filter: String?) { (FileSource) -> T } -> T
36
+ def self.open: (untyped input, ?filter: String?) -> FileSource
37
+ | [T] (untyped input, ?filter: String?) { (FileSource) -> T } -> T
38
+
39
+ # @rbs (?timeout: Numeric?) -> Packet?
40
+ def next_packet: (?timeout: Numeric?) -> Packet?
41
+
42
+ # @rbs (Filter::Program? program) -> void
43
+ def attach_filter: (Filter::Program? program) -> void
44
+
45
+ # @rbs () -> Integer
46
+ def linktype: () -> Integer
47
+
48
+ # @rbs () -> Array[Interface]
49
+ def interfaces: () -> Array[Interface]
50
+
51
+ # @rbs () -> Stats
52
+ def stats: () -> Stats
53
+
54
+ # @rbs () -> void
55
+ def stop: () -> void
56
+
57
+ # @rbs () -> void
58
+ def close: () -> void
59
+
60
+ private
61
+
62
+ # A single bounded worker preserves partial records across caller timeouts.
63
+ # @rbs (Numeric? timeout) -> (Packet | nil | :wait_readable)
64
+ def read_packet: (Numeric? timeout) -> (Packet | nil | :wait_readable)
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,53 @@
1
+ # Generated from lib/redhound/capture/interface.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ class Interface
8
+ attr_reader name: untyped
9
+
10
+ attr_reader index: untyped
11
+
12
+ attr_reader linktype: untyped
13
+
14
+ attr_reader snaplen: untyped
15
+
16
+ attr_reader flags: untyped
17
+
18
+ attr_reader mtu: untyped
19
+
20
+ attr_reader mac: untyped
21
+
22
+ attr_reader description: untyped
23
+
24
+ attr_reader filter: untyped
25
+
26
+ attr_reader meta: untyped
27
+
28
+ # @rbs (name: String, ?index: Integer, ?linktype: Integer, ?snaplen: Integer, ?flags: Integer, ?mtu: Integer?, ?mac: String?, ?description: String?, ?filter: String?, ?meta: Hash[Symbol, untyped]) -> void
29
+ def initialize: (name: String, ?index: Integer, ?linktype: Integer, ?snaplen: Integer, ?flags: Integer, ?mtu: Integer?, ?mac: String?, ?description: String?, ?filter: String?, ?meta: Hash[Symbol, untyped]) -> void
30
+
31
+ # @rbs () -> Integer
32
+ def ifindex: () -> Integer
33
+
34
+ # @rbs () -> bool
35
+ def up?: () -> bool
36
+
37
+ # @rbs () -> bool
38
+ def loopback?: () -> bool
39
+
40
+ # @rbs () -> bool
41
+ def running?: () -> bool
42
+
43
+ # @rbs () -> String
44
+ def to_s: () -> String
45
+
46
+ # @rbs () -> Array[Interface]
47
+ def self.all: () -> Array[Interface]
48
+
49
+ # @rbs (String | Integer value) -> Interface
50
+ def self.find: (String | Integer value) -> Interface
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,20 @@
1
+ # Generated from lib/redhound/capture/linktype.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ module Linktype
8
+ VALUES: untyped
9
+
10
+ # @rbs (Integer | Symbol | String value) -> Integer
11
+ def self.resolve: (Integer | Symbol | String value) -> Integer
12
+
13
+ # @rbs (Integer value) -> String
14
+ def self.name: (Integer value) -> String
15
+
16
+ # @rbs (Integer hardware_type) -> Integer
17
+ def self.for_hardware: (Integer hardware_type) -> Integer
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,58 @@
1
+ # Generated from lib/redhound/capture/linux/constants.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ module Linux
8
+ # @api private
9
+ module Constants
10
+ AF_PACKET: ::Integer
11
+
12
+ SOL_PACKET: ::Integer
13
+
14
+ ETH_P_ALL: ::Integer
15
+
16
+ PACKET_ADD_MEMBERSHIP: ::Integer
17
+
18
+ PACKET_RX_RING: ::Integer
19
+
20
+ PACKET_STATISTICS: ::Integer
21
+
22
+ PACKET_VERSION: ::Integer
23
+
24
+ PACKET_IGNORE_OUTGOING: ::Integer
25
+
26
+ PACKET_MR_PROMISC: ::Integer
27
+
28
+ PACKET_OUTGOING: ::Integer
29
+
30
+ SO_ATTACH_FILTER: ::Integer
31
+
32
+ SO_RCVBUFFORCE: ::Integer
33
+
34
+ TPACKET_V3: ::Integer
35
+
36
+ SIOCGSTAMPNS: ::Integer
37
+
38
+ SIOCGIFHWADDR: ::Integer
39
+
40
+ SIOCGIFMTU: ::Integer
41
+
42
+ SIOCGIFFLAGS: ::Integer
43
+
44
+ TP_STATUS_USER: ::Integer
45
+
46
+ TP_STATUS_CSUMNOTREADY: ::Integer
47
+
48
+ TP_STATUS_VLAN_VALID: ::Integer
49
+
50
+ TP_STATUS_VLAN_TPID_VALID: ::Integer
51
+
52
+ TP_STATUS_CSUM_VALID: ::Integer
53
+
54
+ RECEIVE_SIZE: ::Integer
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,15 @@
1
+ # Generated from lib/redhound/capture/linux/cooked.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ module Linux
8
+ # @api private
9
+ module Cooked
10
+ # @rbs (SockaddrLL address) -> String
11
+ def self.header: (SockaddrLL address) -> String
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ # Generated from lib/redhound/capture/linux/ifreq.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ module Linux
8
+ # @api private
9
+ module Ifreq
10
+ # @rbs (String name, Integer command) -> String
11
+ def self.query: (String name, Integer command) -> String
12
+
13
+ # @rbs (String name, ?index: Integer) -> Interface
14
+ def self.interface: (String name, ?index: Integer) -> Interface
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,64 @@
1
+ # Generated from lib/redhound/capture/linux/packet_socket.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ module Linux
8
+ # @api private
9
+ class PacketSocket < Source
10
+ attr_reader socket: untyped
11
+
12
+ attr_reader linktype: untyped
13
+
14
+ attr_reader interfaces: untyped
15
+
16
+ # @rbs (interface: String | Integer | Interface, ?snaplen: Integer, ?promiscuous: bool, ?buffer_size: Integer?, ?direction: Symbol, ?filter: String?) -> void
17
+ def initialize: (interface: String | Integer | Interface, ?snaplen: Integer, ?promiscuous: bool, ?buffer_size: Integer?, ?direction: Symbol, ?filter: String?) -> void
18
+
19
+ # @rbs (?timeout: Numeric?) -> Packet?
20
+ def next_packet: (?timeout: Numeric?) -> Packet?
21
+
22
+ # @rbs (untyped program) -> void
23
+ def attach_filter: (untyped program) -> void
24
+
25
+ # @rbs () -> Stats
26
+ def stats: () -> Stats
27
+
28
+ # @rbs () -> void
29
+ def close: () -> void
30
+
31
+ # Positive filter returns select packets; the source applies its configured snaplen.
32
+ # @rbs (Array[[Integer, Integer, Integer, Integer]] instructions) -> Array[[Integer, Integer, Integer, Integer]]
33
+ def receive_filter: (Array[[ Integer, Integer, Integer, Integer ]] instructions) -> Array[[ Integer, Integer, Integer, Integer ]]
34
+
35
+ # @rbs () -> void
36
+ def warn_vlan_offload: () -> void
37
+
38
+ # @rbs () -> void
39
+ def close_resources: () -> void
40
+
41
+ # @rbs () -> void
42
+ def prime_timestamp: () -> void
43
+
44
+ # @rbs () -> Integer
45
+ def receive_snaplen: () -> Integer
46
+
47
+ # @rbs (Integer? buffer_size) -> void
48
+ def setup_receive_buffer: (Integer? buffer_size) -> void
49
+
50
+ # @rbs (SockaddrLL address) -> bool
51
+ def accept_direction?: (SockaddrLL address) -> bool
52
+
53
+ # @rbs (SockaddrLL address) -> Interface
54
+ def packet_interface: (SockaddrLL address) -> Interface
55
+
56
+ # @rbs () -> Integer
57
+ def interface_dropped: () -> Integer
58
+
59
+ # @rbs () -> Integer
60
+ def timestamp: () -> Integer
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,31 @@
1
+ # Generated from lib/redhound/capture/linux/sockaddr_ll.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ module Linux
8
+ # @api private
9
+ class SockaddrLL
10
+ attr_reader protocol: untyped
11
+
12
+ attr_reader index: untyped
13
+
14
+ attr_reader hatype: untyped
15
+
16
+ attr_reader pkttype: untyped
17
+
18
+ attr_reader address: untyped
19
+
20
+ # @rbs (?protocol: Integer, ?index: Integer, ?hatype: Integer, ?pkttype: Integer, ?address: String) -> void
21
+ def initialize: (?protocol: Integer, ?index: Integer, ?hatype: Integer, ?pkttype: Integer, ?address: String) -> void
22
+
23
+ # @rbs () -> String
24
+ def to_sockaddr: () -> String
25
+
26
+ # @rbs (String bytes) -> SockaddrLL
27
+ def self.parse: (String bytes) -> SockaddrLL
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ # Generated from lib/redhound/capture/linux/tpacket_v3.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ module Linux
8
+ # @api private
9
+ class TPacketV3 < PacketSocket
10
+ # @rbs (?timeout: Numeric?) -> Packet?
11
+ def next_packet: (?timeout: Numeric?) -> Packet?
12
+
13
+ # @rbs () -> void
14
+ def close_resources: () -> void
15
+
16
+ # @rbs () -> Integer
17
+ def receive_snaplen: () -> Integer
18
+
19
+ # @rbs (Integer? buffer_size) -> void
20
+ def setup_receive_buffer: (Integer? buffer_size) -> void
21
+
22
+ private
23
+
24
+ # @rbs (Integer offset) -> Integer
25
+ def u32: (Integer offset) -> Integer
26
+
27
+ # @rbs (Integer offset, Integer length) -> void
28
+ def check_ring_bounds: (Integer offset, Integer length) -> void
29
+
30
+ # @rbs () -> void
31
+ def release_block: () -> void
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,44 @@
1
+ # Generated from lib/redhound/capture/source.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ class Source
8
+ include Enumerable[Packet]
9
+
10
+ # @rbs () -> void
11
+ def initialize: () -> void
12
+
13
+ # @rbs () { (Packet) -> void } -> self
14
+ # @rbs () -> Enumerator[Packet, self]
15
+ def each_packet: () { (Packet) -> void } -> self
16
+ | () -> Enumerator[Packet, self]
17
+
18
+ alias each each_packet
19
+
20
+ # @rbs (?timeout: Numeric?) -> Packet?
21
+ def next_packet: (?timeout: Numeric?) -> Packet?
22
+
23
+ # @rbs () -> Stats
24
+ def stats: () -> Stats
25
+
26
+ # @rbs () -> bool
27
+ def stopped?: () -> bool
28
+
29
+ # @rbs () -> void
30
+ def stop: () -> void
31
+
32
+ # @rbs () -> void
33
+ def close: () -> void
34
+
35
+ private
36
+
37
+ # @rbs (IO io, Numeric? deadline) -> bool
38
+ def wait_readable: (IO io, Numeric? deadline) -> bool
39
+
40
+ # @rbs (Numeric? timeout) -> Numeric?
41
+ def deadline_for: (Numeric? timeout) -> Numeric?
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,25 @@
1
+ # Generated from lib/redhound/capture/stats.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @api private
7
+ class Stats
8
+ attr_accessor received: untyped
9
+
10
+ attr_accessor dropped: untyped
11
+
12
+ attr_accessor if_dropped: untyped
13
+
14
+ attr_accessor freeze_count: untyped
15
+
16
+ attr_accessor captured: untyped
17
+
18
+ # @rbs (?received: Integer, ?dropped: Integer, ?if_dropped: Integer, ?freeze_count: Integer, ?captured: Integer) -> void
19
+ def initialize: (?received: Integer, ?dropped: Integer, ?if_dropped: Integer, ?freeze_count: Integer, ?captured: Integer) -> void
20
+
21
+ # @rbs () -> Hash[Symbol, Integer]
22
+ def to_h: () -> Hash[Symbol, Integer]
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/redhound/capture.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module Capture
6
+ # @rbs (interface: String | Integer | Interface, ?backend: Symbol | String, ?snaplen: Integer, ?promiscuous: bool, ?buffer_size: Integer?, ?direction: Symbol, ?filter: String?) -> Source
7
+ # @rbs [T] (interface: String | Integer | Interface, ?backend: Symbol | String, ?snaplen: Integer, ?promiscuous: bool, ?buffer_size: Integer?, ?direction: Symbol, ?filter: String?) { (Source) -> T } -> T
8
+ def self.open: (interface: String | Integer | Interface, ?backend: Symbol | String, ?snaplen: Integer, ?promiscuous: bool, ?buffer_size: Integer?, ?direction: Symbol, ?filter: String?) -> Source
9
+ | [T] (interface: String | Integer | Interface, ?backend: Symbol | String, ?snaplen: Integer, ?promiscuous: bool, ?buffer_size: Integer?, ?direction: Symbol, ?filter: String?) { (Source) -> T } -> T
10
+
11
+ # @rbs () -> Array[Interface]
12
+ def self.interfaces: () -> Array[Interface]
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # Generated from lib/redhound/cli/command.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module CLI
6
+ # @api private
7
+ class Command
8
+ # @rbs (Array[String] argv, ?out: untyped, ?err: untyped) -> Integer
9
+ def run: (Array[String] argv, ?out: untyped, ?err: untyped) -> Integer
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,25 @@
1
+ # Generated from lib/redhound/cli/options.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module CLI
6
+ # @api private
7
+ class Options
8
+ attr_reader values: untyped
9
+
10
+ attr_reader parser: untyped
11
+
12
+ # @rbs (Array[String] argv) -> void
13
+ def initialize: (Array[String] argv) -> void
14
+
15
+ # @rbs (Array[String] args) -> Array[String]
16
+ def normalize: (Array[String] args) -> Array[String]
17
+
18
+ # @rbs () -> OptionParser
19
+ def build_parser: () -> OptionParser
20
+
21
+ # @rbs () -> void
22
+ def validate: () -> void
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,12 @@
1
+ # Generated from lib/redhound/cli/privileges.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module CLI
6
+ # @api private
7
+ module Privileges
8
+ # @rbs (String user) -> void
9
+ def self.drop: (String user) -> void
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ # Generated from lib/redhound/cli/runner.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ module CLI
6
+ # @api private
7
+ class Runner
8
+ # @rbs (Hash[Symbol, untyped] options, ?out: untyped, ?err: untyped) -> void
9
+ def initialize: (Hash[Symbol, untyped] options, ?out: untyped, ?err: untyped) -> void
10
+
11
+ # @rbs () -> void
12
+ def run: () -> void
13
+
14
+ # @rbs () -> untyped
15
+ def formatter: () -> untyped
16
+
17
+ # @rbs () -> void
18
+ def install_signals: () -> void
19
+
20
+ # @rbs [T] () { () -> T } -> T
21
+ def read_capture: [T] () { () -> T } -> T
22
+
23
+ # @rbs () -> void
24
+ def statistics: () -> void
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ # Generated from lib/redhound/context.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # @api private
5
+ class Context
6
+ attr_reader packet: untyped
7
+
8
+ attr_reader registry: untyped
9
+
10
+ attr_reader layers: untyped
11
+
12
+ attr_accessor cursor: untyped
13
+
14
+ attr_accessor embedded: untyped
15
+
16
+ attr_accessor extension_count: untyped
17
+
18
+ # @rbs (Packet packet, registry: Registry, ?verify_checksums: bool) -> void
19
+ def initialize: (Packet packet, registry: Registry, ?verify_checksums: bool) -> void
20
+
21
+ # @rbs () -> bool
22
+ def verify_checksums?: () -> bool
23
+
24
+ # @rbs () -> Layer?
25
+ def network: () -> Layer?
26
+ end
27
+ end
@@ -0,0 +1,59 @@
1
+ # Generated from lib/redhound/cursor.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # Checked binary reads within an absolute packet slice.
5
+ class Cursor
6
+ # Internal exception for a checked read beyond the captured slice.
7
+ class Truncated < StandardError
8
+ end
9
+
10
+ # Underlying data and absolute start/end bounds.
11
+ attr_reader data: untyped
12
+
13
+ # Underlying data and absolute start/end bounds.
14
+ attr_reader start: untyped
15
+
16
+ # Underlying data and absolute start/end bounds.
17
+ attr_reader limit: untyped
18
+
19
+ # @rbs (String data, ?Integer start, ?Integer? limit) -> void
20
+ # Create a bounded view; reject invalid ranges.
21
+ def initialize: (String data, ?Integer start, ?Integer? limit) -> void
22
+
23
+ # @rbs () -> Integer
24
+ # Remaining slice length in bytes.
25
+ def remaining: () -> Integer
26
+
27
+ # @rbs (Integer off) -> Integer
28
+ # Read an unsigned byte.
29
+ def u8: (Integer off) -> Integer
30
+
31
+ # @rbs (Integer off) -> Integer
32
+ # Read an unsigned network-order 16-bit integer.
33
+ def u16: (Integer off) -> Integer
34
+
35
+ # @rbs (Integer off) -> Integer
36
+ # Read an unsigned network-order 32-bit integer.
37
+ def u32: (Integer off) -> Integer
38
+
39
+ # @rbs (Integer off) -> Integer
40
+ # Read an unsigned network-order 64-bit integer.
41
+ def u64: (Integer off) -> Integer
42
+
43
+ # @rbs (String template, Integer size, ?Integer off) -> Array[untyped]
44
+ # Unpack a checked fixed-width header.
45
+ def unpack: (String template, Integer size, ?Integer off) -> Array[untyped]
46
+
47
+ # @rbs (Integer off, Integer len) -> String
48
+ # Read a checked binary substring.
49
+ def bytes: (Integer off, Integer len) -> String
50
+
51
+ # @rbs (Integer from, Integer to) -> Cursor
52
+ # Create a child slice that cannot escape the parent bounds.
53
+ def sub: (Integer from, Integer to) -> Cursor
54
+
55
+ # @rbs (Integer off, Integer len) -> void
56
+ # Validate a relative offset and read length.
57
+ def check: (Integer off, Integer len) -> void
58
+ end
59
+ end
@@ -0,0 +1,21 @@
1
+ # Generated from lib/redhound/diagnostic.rb with RBS::Inline
2
+
3
+ module Redhound
4
+ # Structured protocol diagnostic with severity, stable code, message and optional field.
5
+ class Diagnostic < Data
6
+ attr_reader severity(): untyped
7
+
8
+ attr_reader code(): untyped
9
+
10
+ attr_reader message(): untyped
11
+
12
+ attr_reader field(): untyped
13
+
14
+ def self.new: (untyped severity, untyped code, untyped message, untyped field) -> instance
15
+ | (severity: untyped, code: untyped, message: untyped, field: untyped) -> instance
16
+
17
+ def self.members: () -> [ :severity, :code, :message, :field ]
18
+
19
+ def members: () -> [ :severity, :code, :message, :field ]
20
+ end
21
+ end