hrr_rb_ssh 0.1.0

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 (96) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +27 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +22 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE +201 -0
  8. data/README.md +47 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/demo/server.rb +134 -0
  13. data/hrr_rb_ssh.gemspec +27 -0
  14. data/lib/hrr_rb_ssh/authentication/authenticator.rb +16 -0
  15. data/lib/hrr_rb_ssh/authentication/method/none/context.rb +28 -0
  16. data/lib/hrr_rb_ssh/authentication/method/none.rb +38 -0
  17. data/lib/hrr_rb_ssh/authentication/method/password/context.rb +29 -0
  18. data/lib/hrr_rb_ssh/authentication/method/password.rb +37 -0
  19. data/lib/hrr_rb_ssh/authentication/method.rb +21 -0
  20. data/lib/hrr_rb_ssh/authentication.rb +107 -0
  21. data/lib/hrr_rb_ssh/closed_authentication_error.rb +7 -0
  22. data/lib/hrr_rb_ssh/closed_connection_error.rb +7 -0
  23. data/lib/hrr_rb_ssh/closed_transport_error.rb +7 -0
  24. data/lib/hrr_rb_ssh/compat.rb +65 -0
  25. data/lib/hrr_rb_ssh/connection/channel/proc_chain/chain_context.rb +22 -0
  26. data/lib/hrr_rb_ssh/connection/channel/proc_chain.rb +25 -0
  27. data/lib/hrr_rb_ssh/connection/channel/session/env/context.rb +43 -0
  28. data/lib/hrr_rb_ssh/connection/channel/session/env.rb +31 -0
  29. data/lib/hrr_rb_ssh/connection/channel/session/exec/context.rb +41 -0
  30. data/lib/hrr_rb_ssh/connection/channel/session/exec.rb +31 -0
  31. data/lib/hrr_rb_ssh/connection/channel/session/pty_req/context.rb +50 -0
  32. data/lib/hrr_rb_ssh/connection/channel/session/pty_req.rb +31 -0
  33. data/lib/hrr_rb_ssh/connection/channel/session/shell/context.rb +37 -0
  34. data/lib/hrr_rb_ssh/connection/channel/session/shell.rb +31 -0
  35. data/lib/hrr_rb_ssh/connection/channel/session/subsystem/context.rb +40 -0
  36. data/lib/hrr_rb_ssh/connection/channel/session/subsystem.rb +31 -0
  37. data/lib/hrr_rb_ssh/connection/channel/session.rb +31 -0
  38. data/lib/hrr_rb_ssh/connection/channel.rb +278 -0
  39. data/lib/hrr_rb_ssh/connection/request_handler.rb +18 -0
  40. data/lib/hrr_rb_ssh/connection.rb +170 -0
  41. data/lib/hrr_rb_ssh/logger.rb +52 -0
  42. data/lib/hrr_rb_ssh/message/001_ssh_msg_disconnect.rb +44 -0
  43. data/lib/hrr_rb_ssh/message/002_ssh_msg_ignore.rb +24 -0
  44. data/lib/hrr_rb_ssh/message/003_ssh_msg_unimplemented.rb +24 -0
  45. data/lib/hrr_rb_ssh/message/004_ssh_msg_debug.rb +26 -0
  46. data/lib/hrr_rb_ssh/message/005_ssh_msg_service_request.rb +24 -0
  47. data/lib/hrr_rb_ssh/message/006_ssh_msg_service_accept.rb +24 -0
  48. data/lib/hrr_rb_ssh/message/020_ssh_msg_kexinit.rb +51 -0
  49. data/lib/hrr_rb_ssh/message/021_ssh_msg_newkeys.rb +23 -0
  50. data/lib/hrr_rb_ssh/message/030_ssh_msg_kexdh_init.rb +24 -0
  51. data/lib/hrr_rb_ssh/message/031_ssh_msg_kexdh_reply.rb +26 -0
  52. data/lib/hrr_rb_ssh/message/050_ssh_msg_userauth_request.rb +58 -0
  53. data/lib/hrr_rb_ssh/message/051_ssh_msg_userauth_failure.rb +25 -0
  54. data/lib/hrr_rb_ssh/message/052_ssh_msg_userauth_success.rb +23 -0
  55. data/lib/hrr_rb_ssh/message/060_ssh_msg_userauth_pk_ok.rb +25 -0
  56. data/lib/hrr_rb_ssh/message/080_ssh_msg_global_request.rb +47 -0
  57. data/lib/hrr_rb_ssh/message/081_ssh_msg_request_success.rb +36 -0
  58. data/lib/hrr_rb_ssh/message/082_ssh_msg_request_failure.rb +23 -0
  59. data/lib/hrr_rb_ssh/message/090_ssh_msg_channel_open.rb +67 -0
  60. data/lib/hrr_rb_ssh/message/091_ssh_msg_channel_open_confirmation.rb +67 -0
  61. data/lib/hrr_rb_ssh/message/092_ssh_msg_channel_open_failure.rb +34 -0
  62. data/lib/hrr_rb_ssh/message/093_ssh_msg_channel_window_adjust.rb +25 -0
  63. data/lib/hrr_rb_ssh/message/094_ssh_msg_channel_data.rb +25 -0
  64. data/lib/hrr_rb_ssh/message/095_ssh_msg_channel_extended_data.rb +30 -0
  65. data/lib/hrr_rb_ssh/message/096_ssh_msg_channel_eof.rb +24 -0
  66. data/lib/hrr_rb_ssh/message/097_ssh_msg_channel_close.rb +24 -0
  67. data/lib/hrr_rb_ssh/message/098_ssh_msg_channel_request.rb +139 -0
  68. data/lib/hrr_rb_ssh/message/099_ssh_msg_channel_success.rb +24 -0
  69. data/lib/hrr_rb_ssh/message/100_ssh_msg_channel_failure.rb +24 -0
  70. data/lib/hrr_rb_ssh/message/codable.rb +67 -0
  71. data/lib/hrr_rb_ssh/message.rb +36 -0
  72. data/lib/hrr_rb_ssh/transport/compression_algorithm/none.rb +33 -0
  73. data/lib/hrr_rb_ssh/transport/compression_algorithm/zlib.rb +38 -0
  74. data/lib/hrr_rb_ssh/transport/compression_algorithm.rb +22 -0
  75. data/lib/hrr_rb_ssh/transport/constant.rb +11 -0
  76. data/lib/hrr_rb_ssh/transport/data_type.rb +163 -0
  77. data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes_128_cbc.rb +73 -0
  78. data/lib/hrr_rb_ssh/transport/encryption_algorithm/none.rb +49 -0
  79. data/lib/hrr_rb_ssh/transport/encryption_algorithm.rb +22 -0
  80. data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman.rb +129 -0
  81. data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group14_sha1.rb +42 -0
  82. data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group1_sha1.rb +34 -0
  83. data/lib/hrr_rb_ssh/transport/kex_algorithm.rb +22 -0
  84. data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_sha1.rb +45 -0
  85. data/lib/hrr_rb_ssh/transport/mac_algorithm/none.rb +40 -0
  86. data/lib/hrr_rb_ssh/transport/mac_algorithm.rb +22 -0
  87. data/lib/hrr_rb_ssh/transport/mode.rb +11 -0
  88. data/lib/hrr_rb_ssh/transport/receiver.rb +75 -0
  89. data/lib/hrr_rb_ssh/transport/sender.rb +57 -0
  90. data/lib/hrr_rb_ssh/transport/sequence_number.rb +22 -0
  91. data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb +108 -0
  92. data/lib/hrr_rb_ssh/transport/server_host_key_algorithm.rb +21 -0
  93. data/lib/hrr_rb_ssh/transport.rb +459 -0
  94. data/lib/hrr_rb_ssh/version.rb +6 -0
  95. data/lib/hrr_rb_ssh.rb +13 -0
  96. metadata +193 -0
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_DEBUG
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 4
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_DEBUG'],
20
+ ['boolean', 'always_display'],
21
+ ['string', 'message'],
22
+ ['string', 'language tag'],
23
+ ]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_SERVICE_REQUEST
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 5
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_SERVICE_REQUEST'],
20
+ ['string', 'service name'],
21
+ ]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_SERVICE_ACCEPT
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 6
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_SERVICE_ACCEPT'],
20
+ ['string', 'service name'],
21
+ ]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,51 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_KEXINIT
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 20
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_KEXINIT'],
20
+ ['byte', 'cookie (random byte)'],
21
+ ['byte', 'cookie (random byte)'],
22
+ ['byte', 'cookie (random byte)'],
23
+ ['byte', 'cookie (random byte)'],
24
+ ['byte', 'cookie (random byte)'],
25
+ ['byte', 'cookie (random byte)'],
26
+ ['byte', 'cookie (random byte)'],
27
+ ['byte', 'cookie (random byte)'],
28
+ ['byte', 'cookie (random byte)'],
29
+ ['byte', 'cookie (random byte)'],
30
+ ['byte', 'cookie (random byte)'],
31
+ ['byte', 'cookie (random byte)'],
32
+ ['byte', 'cookie (random byte)'],
33
+ ['byte', 'cookie (random byte)'],
34
+ ['byte', 'cookie (random byte)'],
35
+ ['byte', 'cookie (random byte)'],
36
+ ['name-list', 'kex_algorithms'],
37
+ ['name-list', 'server_host_key_algorithms'],
38
+ ['name-list', 'encryption_algorithms_client_to_server'],
39
+ ['name-list', 'encryption_algorithms_server_to_client'],
40
+ ['name-list', 'mac_algorithms_client_to_server'],
41
+ ['name-list', 'mac_algorithms_server_to_client'],
42
+ ['name-list', 'compression_algorithms_client_to_server'],
43
+ ['name-list', 'compression_algorithms_server_to_client'],
44
+ ['name-list', 'languages_client_to_server'],
45
+ ['name-list', 'languages_server_to_client'],
46
+ ['boolean', 'first_kex_packet_follows'],
47
+ ['uint32', '0 (reserved for future extension)'],
48
+ ]
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_NEWKEYS
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 21
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_NEWKEYS'],
20
+ ]
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_KEXDH_INIT
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 30
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_KEXDH_INIT'],
20
+ ['mpint', 'e'],
21
+ ]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_KEXDH_REPLY
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 31
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_KEXDH_REPLY'],
20
+ ['string', 'server public host key and certificates (K_S)'],
21
+ ['mpint', 'f'],
22
+ ['string', 'signature of H'],
23
+ ]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,58 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_USERAUTH_REQUEST
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 50
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_USERAUTH_REQUEST'],
20
+ ['string', 'user name'],
21
+ ['string', 'service name'],
22
+ ['string', 'method name'],
23
+ ]
24
+
25
+ PUBLICKEY_DEFINITION = [
26
+ # [Data Type, Field Name]
27
+ # ['string', 'method name' : "publickey"],
28
+ ['boolean', 'with signature'],
29
+ ['string', 'public key algorithm name'],
30
+ ['string', 'public key blob'],
31
+ ]
32
+
33
+ PUBLICKEY_SIGNATURE_DEFINITION = [
34
+ # [Data Type, Field Name]
35
+ # ['string', 'with signature' : "TRUE"],
36
+ ['string', 'signature'],
37
+ ]
38
+
39
+ PASSWORD_DEFINITION = [
40
+ # [Data Type, Field Name]
41
+ # ['string', 'method name' : "password"],
42
+ ['boolean', 'FALSE'],
43
+ ['string', 'plaintext password'],
44
+ ]
45
+
46
+ CONDITIONAL_DEFINITION = {
47
+ # Field Name => {Field Value => Conditional Definition}
48
+ 'method name' => {
49
+ 'publickey' => PUBLICKEY_DEFINITION,
50
+ 'password' => PASSWORD_DEFINITION,
51
+ },
52
+ 'with signature' => {
53
+ true => PUBLICKEY_SIGNATURE_DEFINITION,
54
+ },
55
+ }
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_USERAUTH_FAILURE
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 51
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_USERAUTH_FAILURE'],
20
+ ['name-list', 'authentications that can continue'],
21
+ ['boolean', 'partial success'],
22
+ ]
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_USERAUTH_SUCCESS
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 52
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_USERAUTH_SUCCESS'],
20
+ ]
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_USERAUTH_PK_OK
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 60
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_USERAUTH_PK_OK'],
20
+ ['string', 'public key algorithm name from the request'],
21
+ ['string', 'public key blob from the request'],
22
+ ]
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,47 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_GLOBAL_REQUEST
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 80
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_GLOBAL_REQUEST'],
20
+ ['string', 'request name'],
21
+ ['boolean', 'want reply'],
22
+ ]
23
+
24
+ TCPIP_FORWARD_DEFINITION = [
25
+ # [Data Type, Field Name]
26
+ # ['string', 'request name' : "tcpip-forward"],
27
+ ['string', 'address to bind'],
28
+ ['uint32', 'port number to bind'],
29
+ ]
30
+
31
+ CANCEL_TCPIP_FORWARD_DEFINITION = [
32
+ # [Data Type, Field Name]
33
+ # ['string', 'request name' : "cancel-tcpip-forward"],
34
+ ['string', 'address to bind'],
35
+ ['uint32', 'port number to bind'],
36
+ ]
37
+
38
+ CONDITIONAL_DEFINITION = {
39
+ # Field Name => {Field Value => Conditional Definition}
40
+ 'request name' => {
41
+ 'tcpip-forward' => TCPIP_FORWARD_DEFINITION,
42
+ 'cancel-tcpip-forward' => CANCEL_TCPIP_FORWARD_DEFINITION,
43
+ },
44
+ }
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_REQUEST_SUCCESS
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 81
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_REQUEST_SUCCESS'],
20
+ ]
21
+
22
+ TCPIP_FORWARD_DEFINITION = [
23
+ # [Data Type, Field Name]
24
+ # ['string', 'request name' : "tcpip-forward"],
25
+ ['uint32', 'port that was bound on the server'],
26
+ ]
27
+
28
+ CONDITIONAL_DEFINITION = {
29
+ # Field Name => {Field Value => Conditional Definition}
30
+ 'request name' => {
31
+ 'tcpip-forward' => TCPIP_FORWARD_DEFINITION,
32
+ }
33
+ }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_REQUEST_FAILURE
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 82
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_REQUEST_FAILURE'],
20
+ ]
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,67 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_CHANNEL_OPEN
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 90
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_CHANNEL_OPEN'],
20
+ ['string', 'channel type'],
21
+ ['uint32', 'sender channel'],
22
+ ['uint32', 'initial window size'],
23
+ ['uint32', 'maximum packet size'],
24
+ ]
25
+
26
+ SESSION_DEFINITION = [
27
+ # [Data Type, Field Name]
28
+ # ['string', 'channel type' : "session"],
29
+ ]
30
+
31
+ X11_DEFINITION = [
32
+ # [Data Type, Field Name]
33
+ # ['string', 'channel type' : "x11"],
34
+ ['string', 'originator address'],
35
+ ['uint32', 'originator port'],
36
+ ]
37
+
38
+ FORWARDED_TCPIP_DEFINITION = [
39
+ # [Data Type, Field Name]
40
+ # ['string', 'channel type' : "forwarded-tcpip"],
41
+ ['string', 'address that was connected'],
42
+ ['uint32', 'port that was connected'],
43
+ ['string', 'originator IP address'],
44
+ ['uint32', 'originator port'],
45
+ ]
46
+
47
+ DIRECT_TCPIP_DEFINITION = [
48
+ # [Data Type, Field Name]
49
+ # ['string', 'channel type' : "direct-tcpip"],
50
+ ['string', 'host to connect'],
51
+ ['uint32', 'port to connect'],
52
+ ['string', 'originator IP address'],
53
+ ['uint32', 'originator port'],
54
+ ]
55
+
56
+ CONDITIONAL_DEFINITION = {
57
+ # Field Name => {Field Value => Conditional Definition}
58
+ 'channel type' => {
59
+ 'session' => SESSION_DEFINITION,
60
+ 'x11' => X11_DEFINITION,
61
+ 'forwarded-tcpip' => FORWARDED_TCPIP_DEFINITION,
62
+ 'direct-tcpip' => DIRECT_TCPIP_DEFINITION,
63
+ },
64
+ }
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,67 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_CHANNEL_OPEN_CONFIRMATION
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 91
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_CHANNEL_OPEN_CONFIRMATION'],
20
+ ['uint32', 'recipient channel'],
21
+ ['uint32', 'sender channel'],
22
+ ['uint32', 'initial window size'],
23
+ ['uint32', 'maximum packet size'],
24
+ ]
25
+
26
+ SESSION_DEFINITION = [
27
+ # [Data Type, Field Name]
28
+ # ['string', 'channel type' : "session"],
29
+ ]
30
+
31
+ X11_DEFINITION = [
32
+ # [Data Type, Field Name]
33
+ # ['string', 'channel type' : "x11"],
34
+ ['string', 'originator address'],
35
+ ['uint32', 'originator port'],
36
+ ]
37
+
38
+ FORWARDED_TCPIP_DEFINITION = [
39
+ # [Data Type, Field Name]
40
+ # ['string', 'channel type' : "forwarded-tcpip"],
41
+ ['string', 'address that was connected'],
42
+ ['uint32', 'port that was connected'],
43
+ ['string', 'originator IP address'],
44
+ ['uint32', 'originator port'],
45
+ ]
46
+
47
+ DIRECT_TCPIP_DEFINITION = [
48
+ # [Data Type, Field Name]
49
+ # ['string', 'channel type' : "direct-tcpip"],
50
+ ['string', 'host to connect'],
51
+ ['uint32', 'port to connect'],
52
+ ['string', 'originator IP address'],
53
+ ['uint32', 'originator port'],
54
+ ]
55
+
56
+ CONDITIONAL_DEFINITION = {
57
+ # Field Name => {Field Value => Conditional Definition}
58
+ 'channel type' => {
59
+ 'session' => SESSION_DEFINITION,
60
+ 'x11' => X11_DEFINITION,
61
+ 'forwarded-tcpip' => FORWARDED_TCPIP_DEFINITION,
62
+ 'direct-tcpip' => DIRECT_TCPIP_DEFINITION,
63
+ },
64
+ }
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_CHANNEL_OPEN_FAILURE
10
+ module ReasonCode
11
+ SSH_OPEN_ADMINISTRATIVELY_PROHIBITED = 1
12
+ SSH_OPEN_CONNECT_FAILED = 2
13
+ SSH_OPEN_UNKNOWN_CHANNEL_TYPE = 3
14
+ SSH_OPEN_RESOURCE_SHORTAGE = 4
15
+ end
16
+
17
+ class << self
18
+ include Codable
19
+ end
20
+
21
+ ID = self.name.split('::').last
22
+ VALUE = 92
23
+
24
+ DEFINITION = [
25
+ # [Data Type, Field Name]
26
+ ['byte', 'SSH_MSG_CHANNEL_OPEN_FAILURE'],
27
+ ['uint32', 'recipient channel'],
28
+ ['uint32', 'reason code'],
29
+ ['string', 'description'],
30
+ ['string', 'language tag'],
31
+ ]
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_CHANNEL_WINDOW_ADJUST
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 93
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_CHANNEL_WINDOW_ADJUST'],
20
+ ['uint32', 'recipient channel'],
21
+ ['uint32', 'bytes to add'],
22
+ ]
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ # vim: et ts=2 sw=2
3
+
4
+ require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/message/codable'
6
+
7
+ module HrrRbSsh
8
+ module Message
9
+ module SSH_MSG_CHANNEL_DATA
10
+ class << self
11
+ include Codable
12
+ end
13
+
14
+ ID = self.name.split('::').last
15
+ VALUE = 94
16
+
17
+ DEFINITION = [
18
+ # [Data Type, Field Name]
19
+ ['byte', 'SSH_MSG_CHANNEL_DATA'],
20
+ ['uint32', 'recipient channel'],
21
+ ['string', 'data'],
22
+ ]
23
+ end
24
+ end
25
+ end