DIY-pcap 0.4.1 → 0.4.3

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 (35) hide show
  1. data/.gitignore +4 -4
  2. data/DIY-pcap.gemspec +17 -17
  3. data/Gemfile +3 -3
  4. data/Rakefile +1 -1
  5. data/lib/DIY-pcap.rb +2 -2
  6. data/lib/diy/command.rb +7 -1
  7. data/lib/diy/controller.rb +10 -15
  8. data/lib/diy/live.rb +9 -2
  9. data/lib/diy/parser/mu/pcap/ethernet.rb +148 -148
  10. data/lib/diy/parser/mu/pcap/header.rb +75 -75
  11. data/lib/diy/parser/mu/pcap/io_pair.rb +67 -67
  12. data/lib/diy/parser/mu/pcap/io_wrapper.rb +76 -76
  13. data/lib/diy/parser/mu/pcap/ip.rb +61 -61
  14. data/lib/diy/parser/mu/pcap/ipv4.rb +257 -257
  15. data/lib/diy/parser/mu/pcap/ipv6.rb +148 -148
  16. data/lib/diy/parser/mu/pcap/packet.rb +104 -104
  17. data/lib/diy/parser/mu/pcap/pkthdr.rb +155 -155
  18. data/lib/diy/parser/mu/pcap/reader.rb +61 -61
  19. data/lib/diy/parser/mu/pcap/reader/http_family.rb +170 -170
  20. data/lib/diy/parser/mu/pcap/sctp.rb +367 -367
  21. data/lib/diy/parser/mu/pcap/sctp/chunk.rb +123 -123
  22. data/lib/diy/parser/mu/pcap/sctp/chunk/data.rb +134 -134
  23. data/lib/diy/parser/mu/pcap/sctp/chunk/init.rb +100 -100
  24. data/lib/diy/parser/mu/pcap/sctp/chunk/init_ack.rb +68 -68
  25. data/lib/diy/parser/mu/pcap/sctp/parameter.rb +110 -110
  26. data/lib/diy/parser/mu/pcap/sctp/parameter/ip_address.rb +48 -48
  27. data/lib/diy/parser/mu/pcap/stream_packetizer.rb +72 -72
  28. data/lib/diy/parser/mu/pcap/tcp.rb +505 -505
  29. data/lib/diy/parser/mu/pcap/udp.rb +69 -69
  30. data/lib/diy/parser/mu/scenario/pcap.rb +172 -172
  31. data/lib/diy/parser/mu/scenario/pcap/fields.rb +50 -50
  32. data/lib/diy/parser/mu/scenario/pcap/rtp.rb +71 -71
  33. data/lib/diy/parser/pcap.rb +109 -109
  34. data/lib/diy/version.rb +1 -1
  35. metadata +7 -9
@@ -1,100 +1,100 @@
1
- # http://www.mudynamics.com
2
- # http://labs.mudynamics.com
3
- # http://www.pcapr.net
4
-
5
- module Mu
6
- class Pcap
7
- class SCTP
8
- class Chunk
9
-
10
- class Init < Chunk
11
- attr_accessor :init_tag, :a_rwnd, :o_streams, :i_streams, :init_tsn
12
-
13
- def initialize
14
- super
15
-
16
- @type = CHUNK_INIT
17
- @init_tag = 0
18
- @a_rwnd = 0
19
- @o_streams = 0
20
- @i_streams = 0
21
- @init_tsn = 0
22
- @payload = []
23
- end
24
-
25
- def self.from_bytes flags, size, bytes
26
- # Basic validation
27
- Pcap.assert(bytes.length >= 16,
28
- "Truncated init chunk header: 16 > #{bytes.length}")
29
-
30
- # Read init chunk header
31
- init_tag, a_rwnd, o_streams, i_streams, init_tsn = bytes.unpack('NNnnN')
32
-
33
- # Create init chunk
34
- init = Init.new
35
- init.flags = flags
36
- init.size = size
37
- init.init_tag = init_tag
38
- init.a_rwnd = a_rwnd
39
- init.o_streams = o_streams
40
- init.i_streams = i_streams
41
- init.init_tsn = init_tsn
42
-
43
- # Initialize the counter
44
- length = 16
45
-
46
- # Collect the chunks
47
- while length < bytes.length
48
- # Parse new parameter from the bytes
49
- parameter = Parameter.from_bytes(bytes[length..-1])
50
-
51
- # Get parameter size with padding
52
- length += parameter.padded_size
53
-
54
- # Add chunk to the list
55
- init << parameter
56
- end
57
-
58
- # Return the result
59
- return init
60
- end
61
-
62
- def write io, ip
63
- chunk_header = [@type, @flags, @size].pack('CCn')
64
- init_header = [@init_tag,
65
- @a_rwnd,
66
- @o_streams,
67
- @i_streams,
68
- @init_tsn].pack('NNnnN')
69
-
70
- # Write Chunk header followed by the Init chunk header
71
- io.write(chunk_header)
72
- io.write(init_header)
73
-
74
- # Write each parameter
75
- @payload.each do |parameter|
76
- parameter.write(io, ip)
77
- end
78
- end
79
-
80
- def << parameter
81
- @payload << parameter
82
- end
83
-
84
- def to_s
85
- return "init(%d, %d, %d, %d, %d, %d, %s)" % [@size,
86
- @init_tag,
87
- @a_rwnd,
88
- @o_streams,
89
- @i_streams,
90
- @init_tsn,
91
- @payload.join(", ")]
92
- end
93
- end # class Init
94
-
95
- end # class Chunk
96
- end # class SCTP
97
- end # class Pcap
98
- end # module Mu
99
-
100
- require 'mu/pcap/sctp/parameter'
1
+ # http://www.mudynamics.com
2
+ # http://labs.mudynamics.com
3
+ # http://www.pcapr.net
4
+
5
+ module Mu
6
+ class Pcap
7
+ class SCTP
8
+ class Chunk
9
+
10
+ class Init < Chunk
11
+ attr_accessor :init_tag, :a_rwnd, :o_streams, :i_streams, :init_tsn
12
+
13
+ def initialize
14
+ super
15
+
16
+ @type = CHUNK_INIT
17
+ @init_tag = 0
18
+ @a_rwnd = 0
19
+ @o_streams = 0
20
+ @i_streams = 0
21
+ @init_tsn = 0
22
+ @payload = []
23
+ end
24
+
25
+ def self.from_bytes flags, size, bytes
26
+ # Basic validation
27
+ Pcap.assert(bytes.length >= 16,
28
+ "Truncated init chunk header: 16 > #{bytes.length}")
29
+
30
+ # Read init chunk header
31
+ init_tag, a_rwnd, o_streams, i_streams, init_tsn = bytes.unpack('NNnnN')
32
+
33
+ # Create init chunk
34
+ init = Init.new
35
+ init.flags = flags
36
+ init.size = size
37
+ init.init_tag = init_tag
38
+ init.a_rwnd = a_rwnd
39
+ init.o_streams = o_streams
40
+ init.i_streams = i_streams
41
+ init.init_tsn = init_tsn
42
+
43
+ # Initialize the counter
44
+ length = 16
45
+
46
+ # Collect the chunks
47
+ while length < bytes.length
48
+ # Parse new parameter from the bytes
49
+ parameter = Parameter.from_bytes(bytes[length..-1])
50
+
51
+ # Get parameter size with padding
52
+ length += parameter.padded_size
53
+
54
+ # Add chunk to the list
55
+ init << parameter
56
+ end
57
+
58
+ # Return the result
59
+ return init
60
+ end
61
+
62
+ def write io, ip
63
+ chunk_header = [@type, @flags, @size].pack('CCn')
64
+ init_header = [@init_tag,
65
+ @a_rwnd,
66
+ @o_streams,
67
+ @i_streams,
68
+ @init_tsn].pack('NNnnN')
69
+
70
+ # Write Chunk header followed by the Init chunk header
71
+ io.write(chunk_header)
72
+ io.write(init_header)
73
+
74
+ # Write each parameter
75
+ @payload.each do |parameter|
76
+ parameter.write(io, ip)
77
+ end
78
+ end
79
+
80
+ def << parameter
81
+ @payload << parameter
82
+ end
83
+
84
+ def to_s
85
+ return "init(%d, %d, %d, %d, %d, %d, %s)" % [@size,
86
+ @init_tag,
87
+ @a_rwnd,
88
+ @o_streams,
89
+ @i_streams,
90
+ @init_tsn,
91
+ @payload.join(", ")]
92
+ end
93
+ end # class Init
94
+
95
+ end # class Chunk
96
+ end # class SCTP
97
+ end # class Pcap
98
+ end # module Mu
99
+
100
+ require 'mu/pcap/sctp/parameter'
@@ -1,68 +1,68 @@
1
- # http://www.mudynamics.com
2
- # http://labs.mudynamics.com
3
- # http://www.pcapr.net
4
-
5
- module Mu
6
- class Pcap
7
- class SCTP
8
- class Chunk
9
-
10
- class InitAck < Init
11
- def initialize
12
- super
13
-
14
- @type = CHUNK_INIT_ACK
15
- end
16
-
17
- def self.from_bytes flags, size, bytes
18
- # Basic validation
19
- Pcap.assert(bytes.length >= 16,
20
- "Truncated init_ack chunk header: 16 > #{bytes.length}")
21
-
22
- # Read init_ack chunk header
23
- init_tag, a_rwnd, o_streams, i_streams, init_tsn = bytes.unpack('NNnnN')
24
-
25
- # Create init chunk
26
- init_ack = InitAck.new
27
- init_ack.flags = flags
28
- init_ack.size = size
29
- init_ack.init_tag = init_tag
30
- init_ack.a_rwnd = a_rwnd
31
- init_ack.o_streams = o_streams
32
- init_ack.i_streams = i_streams
33
- init_ack.init_tsn = init_tsn
34
-
35
- # Initialize the counter
36
- length = 16
37
-
38
- # Collect the chunks
39
- while length < bytes.length
40
- # Parse new parameter from the bytes
41
- parameter = Parameter.from_bytes(bytes[length..-1])
42
-
43
- # Get parameter size with padding
44
- length += parameter.padded_size
45
-
46
- # Add chunk to the list
47
- init_ack << parameter
48
- end
49
-
50
- # Return the result
51
- return init_ack
52
- end
53
-
54
- def to_s
55
- return "init_ack(%d, %d, %d, %d, %d, %d, %s)" % [@size,
56
- @init_tag,
57
- @a_rwnd,
58
- @o_streams,
59
- @i_streams,
60
- @init_tsn,
61
- @payload.join(", ")]
62
- end
63
- end # class InitAck
64
-
65
- end # class Chunk
66
- end # class SCTP
67
- end # class Pcap
68
- end # module Mu
1
+ # http://www.mudynamics.com
2
+ # http://labs.mudynamics.com
3
+ # http://www.pcapr.net
4
+
5
+ module Mu
6
+ class Pcap
7
+ class SCTP
8
+ class Chunk
9
+
10
+ class InitAck < Init
11
+ def initialize
12
+ super
13
+
14
+ @type = CHUNK_INIT_ACK
15
+ end
16
+
17
+ def self.from_bytes flags, size, bytes
18
+ # Basic validation
19
+ Pcap.assert(bytes.length >= 16,
20
+ "Truncated init_ack chunk header: 16 > #{bytes.length}")
21
+
22
+ # Read init_ack chunk header
23
+ init_tag, a_rwnd, o_streams, i_streams, init_tsn = bytes.unpack('NNnnN')
24
+
25
+ # Create init chunk
26
+ init_ack = InitAck.new
27
+ init_ack.flags = flags
28
+ init_ack.size = size
29
+ init_ack.init_tag = init_tag
30
+ init_ack.a_rwnd = a_rwnd
31
+ init_ack.o_streams = o_streams
32
+ init_ack.i_streams = i_streams
33
+ init_ack.init_tsn = init_tsn
34
+
35
+ # Initialize the counter
36
+ length = 16
37
+
38
+ # Collect the chunks
39
+ while length < bytes.length
40
+ # Parse new parameter from the bytes
41
+ parameter = Parameter.from_bytes(bytes[length..-1])
42
+
43
+ # Get parameter size with padding
44
+ length += parameter.padded_size
45
+
46
+ # Add chunk to the list
47
+ init_ack << parameter
48
+ end
49
+
50
+ # Return the result
51
+ return init_ack
52
+ end
53
+
54
+ def to_s
55
+ return "init_ack(%d, %d, %d, %d, %d, %d, %s)" % [@size,
56
+ @init_tag,
57
+ @a_rwnd,
58
+ @o_streams,
59
+ @i_streams,
60
+ @init_tsn,
61
+ @payload.join(", ")]
62
+ end
63
+ end # class InitAck
64
+
65
+ end # class Chunk
66
+ end # class SCTP
67
+ end # class Pcap
68
+ end # module Mu
@@ -1,110 +1,110 @@
1
- # http://www.mudynamics.com
2
- # http://labs.mudynamics.com
3
- # http://www.pcapr.net
4
-
5
- module Mu
6
- class Pcap
7
- class SCTP
8
-
9
- class Parameter < Packet
10
- attr_accessor :type, :size
11
-
12
- def initialize
13
- super
14
-
15
- @type = 0
16
- @size = 0
17
- end
18
-
19
- def self.from_bytes bytes
20
- # Basic validation
21
- Pcap.assert(bytes.length >= 4,
22
- "Truncated parameter header: 4 > #{bytes.length}")
23
-
24
- # Read chunk header
25
- type, size = bytes.unpack('nn')
26
-
27
- # Validate chunk size
28
- Pcap.assert(bytes.length >= size,
29
- "Truncated parameter: #{size} set, #{bytes.length} available")
30
-
31
- # Create chunk based on type
32
- case type
33
- when PARAM_IPV4
34
- parameter = IpAddress.from_bytes(type, size, bytes[4..-1])
35
- when PARAM_IPV6
36
- parameter = IpAddress.from_bytes(type, size, bytes[4..-1])
37
- when PARAM_STATE_COOKIE
38
- parameter = dummy_parameter(type, size, bytes)
39
- when PARAM_COOKIE_PRESERVATIVE
40
- parameter = dummy_parameter(type, size, bytes)
41
- when PARAM_HOST_NAME_ADDR
42
- parameter = dummy_parameter(type, size, bytes)
43
- when PARAM_SUPPORTED_ADDR_TYPES
44
- parameter = dummy_parameter(type, size, bytes)
45
- when PARAM_ECN
46
- parameter = dummy_parameter(type, size, bytes)
47
- when PARAM_RANDOM
48
- parameter = dummy_parameter(type, size, bytes)
49
- when PARAM_CHUNK_LIST
50
- parameter = dummy_parameter(type, size, bytes)
51
- when PARAM_HMAC_ALGORITHM
52
- parameter = dummy_parameter(type, size, bytes)
53
- when PARAM_PADDING
54
- parameter = dummy_parameter(type, size, bytes)
55
- when PARAM_SUPPORTED_EXTENSIONS
56
- parameter = dummy_parameter(type, size, bytes)
57
- when PARAM_FORWARD_TSN
58
- parameter = dummy_parameter(type, size, bytes)
59
- when PARAM_SET_PRIMARY_ADDR
60
- parameter = dummy_parameter(type, size, bytes)
61
- when PARAM_ADAPTATION_LAYER_INDICATION
62
- parameter = dummy_parameter(type, size, bytes)
63
- else
64
- parameter = dummy_parameter(type, size, bytes)
65
- end
66
-
67
- # Return the result
68
- return parameter
69
- end
70
-
71
- def write io, ip
72
- header = [@type, @size].pack('nn')
73
-
74
- # Write Parameter header followed by the payload
75
- io.write(header)
76
- io.write(@payload_raw)
77
- end
78
-
79
- def padded_size
80
- if 0 == @size % 4
81
- return @size
82
- else
83
- return (@size + 4 - (@size % 4))
84
- end
85
- end
86
-
87
- def to_s
88
- return "parameter(%d, %d)" % [@type, @size]
89
- end
90
-
91
- def self.dummy_parameter type, size, bytes
92
- # Create new dummy parameter
93
- parameter = Parameter.new
94
- parameter.type = type
95
- parameter.size = size
96
-
97
- # Save the payload
98
- parameter.payload = bytes[4..parameter.padded_size - 1]
99
- parameter.payload_raw = parameter.payload
100
-
101
- # Return the result
102
- return parameter
103
- end
104
- end # class Parameter
105
-
106
- end # class SCTP
107
- end # class Pcap
108
- end # module Mu
109
-
110
- require 'mu/pcap/sctp/parameter/ip_address'
1
+ # http://www.mudynamics.com
2
+ # http://labs.mudynamics.com
3
+ # http://www.pcapr.net
4
+
5
+ module Mu
6
+ class Pcap
7
+ class SCTP
8
+
9
+ class Parameter < Packet
10
+ attr_accessor :type, :size
11
+
12
+ def initialize
13
+ super
14
+
15
+ @type = 0
16
+ @size = 0
17
+ end
18
+
19
+ def self.from_bytes bytes
20
+ # Basic validation
21
+ Pcap.assert(bytes.length >= 4,
22
+ "Truncated parameter header: 4 > #{bytes.length}")
23
+
24
+ # Read chunk header
25
+ type, size = bytes.unpack('nn')
26
+
27
+ # Validate chunk size
28
+ Pcap.assert(bytes.length >= size,
29
+ "Truncated parameter: #{size} set, #{bytes.length} available")
30
+
31
+ # Create chunk based on type
32
+ case type
33
+ when PARAM_IPV4
34
+ parameter = IpAddress.from_bytes(type, size, bytes[4..-1])
35
+ when PARAM_IPV6
36
+ parameter = IpAddress.from_bytes(type, size, bytes[4..-1])
37
+ when PARAM_STATE_COOKIE
38
+ parameter = dummy_parameter(type, size, bytes)
39
+ when PARAM_COOKIE_PRESERVATIVE
40
+ parameter = dummy_parameter(type, size, bytes)
41
+ when PARAM_HOST_NAME_ADDR
42
+ parameter = dummy_parameter(type, size, bytes)
43
+ when PARAM_SUPPORTED_ADDR_TYPES
44
+ parameter = dummy_parameter(type, size, bytes)
45
+ when PARAM_ECN
46
+ parameter = dummy_parameter(type, size, bytes)
47
+ when PARAM_RANDOM
48
+ parameter = dummy_parameter(type, size, bytes)
49
+ when PARAM_CHUNK_LIST
50
+ parameter = dummy_parameter(type, size, bytes)
51
+ when PARAM_HMAC_ALGORITHM
52
+ parameter = dummy_parameter(type, size, bytes)
53
+ when PARAM_PADDING
54
+ parameter = dummy_parameter(type, size, bytes)
55
+ when PARAM_SUPPORTED_EXTENSIONS
56
+ parameter = dummy_parameter(type, size, bytes)
57
+ when PARAM_FORWARD_TSN
58
+ parameter = dummy_parameter(type, size, bytes)
59
+ when PARAM_SET_PRIMARY_ADDR
60
+ parameter = dummy_parameter(type, size, bytes)
61
+ when PARAM_ADAPTATION_LAYER_INDICATION
62
+ parameter = dummy_parameter(type, size, bytes)
63
+ else
64
+ parameter = dummy_parameter(type, size, bytes)
65
+ end
66
+
67
+ # Return the result
68
+ return parameter
69
+ end
70
+
71
+ def write io, ip
72
+ header = [@type, @size].pack('nn')
73
+
74
+ # Write Parameter header followed by the payload
75
+ io.write(header)
76
+ io.write(@payload_raw)
77
+ end
78
+
79
+ def padded_size
80
+ if 0 == @size % 4
81
+ return @size
82
+ else
83
+ return (@size + 4 - (@size % 4))
84
+ end
85
+ end
86
+
87
+ def to_s
88
+ return "parameter(%d, %d)" % [@type, @size]
89
+ end
90
+
91
+ def self.dummy_parameter type, size, bytes
92
+ # Create new dummy parameter
93
+ parameter = Parameter.new
94
+ parameter.type = type
95
+ parameter.size = size
96
+
97
+ # Save the payload
98
+ parameter.payload = bytes[4..parameter.padded_size - 1]
99
+ parameter.payload_raw = parameter.payload
100
+
101
+ # Return the result
102
+ return parameter
103
+ end
104
+ end # class Parameter
105
+
106
+ end # class SCTP
107
+ end # class Pcap
108
+ end # module Mu
109
+
110
+ require 'mu/pcap/sctp/parameter/ip_address'