ConnectionInfo.cs
上传用户:szltgg
上传日期:2019-05-16
资源大小:604k
文件大小:4k
源码类别:

Telnet服务器

开发平台:

C#

  1. /*
  2.  Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3.  This file is a part of the Granados SSH Client Library that is subject to
  4.  the license included in the distributed package.
  5.  You may not use this file except in compliance with the license.
  6.  $Id: ConnectionInfo.cs,v 1.2 2005/04/20 08:58:56 okajima Exp $
  7. */
  8. using System;
  9. using System.Text;
  10. using Granados.PKI;
  11. using Granados.Toolkit;
  12. namespace Granados.SSHC {
  13. /// <summary>
  14. /// ConnectionInfo describes the attributes of the host or the connection.
  15. /// It is available after the connection is established without any errors.
  16. /// </summary>
  17. public abstract class SSHConnectionInfo {
  18. internal string _serverVersionString;
  19. internal string _clientVersionString;
  20. internal string _supportedCipherAlgorithms;
  21. internal PublicKey _hostkey;
  22. internal CipherAlgorithm _algorithmForTransmittion;
  23. internal CipherAlgorithm _algorithmForReception;
  24. public string ServerVersionString {
  25. get {
  26. return _serverVersionString;
  27. }
  28. }
  29. public string ClientVerisonString {
  30. get {
  31. return _clientVersionString;
  32. }
  33. }
  34. public string SupportedCipherAlgorithms {
  35. get {
  36. return _supportedCipherAlgorithms;
  37. }
  38. }
  39. public CipherAlgorithm AlgorithmForTransmittion {
  40. get {
  41. return _algorithmForTransmittion;
  42. }
  43. }
  44. public CipherAlgorithm AlgorithmForReception {
  45. get {
  46. return _algorithmForReception;
  47. }
  48. }
  49. public PublicKey HostKey {
  50. get {
  51. return _hostkey;
  52. }
  53. }
  54. public abstract string DumpHostKeyInKnownHostsStyle();
  55. }
  56. }
  57. namespace Granados.SSHCV1 {
  58. using Granados.SSHC;
  59. public class SSH1ConnectionInfo : SSHConnectionInfo {
  60. internal SSHServerInfo _serverinfo;
  61. public override string DumpHostKeyInKnownHostsStyle() {
  62. StringBuilder bld = new StringBuilder();
  63. bld.Append("ssh1 ");
  64. SSH1DataWriter wr = new SSH1DataWriter();
  65. //RSA only for SSH1
  66. RSAPublicKey rsa = (RSAPublicKey)_hostkey;
  67. wr.Write(rsa.Exponent);
  68. wr.Write(rsa.Modulus);
  69. bld.Append(Encoding.ASCII.GetString(Base64.Encode(wr.ToByteArray())));
  70. return bld.ToString();
  71. }
  72. public void SetSupportedCipherAlgorithms(int mask) {
  73. StringBuilder bld = new StringBuilder();
  74. if((mask &  2)!=0) AppendSupportedCipher(bld, "Idea");
  75. if((mask &  4)!=0) AppendSupportedCipher(bld, "DES");
  76. if((mask &  8)!=0) AppendSupportedCipher(bld, "TripleDES");
  77. if((mask & 16)!=0) AppendSupportedCipher(bld, "TSS");
  78. if((mask & 32)!=0) AppendSupportedCipher(bld, "RC4");
  79. if((mask & 64)!=0) AppendSupportedCipher(bld, "Blowfish");
  80. _supportedCipherAlgorithms = bld.ToString();
  81. }
  82. private static void AppendSupportedCipher(StringBuilder bld, string text) {
  83. if(bld.Length>0) bld.Append(',');
  84. bld.Append(text);
  85. }
  86. }
  87. }
  88. namespace Granados.SSHCV2 {
  89. using Granados.SSHC;
  90. using Granados.PKI;
  91. public class SSH2ConnectionInfo : SSHConnectionInfo {
  92. internal string _supportedHostKeyAlgorithms;
  93. internal PublicKeyAlgorithm _algorithmForHostKeyVerification;
  94. internal string _supportedKEXAlgorithms;
  95. public string SupportedHostKeyAlgorithms {
  96. get {
  97. return _supportedHostKeyAlgorithms;
  98. }
  99. }
  100. public PublicKeyAlgorithm AlgorithmForHostKeyVerification {
  101. get {
  102. return _algorithmForHostKeyVerification;
  103. }
  104. }
  105. public string SupportedKEXAlgorithms {
  106. get {
  107. return _supportedKEXAlgorithms;
  108. }
  109. }
  110. public override string DumpHostKeyInKnownHostsStyle() {
  111. StringBuilder bld = new StringBuilder();
  112. bld.Append(SSH2Util.PublicKeyAlgorithmName(_hostkey.Algorithm));
  113. bld.Append(' ');
  114. SSH2DataWriter wr = new SSH2DataWriter();
  115. wr.Write(SSH2Util.PublicKeyAlgorithmName(_hostkey.Algorithm));
  116. if(_hostkey.Algorithm==PublicKeyAlgorithm.RSA) {
  117. RSAPublicKey rsa = (RSAPublicKey)_hostkey;
  118. wr.Write(rsa.Exponent);
  119. wr.Write(rsa.Modulus);
  120. }
  121. else if(_hostkey.Algorithm==PublicKeyAlgorithm.DSA) {
  122. DSAPublicKey dsa = (DSAPublicKey)_hostkey;
  123. wr.Write(dsa.P);
  124. wr.Write(dsa.Q);
  125. wr.Write(dsa.G);
  126. wr.Write(dsa.Y);
  127. }
  128. else
  129. throw new SSHException("Host key algorithm is unsupported");
  130. bld.Append(Encoding.ASCII.GetString(Base64.Encode(wr.ToByteArray())));
  131. return bld.ToString();
  132. }
  133. }
  134. }