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/l4/icmp.rb
DELETED
|
@@ -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
|
data/lib/redhound/l4/resolver.rb
DELETED
|
@@ -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
|
data/lib/redhound/l4/udp.rb
DELETED
|
@@ -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
data/lib/redhound/receiver.rb
DELETED
|
@@ -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
|
data/lib/redhound/resolver.rb
DELETED
|
@@ -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
|
data/lib/redhound/source.rb
DELETED
data/rbs_collection.lock.yaml
DELETED
|
@@ -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
|