DIY-pcap 0.4.1 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
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'