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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +51 -0
- data/README.md +97 -31
- data/docs/API.md +104 -0
- data/docs/FILTERS.md +37 -0
- data/docs/MIGRATION.md +23 -0
- data/docs/PROTOCOLS.md +54 -0
- data/docs/USAGE.md +86 -0
- data/docs/VALIDATION.md +175 -0
- data/docs/json-schema.json +64 -0
- data/exe/redhound +2 -1
- data/lib/redhound/analysis/flow_key.rb +59 -0
- data/lib/redhound/analysis/flow_table.rb +124 -0
- data/lib/redhound/analysis/ip_reassembler.rb +209 -0
- data/lib/redhound/analysis/stats.rb +150 -0
- data/lib/redhound/analysis/tcp_analysis.rb +43 -0
- data/lib/redhound/analysis/tcp_reassembler.rb +176 -0
- data/lib/redhound/analysis/tcp_stream.rb +156 -0
- data/lib/redhound/analysis.rb +157 -0
- data/lib/redhound/capture/bsd/bpf_device.rb +155 -0
- data/lib/redhound/capture/bsd/constants.rb +29 -0
- data/lib/redhound/capture/bsd/ifreq.rb +41 -0
- data/lib/redhound/capture/file_source.rb +214 -0
- data/lib/redhound/capture/interface.rb +70 -0
- data/lib/redhound/capture/linktype.rb +30 -0
- data/lib/redhound/capture/linux/constants.rb +37 -0
- data/lib/redhound/capture/linux/cooked.rb +18 -0
- data/lib/redhound/capture/linux/ifreq.rb +42 -0
- data/lib/redhound/capture/linux/packet_socket.rb +224 -0
- data/lib/redhound/capture/linux/sockaddr_ll.rb +33 -0
- data/lib/redhound/capture/linux/tpacket_v3.rb +137 -0
- data/lib/redhound/capture/source.rb +79 -0
- data/lib/redhound/capture/stats.rb +22 -0
- data/lib/redhound/capture.rb +70 -0
- data/lib/redhound/cli/command.rb +42 -0
- data/lib/redhound/cli/options.rb +133 -0
- data/lib/redhound/cli/privileges.rb +29 -0
- data/lib/redhound/cli/runner.rb +129 -0
- data/lib/redhound/context.rb +20 -0
- data/lib/redhound/cursor.rb +69 -0
- data/lib/redhound/diagnostic.rb +7 -0
- data/lib/redhound/dissector.rb +152 -0
- data/lib/redhound/engine.rb +69 -0
- data/lib/redhound/errors.rb +38 -0
- data/lib/redhound/field.rb +62 -0
- data/lib/redhound/file/format.rb +63 -0
- data/lib/redhound/file/pcap_reader.rb +43 -0
- data/lib/redhound/file/pcap_writer.rb +79 -0
- data/lib/redhound/file/pcapng_reader.rb +221 -0
- data/lib/redhound/file/pcapng_writer.rb +151 -0
- data/lib/redhound/file/rotating_writer.rb +98 -0
- data/lib/redhound/filter/analyzer.rb +197 -0
- data/lib/redhound/filter/bpf/assembler.rb +121 -0
- data/lib/redhound/filter/bpf/disassembler.rb +58 -0
- data/lib/redhound/filter/bpf/validator.rb +77 -0
- data/lib/redhound/filter/bpf/vm.rb +109 -0
- data/lib/redhound/filter/codegen.rb +413 -0
- data/lib/redhound/filter/lexer.rb +46 -0
- data/lib/redhound/filter/parser.rb +206 -0
- data/lib/redhound/filter/program.rb +55 -0
- data/lib/redhound/filter.rb +30 -0
- data/lib/redhound/layer.rb +75 -0
- data/lib/redhound/output/fields.rb +20 -0
- data/lib/redhound/output/follow.rb +64 -0
- data/lib/redhound/output/hexdump.rb +29 -0
- data/lib/redhound/output/json.rb +32 -0
- data/lib/redhound/output/summary.rb +84 -0
- data/lib/redhound/output/timestamp.rb +34 -0
- data/lib/redhound/output/tree.rb +25 -0
- data/lib/redhound/packet.rb +77 -0
- data/lib/redhound/protocols/arp.rb +39 -0
- data/lib/redhound/protocols/checksum.rb +38 -0
- data/lib/redhound/protocols/data.rb +23 -0
- data/lib/redhound/protocols/dhcp.rb +140 -0
- data/lib/redhound/protocols/dns.rb +268 -0
- data/lib/redhound/protocols/ethernet.rb +24 -0
- data/lib/redhound/protocols/http.rb +185 -0
- data/lib/redhound/protocols/icmp.rb +205 -0
- data/lib/redhound/protocols/ipv4.rb +56 -0
- data/lib/redhound/protocols/ipv6.rb +68 -0
- data/lib/redhound/protocols/link.rb +70 -0
- data/lib/redhound/protocols/llc.rb +37 -0
- data/lib/redhound/protocols/ntp.rb +45 -0
- data/lib/redhound/protocols/tcp.rb +88 -0
- data/lib/redhound/protocols/tls.rb +218 -0
- data/lib/redhound/protocols/tunnel.rb +48 -0
- data/lib/redhound/protocols/udp.rb +32 -0
- data/lib/redhound/protocols/vlan.rb +23 -0
- data/lib/redhound/reader.rb +8 -0
- data/lib/redhound/registry.rb +64 -0
- data/lib/redhound/stream_dissector.rb +168 -0
- data/lib/redhound/util/seq.rb +21 -0
- data/lib/redhound/version.rb +2 -1
- data/lib/redhound/writer.rb +25 -43
- data/lib/redhound.rb +81 -9
- data/sig/generated/redhound/analysis/flow_key.rbs +15 -0
- data/sig/generated/redhound/analysis/flow_table.rbs +102 -0
- data/sig/generated/redhound/analysis/ip_reassembler.rbs +52 -0
- data/sig/generated/redhound/analysis/stats.rbs +80 -0
- data/sig/generated/redhound/analysis/tcp_analysis.rbs +15 -0
- data/sig/generated/redhound/analysis/tcp_reassembler.rbs +39 -0
- data/sig/generated/redhound/analysis/tcp_stream.rbs +60 -0
- data/sig/generated/redhound/analysis.rbs +38 -0
- data/sig/generated/redhound/capture/bsd/bpf_device.rbs +39 -0
- data/sig/generated/redhound/capture/bsd/constants.rbs +40 -0
- data/sig/generated/redhound/capture/bsd/ifreq.rbs +15 -0
- data/sig/generated/redhound/capture/file_source.rbs +67 -0
- data/sig/generated/redhound/capture/interface.rbs +53 -0
- data/sig/generated/redhound/capture/linktype.rbs +20 -0
- data/sig/generated/redhound/capture/linux/constants.rbs +58 -0
- data/sig/generated/redhound/capture/linux/cooked.rbs +15 -0
- data/sig/generated/redhound/capture/linux/ifreq.rbs +18 -0
- data/sig/generated/redhound/capture/linux/packet_socket.rbs +64 -0
- data/sig/generated/redhound/capture/linux/sockaddr_ll.rbs +31 -0
- data/sig/generated/redhound/capture/linux/tpacket_v3.rbs +35 -0
- data/sig/generated/redhound/capture/source.rbs +44 -0
- data/sig/generated/redhound/capture/stats.rbs +25 -0
- data/sig/generated/redhound/capture.rbs +14 -0
- data/sig/generated/redhound/cli/command.rbs +12 -0
- data/sig/generated/redhound/cli/options.rbs +25 -0
- data/sig/generated/redhound/cli/privileges.rbs +12 -0
- data/sig/generated/redhound/cli/runner.rbs +27 -0
- data/sig/generated/redhound/context.rbs +27 -0
- data/sig/generated/redhound/cursor.rbs +59 -0
- data/sig/generated/redhound/diagnostic.rbs +21 -0
- data/sig/generated/redhound/dissector.rbs +117 -0
- data/sig/generated/redhound/engine.rbs +23 -0
- data/sig/generated/redhound/errors.rbs +56 -0
- data/sig/generated/redhound/field.rbs +74 -0
- data/sig/generated/redhound/file/format.rbs +39 -0
- data/sig/generated/redhound/file/pcap_reader.rbs +19 -0
- data/sig/generated/redhound/file/pcap_writer.rbs +38 -0
- data/sig/generated/redhound/file/pcapng_reader.rbs +54 -0
- data/sig/generated/redhound/file/pcapng_writer.rbs +50 -0
- data/sig/generated/redhound/file/rotating_writer.rbs +42 -0
- data/sig/generated/redhound/filter/analyzer.rbs +42 -0
- data/sig/generated/redhound/filter/bpf/assembler.rbs +39 -0
- data/sig/generated/redhound/filter/bpf/disassembler.rbs +18 -0
- data/sig/generated/redhound/filter/bpf/validator.rbs +30 -0
- data/sig/generated/redhound/filter/bpf/vm.rbs +28 -0
- data/sig/generated/redhound/filter/codegen.rbs +101 -0
- data/sig/generated/redhound/filter/lexer.rbs +15 -0
- data/sig/generated/redhound/filter/parser.rbs +65 -0
- data/sig/generated/redhound/filter/program.rbs +48 -0
- data/sig/generated/redhound/filter.rbs +10 -0
- data/sig/generated/redhound/layer.rbs +81 -0
- data/sig/generated/redhound/output/fields.rbs +15 -0
- data/sig/generated/redhound/output/follow.rbs +21 -0
- data/sig/generated/redhound/output/hexdump.rbs +15 -0
- data/sig/generated/redhound/output/json.rbs +18 -0
- data/sig/generated/redhound/output/summary.rbs +21 -0
- data/sig/generated/redhound/output/timestamp.rbs +21 -0
- data/sig/generated/redhound/output/tree.rbs +15 -0
- data/sig/generated/redhound/packet.rbs +82 -0
- data/sig/generated/redhound/protocols/arp.rbs +15 -0
- data/sig/generated/redhound/protocols/checksum.rbs +15 -0
- data/sig/generated/redhound/protocols/data.rbs +17 -0
- data/sig/generated/redhound/protocols/dhcp.rbs +31 -0
- data/sig/generated/redhound/protocols/dns.rbs +42 -0
- data/sig/generated/redhound/protocols/ethernet.rbs +15 -0
- data/sig/generated/redhound/protocols/http.rbs +36 -0
- data/sig/generated/redhound/protocols/icmp.rbs +41 -0
- data/sig/generated/redhound/protocols/ipv4.rbs +15 -0
- data/sig/generated/redhound/protocols/ipv6.rbs +24 -0
- data/sig/generated/redhound/protocols/link.rbs +33 -0
- data/sig/generated/redhound/protocols/llc.rbs +15 -0
- data/sig/generated/redhound/protocols/ntp.rbs +17 -0
- data/sig/generated/redhound/protocols/tcp.rbs +25 -0
- data/sig/generated/redhound/protocols/tls.rbs +51 -0
- data/sig/generated/redhound/protocols/tunnel.rbs +24 -0
- data/sig/generated/redhound/protocols/udp.rbs +18 -0
- data/sig/generated/redhound/protocols/vlan.rbs +12 -0
- data/sig/generated/redhound/reader.rbs +7 -0
- data/sig/generated/redhound/registry.rbs +45 -0
- data/sig/generated/redhound/stream_dissector.rbs +44 -0
- data/sig/generated/redhound/util/seq.rbs +20 -0
- data/sig/generated/redhound/version.rbs +1 -0
- data/sig/generated/redhound/writer.rbs +6 -19
- data/sig/generated/redhound.rbs +18 -0
- data/sig/shims/io.rbs +7 -0
- data/sig/shims/process.rbs +3 -0
- metadata +177 -55
- data/CODE_OF_CONDUCT.md +0 -132
- data/Dockerfile +0 -7
- data/Rakefile +0 -15
- data/Steepfile +0 -4
- data/docker-compose.yml +0 -9
- data/lib/redhound/analyzer.rb +0 -34
- data/lib/redhound/builder/packet_mreq.rb +0 -56
- data/lib/redhound/builder/socket.rb +0 -35
- data/lib/redhound/builder.rb +0 -4
- data/lib/redhound/command.rb +0 -67
- data/lib/redhound/l2/ether.rb +0 -68
- data/lib/redhound/l2/protocol.rb +0 -33
- data/lib/redhound/l2.rb +0 -4
- data/lib/redhound/l3/arp.rb +0 -114
- data/lib/redhound/l3/base.rb +0 -49
- data/lib/redhound/l3/ipv4.rb +0 -95
- data/lib/redhound/l3/ipv6.rb +0 -69
- data/lib/redhound/l3/protocol.rb +0 -173
- data/lib/redhound/l3/resolver.rb +0 -30
- data/lib/redhound/l3.rb +0 -9
- data/lib/redhound/l4/base.rb +0 -31
- data/lib/redhound/l4/icmp.rb +0 -71
- data/lib/redhound/l4/resolver.rb +0 -28
- data/lib/redhound/l4/udp.rb +0 -63
- data/lib/redhound/l4.rb +0 -6
- data/lib/redhound/receiver.rb +0 -45
- data/lib/redhound/resolver.rb +0 -22
- data/lib/redhound/source/socket.rb +0 -18
- data/lib/redhound/source.rb +0 -3
- data/rbs_collection.lock.yaml +0 -20
- data/rbs_collection.yaml +0 -17
- data/sig/generated/redhound/analyzer.rbs +0 -14
- data/sig/generated/redhound/builder/packet_mreq.rbs +0 -39
- data/sig/generated/redhound/builder/socket.rbs +0 -24
- data/sig/generated/redhound/command.rbs +0 -19
- data/sig/generated/redhound/l2/ether.rbs +0 -41
- data/sig/generated/redhound/l2/protocol.rbs +0 -15
- data/sig/generated/redhound/l3/arp.rbs +0 -57
- data/sig/generated/redhound/l3/base.rbs +0 -28
- data/sig/generated/redhound/l3/ipv4.rbs +0 -53
- data/sig/generated/redhound/l3/ipv6.rbs +0 -38
- data/sig/generated/redhound/l3/protocol.rbs +0 -16
- data/sig/generated/redhound/l3/resolver.rbs +0 -16
- data/sig/generated/redhound/l4/base.rbs +0 -19
- data/sig/generated/redhound/l4/icmp.rbs +0 -33
- data/sig/generated/redhound/l4/resolver.rbs +0 -16
- data/sig/generated/redhound/l4/udp.rbs +0 -36
- data/sig/generated/redhound/receiver.rbs +0 -19
- data/sig/generated/redhound/resolver.rbs +0 -11
- data/sig/generated/redhound/source/socket.rbs +0 -13
data/lib/redhound/writer.rb
CHANGED
|
@@ -2,52 +2,34 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
module Redhound
|
|
5
|
+
# Open pcap/pcapng outputs, optionally with bounded rotation.
|
|
5
6
|
class Writer
|
|
6
|
-
# @rbs (
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# @rbs (msg: String) -> void
|
|
18
|
-
def write(msg:)
|
|
19
|
-
@file.write(packet_record(Time.now, msg.bytesize, msg.bytesize))
|
|
20
|
-
@file.write(msg)
|
|
21
|
-
end
|
|
7
|
+
# @rbs (untyped output, ?linktype: Integer | Symbol | String, ?format: Symbol | String | nil, ?snaplen: Integer, ?precision: Symbol, ?packet_buffered: bool, ?forbidden_input: String?, **untyped options) -> untyped
|
|
8
|
+
# @rbs [T] (untyped output, ?linktype: Integer | Symbol | String, ?format: Symbol | String | nil, ?snaplen: Integer, ?precision: Symbol, ?packet_buffered: bool, ?forbidden_input: String?, **untyped options) { (untyped) -> T } -> T
|
|
9
|
+
# Open a path or binary IO; close automatically with a block. See docs/API.md for options.
|
|
10
|
+
def self.open(output, linktype: :ethernet, format: nil, snaplen: 262_144, precision: :nano, packet_buffered: false, forbidden_input: nil, **options)
|
|
11
|
+
if forbidden_input && forbidden_input != '-' && output.is_a?(String) && output != '-'
|
|
12
|
+
same_path = ::File.expand_path(forbidden_input) == ::File.expand_path(output)
|
|
13
|
+
same_file = ::File.exist?(forbidden_input) && ::File.exist?(output) && ::File.identical?(forbidden_input, output)
|
|
14
|
+
raise ConfigurationError, 'input and output must be different files' if same_path || same_file
|
|
15
|
+
end
|
|
16
|
+
format ||= output.is_a?(String) && ::File.extname(output) == '.pcapng' ? :pcapng : :pcap
|
|
17
|
+
raise ArgumentError, "unknown capture file format: #{format}" unless %i[pcap pcapng].include?(format.to_sym)
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def file_header
|
|
32
|
-
[
|
|
33
|
-
0xa1b2c3d4, # Magic Number (little-endian)
|
|
34
|
-
2, # Version Major
|
|
35
|
-
4, # Version Minor
|
|
36
|
-
0, # Timezone offset (GMT)
|
|
37
|
-
0, # Timestamp accuracy
|
|
38
|
-
65535, # Snapshot length
|
|
39
|
-
1 # Link-layer header type (Ethernet)
|
|
40
|
-
].pack('VvvVVVV')
|
|
41
|
-
end
|
|
19
|
+
options = options.merge(linktype:, format:, snaplen:, precision:, packet_buffered:, forbidden_input:)
|
|
20
|
+
writer = if options[:max_bytes] || options[:interval]
|
|
21
|
+
File::RotatingWriter.new(output, **options)
|
|
22
|
+
else
|
|
23
|
+
klass = format.to_sym == :pcapng ? File::PcapngWriter : File::PcapWriter
|
|
24
|
+
klass.new(output, **options)
|
|
25
|
+
end
|
|
26
|
+
return writer unless block_given?
|
|
42
27
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
captured_length, # Captured packet length
|
|
49
|
-
original_length # Original packet length
|
|
50
|
-
].pack('VVVV')
|
|
28
|
+
begin
|
|
29
|
+
yield writer
|
|
30
|
+
ensure
|
|
31
|
+
writer.close
|
|
32
|
+
end
|
|
51
33
|
end
|
|
52
34
|
end
|
|
53
35
|
end
|
data/lib/redhound.rb
CHANGED
|
@@ -1,13 +1,85 @@
|
|
|
1
|
+
# rbs_inline: enabled
|
|
1
2
|
# frozen_string_literal: true
|
|
2
3
|
|
|
3
|
-
require_relative 'redhound/analyzer'
|
|
4
|
-
require_relative 'redhound/builder'
|
|
5
|
-
require_relative 'redhound/command'
|
|
6
|
-
require_relative 'redhound/l2'
|
|
7
|
-
require_relative 'redhound/l3'
|
|
8
|
-
require_relative 'redhound/l4'
|
|
9
|
-
require_relative 'redhound/receiver'
|
|
10
|
-
require_relative 'redhound/resolver'
|
|
11
|
-
require_relative 'redhound/source'
|
|
12
4
|
require_relative 'redhound/version'
|
|
5
|
+
|
|
6
|
+
require_relative 'redhound/errors'
|
|
7
|
+
require_relative 'redhound/cursor'
|
|
8
|
+
require_relative 'redhound/diagnostic'
|
|
9
|
+
require_relative 'redhound/field'
|
|
10
|
+
require_relative 'redhound/layer'
|
|
11
|
+
require_relative 'redhound/registry'
|
|
12
|
+
require_relative 'redhound/dissector'
|
|
13
|
+
require_relative 'redhound/stream_dissector'
|
|
14
|
+
require_relative 'redhound/context'
|
|
15
|
+
require_relative 'redhound/engine'
|
|
16
|
+
require_relative 'redhound/capture/linktype'
|
|
17
|
+
require_relative 'redhound/packet'
|
|
18
|
+
require_relative 'redhound/protocols/checksum'
|
|
19
|
+
require_relative 'redhound/protocols/data'
|
|
20
|
+
require_relative 'redhound/protocols/ethernet'
|
|
21
|
+
require_relative 'redhound/protocols/vlan'
|
|
22
|
+
require_relative 'redhound/protocols/llc'
|
|
23
|
+
require_relative 'redhound/protocols/link'
|
|
24
|
+
require_relative 'redhound/protocols/arp'
|
|
25
|
+
require_relative 'redhound/protocols/ipv4'
|
|
26
|
+
require_relative 'redhound/protocols/ipv6'
|
|
27
|
+
require_relative 'redhound/protocols/udp'
|
|
28
|
+
require_relative 'redhound/protocols/tcp'
|
|
29
|
+
require_relative 'redhound/protocols/icmp'
|
|
30
|
+
require_relative 'redhound/protocols/tunnel'
|
|
31
|
+
require_relative 'redhound/protocols/dns'
|
|
32
|
+
require_relative 'redhound/protocols/dhcp'
|
|
33
|
+
require_relative 'redhound/protocols/ntp'
|
|
34
|
+
require_relative 'redhound/protocols/http'
|
|
35
|
+
require_relative 'redhound/protocols/tls'
|
|
36
|
+
require_relative 'redhound/output/timestamp'
|
|
37
|
+
require_relative 'redhound/output/summary'
|
|
38
|
+
require_relative 'redhound/output/tree'
|
|
39
|
+
require_relative 'redhound/output/hexdump'
|
|
40
|
+
require_relative 'redhound/output/json'
|
|
41
|
+
require_relative 'redhound/output/fields'
|
|
42
|
+
require_relative 'redhound/filter'
|
|
43
|
+
require_relative 'redhound/capture'
|
|
13
44
|
require_relative 'redhound/writer'
|
|
45
|
+
require_relative 'redhound/analysis'
|
|
46
|
+
require_relative 'redhound/cli/options'
|
|
47
|
+
require_relative 'redhound/cli/privileges'
|
|
48
|
+
require_relative 'redhound/cli/runner'
|
|
49
|
+
require_relative 'redhound/cli/command'
|
|
50
|
+
|
|
51
|
+
# Capture, inspect and save network packets using Ruby standard libraries.
|
|
52
|
+
module Redhound
|
|
53
|
+
# @rbs (String bytes, ?linktype: (Integer | Symbol), **untyped metadata) -> Packet
|
|
54
|
+
# Create a packet with lazy, bounded protocol dissection. See docs/API.md.
|
|
55
|
+
def self.dissect(bytes, linktype: :ethernet, **metadata)
|
|
56
|
+
Packet.new(bytes, linktype: linktype, **metadata)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @rbs (untyped input, ?filter: String?) -> Reader
|
|
60
|
+
# @rbs [T] (untyped input, ?filter: String?) { (Reader) -> T } -> T
|
|
61
|
+
# Read a pcap/pcapng path or binary IO; a block closes the reader automatically.
|
|
62
|
+
def self.open(input, filter: nil)
|
|
63
|
+
reader = Reader.new(input, filter: filter)
|
|
64
|
+
return reader unless block_given?
|
|
65
|
+
begin
|
|
66
|
+
yield reader
|
|
67
|
+
ensure
|
|
68
|
+
reader.close
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# @rbs (interface: String | Integer, ?count: Integer?, **untyped options) { (Packet) -> void } -> void
|
|
73
|
+
# Yield live packets until count is reached or capture stops; always close the source.
|
|
74
|
+
def self.capture(interface:, count: nil, **options)
|
|
75
|
+
raise ConfigurationError, 'count must be positive' if count && count <= 0
|
|
76
|
+
Capture.open(interface: interface, **options) do |source|
|
|
77
|
+
captured = 0
|
|
78
|
+
source.each_packet do |packet|
|
|
79
|
+
yield packet
|
|
80
|
+
captured += 1
|
|
81
|
+
break if count && captured >= count
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated from lib/redhound/analysis/flow_key.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Analysis
|
|
6
|
+
# @api private
|
|
7
|
+
module FlowKey
|
|
8
|
+
# @rbs (Packet packet, ?Symbol? type) -> untyped
|
|
9
|
+
def self.from: (Packet packet, ?Symbol? type) -> untyped
|
|
10
|
+
|
|
11
|
+
# @rbs (Symbol proto, untyped src, untyped dst) -> untyped
|
|
12
|
+
def self.normalize: (Symbol proto, untyped src, untyped dst) -> untyped
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Generated from lib/redhound/analysis/flow_table.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Analysis
|
|
6
|
+
# @api private
|
|
7
|
+
class Flow
|
|
8
|
+
BASE_BYTES: ::Integer
|
|
9
|
+
|
|
10
|
+
attr_reader key: untyped
|
|
11
|
+
|
|
12
|
+
attr_reader id: untyped
|
|
13
|
+
|
|
14
|
+
attr_reader first_ns: untyped
|
|
15
|
+
|
|
16
|
+
attr_reader packets: untyped
|
|
17
|
+
|
|
18
|
+
attr_reader bytes: untyped
|
|
19
|
+
|
|
20
|
+
attr_reader streams: untyped
|
|
21
|
+
|
|
22
|
+
attr_reader applications: untyped
|
|
23
|
+
|
|
24
|
+
attr_reader acks: untyped
|
|
25
|
+
|
|
26
|
+
attr_reader keep_alives: untyped
|
|
27
|
+
|
|
28
|
+
attr_reader http_methods: untyped
|
|
29
|
+
|
|
30
|
+
attr_reader probes: untyped
|
|
31
|
+
|
|
32
|
+
attr_reader probe_disabled: untyped
|
|
33
|
+
|
|
34
|
+
attr_accessor last_ns: untyped
|
|
35
|
+
|
|
36
|
+
attr_accessor closed_ns: untyped
|
|
37
|
+
|
|
38
|
+
attr_accessor syn_ns: untyped
|
|
39
|
+
|
|
40
|
+
attr_accessor syn_direction: untyped
|
|
41
|
+
|
|
42
|
+
attr_accessor synack_ns: untyped
|
|
43
|
+
|
|
44
|
+
attr_accessor synack_seq: untyped
|
|
45
|
+
|
|
46
|
+
attr_accessor initial_rtt: untyped
|
|
47
|
+
|
|
48
|
+
attr_accessor accounted_bytes: untyped
|
|
49
|
+
|
|
50
|
+
# @rbs (untyped key, Integer id, Integer timestamp_ns) -> void
|
|
51
|
+
def initialize: (untyped key, Integer id, Integer timestamp_ns) -> void
|
|
52
|
+
|
|
53
|
+
# @rbs () -> bool
|
|
54
|
+
def closed?: () -> bool
|
|
55
|
+
|
|
56
|
+
# @rbs () -> Integer
|
|
57
|
+
def bytesize: () -> Integer
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @api private
|
|
61
|
+
class FlowTable
|
|
62
|
+
attr_reader evicted: untyped
|
|
63
|
+
|
|
64
|
+
attr_reader expired: untyped
|
|
65
|
+
|
|
66
|
+
attr_accessor on_remove: untyped
|
|
67
|
+
|
|
68
|
+
# @rbs (?max_flows: Integer) -> void
|
|
69
|
+
def initialize: (?max_flows: Integer) -> void
|
|
70
|
+
|
|
71
|
+
# @rbs (Packet packet) -> untyped
|
|
72
|
+
def update: (Packet packet) -> untyped
|
|
73
|
+
|
|
74
|
+
# @rbs (Integer now_ns) -> void
|
|
75
|
+
def advance: (Integer now_ns) -> void
|
|
76
|
+
|
|
77
|
+
# @rbs (Integer now_ns) -> void
|
|
78
|
+
def expire: (Integer now_ns) -> void
|
|
79
|
+
|
|
80
|
+
# @rbs (?Symbol? type) -> Flow?
|
|
81
|
+
def evict: (?Symbol? type) -> Flow?
|
|
82
|
+
|
|
83
|
+
# @rbs (Flow flow) -> void
|
|
84
|
+
def discard: (Flow flow) -> void
|
|
85
|
+
|
|
86
|
+
# @rbs (Flow flow) -> void
|
|
87
|
+
def account: (Flow flow) -> void
|
|
88
|
+
|
|
89
|
+
# @rbs () -> Integer
|
|
90
|
+
def size: () -> Integer
|
|
91
|
+
|
|
92
|
+
# @rbs () -> Array[Flow]
|
|
93
|
+
def values: () -> Array[Flow]
|
|
94
|
+
|
|
95
|
+
# @rbs () -> Integer
|
|
96
|
+
def bytesize: () -> Integer
|
|
97
|
+
|
|
98
|
+
# @rbs () -> Integer
|
|
99
|
+
def tcp_bytesize: () -> Integer
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Generated from lib/redhound/analysis/ip_reassembler.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Analysis
|
|
6
|
+
# @api private
|
|
7
|
+
class IpReassembler
|
|
8
|
+
attr_reader evicted: untyped
|
|
9
|
+
|
|
10
|
+
attr_reader expired: untyped
|
|
11
|
+
|
|
12
|
+
# @rbs (?max_bytes: Integer, ?timeout_ns: Integer) -> void
|
|
13
|
+
def initialize: (?max_bytes: Integer, ?timeout_ns: Integer) -> void
|
|
14
|
+
|
|
15
|
+
# @rbs (Packet packet) -> untyped
|
|
16
|
+
def descriptor: (Packet packet) -> untyped
|
|
17
|
+
|
|
18
|
+
# @rbs (Packet packet) -> Packet?
|
|
19
|
+
def update: (Packet packet) -> Packet?
|
|
20
|
+
|
|
21
|
+
# @rbs (untyped state) -> bool
|
|
22
|
+
def complete?: (untyped state) -> bool
|
|
23
|
+
|
|
24
|
+
# @rbs (Packet packet, untyped state, Integer version) -> Packet?
|
|
25
|
+
def virtual_packet: (Packet packet, untyped state, Integer version) -> Packet?
|
|
26
|
+
|
|
27
|
+
# @rbs (Integer now_ns) -> void
|
|
28
|
+
def advance: (Integer now_ns) -> void
|
|
29
|
+
|
|
30
|
+
# @rbs (Integer now_ns) -> void
|
|
31
|
+
def expire: (Integer now_ns) -> void
|
|
32
|
+
|
|
33
|
+
# @rbs () -> Integer
|
|
34
|
+
def bytesize: () -> Integer
|
|
35
|
+
|
|
36
|
+
# @rbs (untyped state) -> Integer
|
|
37
|
+
def state_bytesize: (untyped state) -> Integer
|
|
38
|
+
|
|
39
|
+
# @rbs (untyped key) -> untyped
|
|
40
|
+
def remove: (untyped key) -> untyped
|
|
41
|
+
|
|
42
|
+
# @rbs () -> untyped
|
|
43
|
+
def remove_oldest: () -> untyped
|
|
44
|
+
|
|
45
|
+
# @rbs () -> Integer
|
|
46
|
+
def finish: () -> Integer
|
|
47
|
+
|
|
48
|
+
# @rbs () -> Integer
|
|
49
|
+
def size: () -> Integer
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Generated from lib/redhound/analysis/stats.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Analysis
|
|
6
|
+
# @api private
|
|
7
|
+
module Stats
|
|
8
|
+
# @api private
|
|
9
|
+
class Table
|
|
10
|
+
attr_reader evicted: untyped
|
|
11
|
+
|
|
12
|
+
# @rbs (?max_rows: Integer) -> void
|
|
13
|
+
def initialize: (?max_rows: Integer) -> void
|
|
14
|
+
|
|
15
|
+
# @rbs (untyped key) { () -> untyped } -> untyped
|
|
16
|
+
def row: (untyped key) { () -> untyped } -> untyped
|
|
17
|
+
|
|
18
|
+
# @rbs () -> Integer
|
|
19
|
+
def bytesize: () -> Integer
|
|
20
|
+
|
|
21
|
+
# @rbs () -> void
|
|
22
|
+
def evict: () -> void
|
|
23
|
+
|
|
24
|
+
# @rbs (untyped io) -> void
|
|
25
|
+
def format: (untyped io) -> void
|
|
26
|
+
|
|
27
|
+
# @rbs () -> Hash[Symbol, untyped]
|
|
28
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @api private
|
|
32
|
+
class Io < Table
|
|
33
|
+
# @rbs ((Integer | Float) seconds, ?max_rows: Integer) -> void
|
|
34
|
+
def initialize: (Integer | Float seconds, ?max_rows: Integer) -> void
|
|
35
|
+
|
|
36
|
+
# @rbs (Packet packet) -> void
|
|
37
|
+
def update: (Packet packet) -> void
|
|
38
|
+
|
|
39
|
+
# @rbs () -> Hash[Symbol, untyped]
|
|
40
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
41
|
+
|
|
42
|
+
# @rbs (Integer interval) -> Hash[Symbol, Integer]
|
|
43
|
+
def interval_row: (Integer interval) -> Hash[Symbol, Integer]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @api private
|
|
47
|
+
class Conversations < Table
|
|
48
|
+
# @rbs (Symbol type, ?max_rows: Integer) -> void
|
|
49
|
+
def initialize: (Symbol type, ?max_rows: Integer) -> void
|
|
50
|
+
|
|
51
|
+
# @rbs (Packet packet) -> void
|
|
52
|
+
def update: (Packet packet) -> void
|
|
53
|
+
|
|
54
|
+
# @rbs () -> Hash[Symbol, untyped]
|
|
55
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# @api private
|
|
59
|
+
class Endpoints < Table
|
|
60
|
+
# @rbs (Symbol type, ?max_rows: Integer) -> void
|
|
61
|
+
def initialize: (Symbol type, ?max_rows: Integer) -> void
|
|
62
|
+
|
|
63
|
+
# @rbs (Packet packet) -> void
|
|
64
|
+
def update: (Packet packet) -> void
|
|
65
|
+
|
|
66
|
+
# @rbs () -> Hash[Symbol, untyped]
|
|
67
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# @api private
|
|
71
|
+
class Hierarchy < Table
|
|
72
|
+
# @rbs (Packet packet) -> void
|
|
73
|
+
def update: (Packet packet) -> void
|
|
74
|
+
|
|
75
|
+
# @rbs () -> Hash[Symbol, untyped]
|
|
76
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated from lib/redhound/analysis/tcp_analysis.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Analysis
|
|
6
|
+
# @api private
|
|
7
|
+
module TcpAnalysis
|
|
8
|
+
# @rbs (Flow flow, Integer direction, TcpStream stream, Layer layer, Integer timestamp_ns) -> void
|
|
9
|
+
def self.update: (Flow flow, Integer direction, TcpStream stream, Layer layer, Integer timestamp_ns) -> void
|
|
10
|
+
|
|
11
|
+
# @rbs (Layer layer, Symbol name) -> void
|
|
12
|
+
def self.flag: (Layer layer, Symbol name) -> void
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Generated from lib/redhound/analysis/tcp_reassembler.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Analysis
|
|
6
|
+
# @api private
|
|
7
|
+
class TcpReassembler
|
|
8
|
+
# @rbs (?registry: Registry, ?max_bytes: Integer, ?stream_bytes: Integer, ?protocol_streams: bool, ?follow: untyped) -> void
|
|
9
|
+
def initialize: (?registry: Registry, ?max_bytes: Integer, ?stream_bytes: Integer, ?protocol_streams: bool, ?follow: untyped) -> void
|
|
10
|
+
|
|
11
|
+
# @rbs (Packet packet, Flow flow, Integer direction) -> void
|
|
12
|
+
def update: (Packet packet, Flow flow, Integer direction) -> void
|
|
13
|
+
|
|
14
|
+
# @rbs (Flow flow, Integer direction, TcpStream stream, untyped application, Packet? packet) -> Array[Layer]
|
|
15
|
+
def deliver: (Flow flow, Integer direction, TcpStream stream, untyped application, Packet? packet) -> Array[Layer]
|
|
16
|
+
|
|
17
|
+
# @rbs (Flow flow, Integer direction, String data, Integer origin, Packet? packet) -> Array[Layer]
|
|
18
|
+
def application_data: (Flow flow, Integer direction, String data, Integer origin, Packet? packet) -> Array[Layer]
|
|
19
|
+
|
|
20
|
+
# @rbs (untyped klass, Flow flow, Integer direction, Layer layer) -> untyped
|
|
21
|
+
def create_application: (untyped klass, Flow flow, Integer direction, Layer layer) -> untyped
|
|
22
|
+
|
|
23
|
+
# @rbs (Flow flow, Integer direction, untyped application, Symbol method, *untyped arguments) -> Array[Layer]
|
|
24
|
+
def invoke: (Flow flow, Integer direction, untyped application, Symbol method, *untyped arguments) -> Array[Layer]
|
|
25
|
+
|
|
26
|
+
# @rbs (Flow flow, Integer direction, Symbol protocol, StandardError error) -> Layer
|
|
27
|
+
def application_error: (Flow flow, Integer direction, Symbol protocol, StandardError error) -> Layer
|
|
28
|
+
|
|
29
|
+
# @rbs (Packet packet, Array[Layer] layers) -> void
|
|
30
|
+
def attach: (Packet packet, Array[Layer] layers) -> void
|
|
31
|
+
|
|
32
|
+
# @rbs (Flow flow, ?Packet? packet) -> Array[Layer]
|
|
33
|
+
def finish_flow: (Flow flow, ?Packet? packet) -> Array[Layer]
|
|
34
|
+
|
|
35
|
+
# @rbs (FlowTable flows, Packet packet) -> void
|
|
36
|
+
def enforce_limit: (FlowTable flows, Packet packet) -> void
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Generated from lib/redhound/analysis/tcp_stream.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Analysis
|
|
6
|
+
# @api private
|
|
7
|
+
class TcpStream
|
|
8
|
+
attr_reader base_seq: untyped
|
|
9
|
+
|
|
10
|
+
attr_reader expected: untyped
|
|
11
|
+
|
|
12
|
+
attr_reader diagnostics: untyped
|
|
13
|
+
|
|
14
|
+
attr_reader deliveries: untyped
|
|
15
|
+
|
|
16
|
+
attr_reader gap_lengths: untyped
|
|
17
|
+
|
|
18
|
+
attr_reader fin: untyped
|
|
19
|
+
|
|
20
|
+
# @rbs (?max_bytes: Integer) -> void
|
|
21
|
+
def initialize: (?max_bytes: Integer) -> void
|
|
22
|
+
|
|
23
|
+
# @rbs (Integer sequence, String data, ?syn: bool, ?fin: bool, ?frame: Integer) -> Array[String]
|
|
24
|
+
def push: (Integer sequence, String data, ?syn: bool, ?fin: bool, ?frame: Integer) -> Array[String]
|
|
25
|
+
|
|
26
|
+
# @rbs (Integer start, String data, Integer old_start, String old_data) -> void
|
|
27
|
+
def compare_overlap: (Integer start, String data, Integer old_start, String old_data) -> void
|
|
28
|
+
|
|
29
|
+
# @rbs () -> void
|
|
30
|
+
def drain: () -> void
|
|
31
|
+
|
|
32
|
+
# @rbs (?bool clear) -> Array[String]
|
|
33
|
+
def flush_gap: (?bool clear) -> Array[String]
|
|
34
|
+
|
|
35
|
+
# @rbs () -> void
|
|
36
|
+
def trim_history: () -> void
|
|
37
|
+
|
|
38
|
+
# @rbs () -> Integer
|
|
39
|
+
def bytesize: () -> Integer
|
|
40
|
+
|
|
41
|
+
# @rbs () -> bool
|
|
42
|
+
def pending?: () -> bool
|
|
43
|
+
|
|
44
|
+
# @rbs () -> bool
|
|
45
|
+
def fin_seen?: () -> bool
|
|
46
|
+
|
|
47
|
+
# @rbs () -> void
|
|
48
|
+
def consume_fin: () -> void
|
|
49
|
+
|
|
50
|
+
# @rbs () -> Integer
|
|
51
|
+
def next_sequence: () -> Integer
|
|
52
|
+
|
|
53
|
+
# @rbs () -> void
|
|
54
|
+
def clear_deliveries: () -> void
|
|
55
|
+
|
|
56
|
+
# @rbs () -> void
|
|
57
|
+
def release: () -> void
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Generated from lib/redhound/analysis.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Analysis
|
|
6
|
+
# @api private
|
|
7
|
+
class Session
|
|
8
|
+
attr_reader flows: untyped
|
|
9
|
+
|
|
10
|
+
attr_reader ip_reassembler: untyped
|
|
11
|
+
|
|
12
|
+
attr_reader tcp_reassembler: untyped
|
|
13
|
+
|
|
14
|
+
attr_reader statistics: untyped
|
|
15
|
+
|
|
16
|
+
# @rbs (?stats: Array[String], ?follow: String?, ?registry: Registry, ?max_state_bytes: Integer, ?max_flows: Integer, ?ip_bytes: Integer, ?tcp_bytes: Integer, ?stream_bytes: Integer, ?protocol_streams: bool) -> void
|
|
17
|
+
def initialize: (?stats: Array[String], ?follow: String?, ?registry: Registry, ?max_state_bytes: Integer, ?max_flows: Integer, ?ip_bytes: Integer, ?tcp_bytes: Integer, ?stream_bytes: Integer, ?protocol_streams: bool) -> void
|
|
18
|
+
|
|
19
|
+
# @rbs (String specification, Integer max_rows) -> untyped
|
|
20
|
+
def statistic: (String specification, Integer max_rows) -> untyped
|
|
21
|
+
|
|
22
|
+
# @rbs (Packet packet) -> void
|
|
23
|
+
def update: (Packet packet) -> void
|
|
24
|
+
|
|
25
|
+
# @rbs (Packet packet) -> void
|
|
26
|
+
def enforce_limit: (Packet packet) -> void
|
|
27
|
+
|
|
28
|
+
# @rbs () -> Integer
|
|
29
|
+
def bytesize: () -> Integer
|
|
30
|
+
|
|
31
|
+
# @rbs (untyped err) -> void
|
|
32
|
+
def snapshot: (untyped err) -> void
|
|
33
|
+
|
|
34
|
+
# @rbs (untyped out, untyped err) -> void
|
|
35
|
+
def finish: (untyped out, untyped err) -> void
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Generated from lib/redhound/capture/bsd/bpf_device.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Capture
|
|
6
|
+
# @api private
|
|
7
|
+
module Bsd
|
|
8
|
+
# @api private
|
|
9
|
+
class BpfDevice < Source
|
|
10
|
+
attr_reader linktype: untyped
|
|
11
|
+
|
|
12
|
+
attr_reader interfaces: untyped
|
|
13
|
+
|
|
14
|
+
# @rbs (interface: String | Integer | Interface, ?snaplen: Integer, ?promiscuous: bool, ?buffer_size: Integer?, ?direction: Symbol, ?filter: String?) -> void
|
|
15
|
+
def initialize: (interface: String | Integer | Interface, ?snaplen: Integer, ?promiscuous: bool, ?buffer_size: Integer?, ?direction: Symbol, ?filter: String?) -> void
|
|
16
|
+
|
|
17
|
+
# @rbs (?timeout: Numeric?) -> Packet?
|
|
18
|
+
def next_packet: (?timeout: Numeric?) -> Packet?
|
|
19
|
+
|
|
20
|
+
# @rbs (untyped program) -> void
|
|
21
|
+
def attach_filter: (untyped program) -> void
|
|
22
|
+
|
|
23
|
+
# @rbs () -> Stats
|
|
24
|
+
def stats: () -> Stats
|
|
25
|
+
|
|
26
|
+
# @rbs () -> void
|
|
27
|
+
def close: () -> void
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
# @rbs () -> ::File
|
|
32
|
+
def open_device: () -> ::File
|
|
33
|
+
|
|
34
|
+
# @rbs () -> void
|
|
35
|
+
def configure_direction: () -> void
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Generated from lib/redhound/capture/bsd/constants.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
# @api private
|
|
5
|
+
module Capture
|
|
6
|
+
# @api private
|
|
7
|
+
module Bsd
|
|
8
|
+
# @api private
|
|
9
|
+
module Constants
|
|
10
|
+
# Verified against the macOS SDK's net/bpf.h on arm64 and 64-bit ioctl layout.
|
|
11
|
+
BIOCSBLEN: ::Integer
|
|
12
|
+
|
|
13
|
+
BIOCGBLEN: ::Integer
|
|
14
|
+
|
|
15
|
+
BIOCSETF: ::Integer
|
|
16
|
+
|
|
17
|
+
BIOCFLUSH: ::Integer
|
|
18
|
+
|
|
19
|
+
BIOCPROMISC: ::Integer
|
|
20
|
+
|
|
21
|
+
BIOCGDLT: ::Integer
|
|
22
|
+
|
|
23
|
+
BIOCSETIF: ::Integer
|
|
24
|
+
|
|
25
|
+
BIOCGSTATS: ::Integer
|
|
26
|
+
|
|
27
|
+
BIOCIMMEDIATE: ::Integer
|
|
28
|
+
|
|
29
|
+
BIOCSSEESENT: ::Integer
|
|
30
|
+
|
|
31
|
+
# Apple XNU bsd/net/bpf_private.h: extended headers expose direction at byte 19.
|
|
32
|
+
BIOCSEXTHDR: ::Integer
|
|
33
|
+
|
|
34
|
+
BIOCSDIRECTION: ::Integer
|
|
35
|
+
|
|
36
|
+
BPF_ALIGNMENT: ::Integer
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated from lib/redhound/capture/bsd/ifreq.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Redhound
|
|
4
|
+
module Capture
|
|
5
|
+
module Bsd
|
|
6
|
+
# macOS interface metadata can be queried without opening a BPF device.
|
|
7
|
+
module Ifreq
|
|
8
|
+
SIOCGIFMTU: ::Integer
|
|
9
|
+
|
|
10
|
+
# @rbs (String name, index: Integer, flags: Integer, link_address: String?) -> Interface
|
|
11
|
+
def self.interface: (String name, index: Integer, flags: Integer, link_address: String?) -> Interface
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|