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

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: Test.cs,v 1.2 2005/04/20 08:58:56 okajima Exp $
  7. */
  8. using System;
  9. using System.IO;
  10. using System.Text;
  11. using System.Threading;
  12. using System.Diagnostics;
  13. using System.Net;
  14. using System.Net.Sockets;
  15. using System.Globalization;
  16. using Granados.Crypto;
  17. using Granados.SSHC;
  18. using Granados.SSHCV1;
  19. using Granados.SSHCV2;
  20. using Granados.Toolkit;
  21. using Granados.PKI;
  22. namespace Granados.SSHCTest
  23. {
  24. class Reader : ISSHConnectionEventReceiver, ISSHChannelEventReceiver {
  25. public SSHConnection _conn;
  26. public bool _ready;
  27. public void OnData(byte[] data, int offset, int length) {
  28. System.Console.Write(Encoding.ASCII.GetString(data, offset, length));
  29. }
  30. public void OnDebugMessage(bool always_display, byte[] data) {
  31. Debug.WriteLine("DEBUG: "+ Encoding.ASCII.GetString(data));
  32. }
  33. public void OnIgnoreMessage(byte[] data) {
  34. Debug.WriteLine("Ignore: "+ Encoding.ASCII.GetString(data));
  35. }
  36. public void OnAuthenticationPrompt(string[] msg) {
  37. Debug.WriteLine("Auth Prompt "+msg[0]);
  38. }
  39. public void OnError(Exception error, string msg) {
  40. Debug.WriteLine("ERROR: "+ msg);
  41. }
  42. public void OnChannelClosed() {
  43. Debug.WriteLine("Channel closed");
  44. _conn.Disconnect("");
  45. //_conn.AsyncReceive(this);
  46. }
  47. public void OnChannelEOF() {
  48. _pf.Close();
  49. Debug.WriteLine("Channel EOF");
  50. }
  51. public void OnExtendedData(int type, byte[] data) {
  52. Debug.WriteLine("EXTENDED DATA");
  53. }
  54. public void OnConnectionClosed() {
  55. Debug.WriteLine("Connection closed");
  56. }
  57. public void OnUnknownMessage(byte type, byte[] data) {
  58. Debug.WriteLine("Unknown Message " + type);
  59. }
  60. public void OnChannelReady() {
  61. _ready = true;
  62. }
  63. public void OnChannelError(Exception error, string msg) {
  64. Debug.WriteLine("Channel ERROR: "+ msg);
  65. }
  66. public void OnMiscPacket(byte type, byte[] data, int offset, int length) {
  67. }
  68. public PortForwardingCheckResult CheckPortForwardingRequest(string host, int port, string originator_host, int originator_port) {
  69. PortForwardingCheckResult r = new PortForwardingCheckResult();
  70. r.allowed = true;
  71. r.channel = this;
  72. return r;
  73. }
  74. public void EstablishPortforwarding(ISSHChannelEventReceiver rec, SSHChannel channel) {
  75. _pf = channel;
  76. }
  77. public SSHChannel _pf;
  78. }
  79. class Test
  80. {
  81. private static SSHConnection _conn;
  82. [STAThread]
  83. static void Main(string[] args)
  84. {
  85. /*
  86. string cn = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
  87. string t1 = Granados.SSHC.Strings.GetString("NotSSHServer");
  88. System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ja");
  89. Granados.SSHC.Strings.Reload();
  90. string t2 = Granados.SSHC.Strings.GetString("NotSSHServer");
  91. */
  92. #if false //RSA keygen
  93. //RSA KEY GENERATION TEST
  94. byte[] testdata = Encoding.ASCII.GetBytes("CHRISTIAN VIERI");
  95. RSAKeyPair kp = RSAKeyPair.GenerateNew(2048, new Random());
  96. byte[] sig = kp.Sign(testdata);
  97. kp.Verify(sig, testdata);
  98. new SSH2UserAuthKey(kp).WritePublicPartInOpenSSHStyle(new FileStream("C:\IOPort\newrsakey", FileMode.Create));
  99. //SSH2UserAuthKey newpk = SSH2PrivateKey.FromSECSHStyleFile("C:\IOPort\newrsakey", "nedved");
  100. #endif
  101. #if false //DSA keygen
  102. //DSA KEY GENERATION TEST
  103. byte[] testdata = Encoding.ASCII.GetBytes("CHRISTIAN VIERI 0000");
  104. DSAKeyPair kp = DSAKeyPair.GenerateNew(2048, new Random());
  105. byte[] sig = kp.Sign(testdata);
  106. kp.Verify(sig, testdata);
  107. new SSH2UserAuthKey(kp).WritePublicPartInOpenSSHStyle(new FileStream("C:\IOPort\newdsakey", FileMode.Create));
  108. //SSH2PrivateKey newpk = SSH2PrivateKey.FromSECSHStyleFile("C:\IOPort\newdsakey", "nedved");
  109. #endif
  110. SSHConnectionParameter f = new SSHConnectionParameter();
  111. f.UserName = "root";
  112. #if false //SSH1
  113. //SSH1
  114. f.Password = "";
  115. f.Protocol = SSHProtocol.SSH2;
  116. f.AuthenticationType = AuthenticationType.Password;
  117. f.PreferableCipherAlgorithms = new CipherAlgorithm[] { CipherAlgorithm.Blowfish, CipherAlgorithm.TripleDES };
  118. #else //SSH2
  119. f.Password = "";
  120. f.Protocol = SSHProtocol.SSH2;
  121. f.AuthenticationType = AuthenticationType.Password;
  122. f.WindowSize = 0x1000;
  123. #endif
  124. Reader reader = new Reader();
  125. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  126. //s.Blocking = false;
  127. s.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.1"), 22));
  128. _conn = SSHConnection.Connect(f, reader, s);
  129. reader._conn = _conn;
  130. #if false //Remote->Local
  131. _conn.ListenForwardedPort("0.0.0.0", 29472);
  132. #elif false //Local->Remote
  133. SSHChannel ch = _conn.ForwardPort(reader, "www.yahoo.co.jp", 80, "localhost", 0);
  134. reader._pf = ch;
  135. while(!reader._ready) System.Threading.Thread.Sleep(100);
  136. reader._pf.Transmit(Encoding.ASCII.GetBytes("GET / HTTP/1.0rnrn"));
  137. #elif false //SSH over SSH
  138. f.Password = "okajima";
  139. SSHConnection con2 = _conn.OpenPortForwardedAnotherConnection(f, reader, "kuromatsu", 22);
  140. reader._conn = con2;
  141. SSHChannel ch = con2.OpenShell(reader);
  142. reader._pf = ch;
  143. #else //normal shell
  144. SSHChannel ch = _conn.OpenShell(reader);
  145. reader._pf = ch;
  146. #endif
  147. //Debug.WriteLine(_conn.ConnectionInfo.DumpHostKeyInKnownHostsStyle());
  148. SSHConnectionInfo ci = _conn.ConnectionInfo;
  149. Thread.Sleep(1000);
  150. //((SSH2Connection)_conn).ReexchangeKeys();
  151. byte[] b = new byte[1];
  152. while(true) {
  153. int input = System.Console.Read();
  154. b[0] = (byte)input;
  155. //Debug.WriteLine(input);
  156. reader._pf.Transmit(b);
  157. }
  158. }
  159. }
  160. }