亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ssh2connection.cs

?? Granados是一個基于.NET的SSH客戶端庫。同時支持SSH1和SSH2。實現了AES, Blowfish, TripleDES, RSA, DSA等加密驗證算法。實現TCP協議連接。
?? CS
?? 第 1 頁 / 共 3 頁
字號:
/* ---------------------------------------------------------------------------
 *
 * Copyright (c) Routrek Networks, Inc.    All Rights Reserved..
 * 
 * This file is a part of the Granados SSH Client Library that is subject to
 * the license included in the distributed package.
 * You may not use this file except in compliance with the license.
 * 
 * ---------------------------------------------------------------------------
 */
using System;
using System.Collections;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Net.Sockets;
using System.Text;
using System.Security.Cryptography;

using Routrek.PKI;
using Routrek.SSHC;
using Routrek.Toolkit;

namespace Routrek.SSHCV2
{
	public sealed class SSH2Connection : SSHConnection {
	
		//packet count for transmission and reception
		private int _tSequence;

		//MAC for transmission and reception
		private MAC _tMAC;
		private SSH2PacketBuilder _packetBuilder;

		//server info
		private SSH2ConnectionInfo _cInfo;

		private bool _waitingForPortForwardingResponse;

		private KeyExchanger _asyncKeyExchanger;

		public SSH2Connection(SSHConnectionParameter param, ISSHConnectionEventReceiver r, string serverversion, string clientversion) : base(param, r) {
			_cInfo = new SSH2ConnectionInfo();
			_cInfo._serverVersionString = serverversion;
			_cInfo._clientVersionString = clientversion;
			
			_packetBuilder = new SSH2PacketBuilder(new SynchronizedSSH2PacketHandler());
		}
		internal override IByteArrayHandler PacketBuilder {
			get {
				return _packetBuilder;
			}
		}
		public override SSHConnectionInfo ConnectionInfo {
			get {
				return _cInfo;
			}
		}

		internal override AuthenticationResult Connect(AbstractSocket s) {
			_stream = s;
			
			KeyExchanger kex = new KeyExchanger(this, null);
			if(!kex.SynchronousKexExchange()) {
				_stream.Close();
				return AuthenticationResult.Failure;
			}
			//Step3 user authentication
			ServiceRequest("ssh-userauth");
			_authenticationResult = UserAuth();
			return _authenticationResult;
		}


		private void ServiceRequest(string servicename) {
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_SERVICE_REQUEST);
			wr.Write(servicename);
			TransmitPacket(wr.ToByteArray());

			byte[] response = ReceivePacket().Data;
			SSH2DataReader re = new SSH2DataReader(response);
			PacketType t = re.ReadPacketType();
			if(t!=PacketType.SSH_MSG_SERVICE_ACCEPT) {
				throw new SSHException("service establishment failed "+t);
			}

			string s = Encoding.ASCII.GetString(re.ReadString());
			if(servicename!=s)
				throw new SSHException("protocol error");
		}

		private AuthenticationResult UserAuth() {
			string sn = "ssh-connection"; 

			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_USERAUTH_REQUEST);
			wr.Write(_param.UserName);
			if(_param.AuthenticationType==AuthenticationType.Password) {
				//Password authentication
				wr.Write(sn); 
				wr.Write("password");
				wr.Write(false);
				wr.Write(_param.Password);
			}
			else if(_param.AuthenticationType==AuthenticationType.KeyboardInteractive) {
				wr.Write(sn); 
				wr.Write("keyboard-interactive");
				wr.Write(""); //lang
				wr.Write(""); //submethod
			}
			else {
				//public key authentication
				SSH2UserAuthKey kp = SSH2UserAuthKey.FromSECSHStyleFile(_param.IdentityFile, _param.Password);
				SSH2DataWriter signsource = new SSH2DataWriter();
				signsource.WriteAsString(_sessionID);
				signsource.WritePacketType(PacketType.SSH_MSG_USERAUTH_REQUEST);
				signsource.Write(_param.UserName);
				signsource.Write(sn);
				signsource.Write("publickey");
				signsource.Write(true);
				signsource.Write(SSH2Util.PublicKeyAlgorithmName(kp.Algorithm));
				signsource.WriteAsString(kp.GetPublicKeyBlob());

				SSH2DataWriter signpack = new SSH2DataWriter();
				signpack.Write(SSH2Util.PublicKeyAlgorithmName(kp.Algorithm));
				signpack.WriteAsString(kp.Sign(signsource.ToByteArray()));

				wr.Write(sn);
				wr.Write("publickey");
				wr.Write(true);
				wr.Write(SSH2Util.PublicKeyAlgorithmName(kp.Algorithm));
				wr.WriteAsString(kp.GetPublicKeyBlob());
				wr.WriteAsString(signpack.ToByteArray());
			}
			TransmitPacket(wr.ToByteArray());

			_authenticationResult = ProcessAuthenticationResponse();
			if(_authenticationResult==AuthenticationResult.Failure)
				throw new SSHException(Strings.GetString("AuthenticationFailed"));
			return _authenticationResult;
		}
		private AuthenticationResult ProcessAuthenticationResponse() {
			do {
				SSH2DataReader response = new SSH2DataReader(ReceivePacket().Data);
				PacketType h = response.ReadPacketType();
				if(h==PacketType.SSH_MSG_USERAUTH_FAILURE) {
					string msg = Encoding.ASCII.GetString(response.ReadString());
					return AuthenticationResult.Failure;
				}
				else if(h==PacketType.SSH_MSG_USERAUTH_BANNER) {
					Debug.WriteLine("USERAUTH_BANNER");
				}
				else if(h==PacketType.SSH_MSG_USERAUTH_SUCCESS) {
					_packetBuilder.Handler = new CallbackSSH2PacketHandler(this);
					return AuthenticationResult.Success; //successfully exit
				}
				else if(h==PacketType.SSH_MSG_USERAUTH_INFO_REQUEST) {
					string name = Encoding.ASCII.GetString(response.ReadString());
					string inst = Encoding.ASCII.GetString(response.ReadString());
					string lang = Encoding.ASCII.GetString(response.ReadString());
					int num = response.ReadInt32();
					string[] prompts = new string[num];
					for(int i=0; i<num; i++) {
						prompts[i] = Encoding.ASCII.GetString(response.ReadString());
						bool echo = response.ReadBool();
					}
					_eventReceiver.OnAuthenticationPrompt(prompts);
					return AuthenticationResult.Prompt;
				}
				else
					throw new SSHException("protocol error: unexpected packet type "+h);
			} while(true);
		}
		public AuthenticationResult DoKeyboardInteractiveAuth(string[] input) {
			if(_param.AuthenticationType!=AuthenticationType.KeyboardInteractive)
				throw new SSHException("DoKeyboardInteractiveAuth() must be called with keyboard-interactive authentication");
			SSH2DataWriter re = new SSH2DataWriter();
			re.WritePacketType(PacketType.SSH_MSG_USERAUTH_INFO_RESPONSE);
			re.Write(input.Length);
			foreach(string t in input)
				re.Write(t);
			TransmitPacket(re.ToByteArray());

			_authenticationResult = ProcessAuthenticationResponse();
			//try again on failure
			if(_authenticationResult==AuthenticationResult.Failure) {
				SSH2DataWriter wr = new SSH2DataWriter();
				wr.WritePacketType(PacketType.SSH_MSG_USERAUTH_REQUEST);
				wr.Write(_param.UserName);
				wr.Write("ssh-connection"); 
				wr.Write("keyboard-interactive");
				wr.Write(""); //lang
				wr.Write(""); //submethod
				TransmitPacket(wr.ToByteArray());
				_authenticationResult = ProcessAuthenticationResponse();
			}
			return _authenticationResult;
		}
		
		public override SSHChannel OpenShell(ISSHChannelEventReceiver receiver) {
			//open channel
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_OPEN);
			wr.Write("session");
			int local_channel = this.RegisterChannelEventReceiver(null, receiver)._localID;

			wr.Write(local_channel);
			wr.Write(_param.WindowSize); //initial window size
			int windowsize = _param.WindowSize;
			wr.Write(_param.MaxPacketSize); //max packet size
			SSH2Channel channel = new SSH2Channel(this, ChannelType.Shell, local_channel);
			TransmitPacket(wr.ToByteArray());
			
			return channel;
		}

		public override SSHChannel ForwardPort(ISSHChannelEventReceiver receiver, string remote_host, int remote_port, string originator_host, int originator_port) {
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_OPEN);
			wr.Write("direct-tcpip");
			int local_id = RegisterChannelEventReceiver(null, receiver)._localID;
			wr.Write(local_id);
			wr.Write(_param.WindowSize); //initial window size
			int windowsize = _param.WindowSize;
			wr.Write(_param.MaxPacketSize); //max packet size
			wr.Write(remote_host);
			wr.Write(remote_port);
			wr.Write(originator_host);
			wr.Write(originator_port);

			SSH2Channel channel = new SSH2Channel(this, ChannelType.ForwardedLocalToRemote, local_id);
			
			TransmitPacket(wr.ToByteArray());
			
			return channel;
		}

		public override void ListenForwardedPort(string allowed_host, int bind_port) {
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_GLOBAL_REQUEST);
			wr.Write("tcpip-forward");
			wr.Write(true);
			wr.Write(allowed_host);
			wr.Write(bind_port);

			_waitingForPortForwardingResponse = true;
			TransmitPacket(wr.ToByteArray());
		}

		public override void CancelForwardedPort(string host, int port) {
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_GLOBAL_REQUEST);
			wr.Write("cancel-tcpip-forward");
			wr.Write(true);
			wr.Write(host);
			wr.Write(port);
			TransmitPacket(wr.ToByteArray());
		}

		private void ProcessPortforwardingRequest(ISSHConnectionEventReceiver receiver, SSH2DataReader reader) {
			string method = Encoding.ASCII.GetString(reader.ReadString());

			int remote_channel = reader.ReadInt32();
			int window_size = reader.ReadInt32(); //skip initial window size
			int servermaxpacketsize = reader.ReadInt32();
			string host = Encoding.ASCII.GetString(reader.ReadString());
			int port = reader.ReadInt32();
			string originator_ip = Encoding.ASCII.GetString(reader.ReadString());
			int originator_port = reader.ReadInt32();
			
			PortForwardingCheckResult r = receiver.CheckPortForwardingRequest(host,port,originator_ip,originator_port);
			SSH2DataWriter wr = new SSH2DataWriter();
			if(r.allowed) {
				//send OPEN_CONFIRMATION
				SSH2Channel channel = new SSH2Channel(this, ChannelType.ForwardedRemoteToLocal, RegisterChannelEventReceiver(null, r.channel)._localID, remote_channel, servermaxpacketsize);
				wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_OPEN_CONFIRMATION);
				wr.Write(remote_channel);
				wr.Write(channel.LocalChannelID);
				wr.Write(_param.WindowSize); //initial window size
				wr.Write(_param.MaxPacketSize); //max packet size
				receiver.EstablishPortforwarding(r.channel, channel);
			}
			else {
				wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_OPEN_FAILURE);
				wr.Write(remote_channel);
				wr.Write(r.reason_code);
				wr.Write(r.reason_message);
				wr.Write(""); //lang tag
			}
			TransmitPacket(wr.ToByteArray());
		}

		internal SSH2Packet TransmitPacket(byte[] payload) {
			lock(_tLockObject) { 
				SSH2Packet p = SSH2Packet.FromPlainPayload(payload, _tCipher==null? 8 : _tCipher.BlockSize, _param.Random);
				if(_tMAC!=null) p.CalcHash(_tMAC, _tSequence);

				_tSequence++;
				p.WriteTo(_stream, _tCipher);
				return p;
			}
		}

		//synchronous reception
		internal SSH2Packet ReceivePacket() {

			while(true) {
				SSH2Packet p = null;
				SynchronizedSSH2PacketHandler handler = (SynchronizedSSH2PacketHandler)_packetBuilder.Handler;
				if(!handler.HasPacket) {
					handler.Wait();
					if(handler.State==ReceiverState.Error)
						throw new SSHException(handler.ErrorMessage);
					else if(handler.State==ReceiverState.Closed)
						throw new SSHException("socket closed");
				}
				p = handler.PopPacket();

				SSH2DataReader r = new SSH2DataReader(p.Data);
				PacketType pt = r.ReadPacketType();
				if(pt==PacketType.SSH_MSG_IGNORE) {
					if(_eventReceiver!=null) _eventReceiver.OnIgnoreMessage(r.ReadString());
				}
				else if(pt==PacketType.SSH_MSG_DEBUG) {
					bool f = r.ReadBool();
					if(_eventReceiver!=null) _eventReceiver.OnDebugMessage(f, r.ReadString());
				}
				else
					return p;
			}
		}
		internal void AsyncReceivePacket(SSH2Packet packet) {
			try {
				ProcessPacket(packet);
			}
			catch(Exception ex) {
				//Debug.WriteLine(ex.StackTrace);
				if(!_closed)
					_eventReceiver.OnError(ex, ex.Message);
			}
		}

		private bool ProcessPacket(SSH2Packet packet) {
			//Debug.WriteLine("ProcessPacket pt="+pt);
			SSH2DataReader r = new SSH2DataReader(packet.Data);
			PacketType pt = r.ReadPacketType();

			if(pt==PacketType.SSH_MSG_DISCONNECT) {
				int errorcode = r.ReadInt32();
				//string description = Encoding.ASCII.GetString(r.ReadString());
				_eventReceiver.OnConnectionClosed();
				return false;
			}
			else if(_waitingForPortForwardingResponse) {
				if(pt!=PacketType.SSH_MSG_REQUEST_SUCCESS)
					_eventReceiver.OnUnknownMessage((byte)pt, r.Image);
				_waitingForPortForwardingResponse = false;
				return true;
			}
			else if(pt==PacketType.SSH_MSG_CHANNEL_OPEN) {
				ProcessPortforwardingRequest(_eventReceiver, r);
				return true;
			}
			else if(pt>=PacketType.SSH_MSG_CHANNEL_OPEN_CONFIRMATION && pt<=PacketType.SSH_MSG_CHANNEL_FAILURE) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区视频在线| 成人av资源在线| 九一久久久久久| 色综合天天综合在线视频| 欧美一区二视频| 亚洲激情校园春色| 在线视频中文字幕一区二区| 欧美视频精品在线观看| 久久久久久久久久电影| 青青草成人在线观看| 91免费在线播放| 国产日韩亚洲欧美综合| 奇米四色…亚洲| 色婷婷国产精品久久包臀| 久久九九影视网| 日本欧美一区二区三区| 欧美曰成人黄网| 亚洲素人一区二区| 国产a级毛片一区| 精品国产精品一区二区夜夜嗨| 亚洲国产欧美在线| 欧美在线观看视频一区二区| 亚洲欧洲国产日本综合| 国产91综合一区在线观看| 欧美不卡一区二区三区| 日本不卡123| 欧美一区二区三区色| 亚洲高清久久久| 欧美视频一区二区三区四区| 亚洲精品欧美专区| 色就色 综合激情| 亚洲色图制服诱惑 | 欧美一级午夜免费电影| 一区二区成人在线| 91电影在线观看| 亚洲美女淫视频| 欧美视频精品在线观看| 亚洲午夜久久久久久久久久久 | 国产毛片精品国产一区二区三区| 在线综合亚洲欧美在线视频| 日韩成人一区二区| 91精品国产综合久久福利软件| 亚洲成人av免费| 这里只有精品电影| 激情av综合网| 久久久久高清精品| 成人国产一区二区三区精品| 亚洲人妖av一区二区| 色综合久久久久久久久久久| 玉足女爽爽91| 欧美一区二区三区成人| 国产精品一卡二| 国产精品毛片高清在线完整版| 99在线精品观看| 亚洲一区国产视频| 欧美成人精品福利| 春色校园综合激情亚洲| 精品亚洲免费视频| 久久一日本道色综合| 国产91精品在线观看| 一区二区在线看| 欧美一区二区三区免费| 高清av一区二区| 亚洲午夜一区二区| 久久久99精品久久| 欧美在线观看一区二区| 久久精品国产99| 亚洲欧美日韩国产手机在线| 777亚洲妇女| jvid福利写真一区二区三区| 亚洲午夜影视影院在线观看| 2020国产精品| 欧美日韩在线亚洲一区蜜芽| 韩国理伦片一区二区三区在线播放 | 2020国产精品久久精品美国| 91视频你懂的| 国产一区二区三区高清播放| 亚洲美女视频一区| 久久久久久久精| 欧美日韩亚洲高清一区二区| 国产伦理精品不卡| 天堂va蜜桃一区二区三区| 国产精品视频一二三区| 91精品福利在线一区二区三区| 99九九99九九九视频精品| 精品中文字幕一区二区| 亚洲自拍偷拍av| 国产精品第五页| 久久午夜国产精品| 欧美一级在线视频| 欧美无砖砖区免费| 91在线视频观看| 国产·精品毛片| 免费精品视频在线| 亚洲丰满少妇videoshd| 亚洲欧洲国产日本综合| 久久久久久久久久看片| 91精品国产91热久久久做人人| 色悠久久久久综合欧美99| 懂色av噜噜一区二区三区av| 久久激五月天综合精品| 蜜臀a∨国产成人精品| 亚洲午夜免费福利视频| 一区二区在线看| 亚洲色图视频网| 18欧美乱大交hd1984| 国产精品欧美一级免费| 久久精品亚洲一区二区三区浴池| 日韩女优电影在线观看| 在线综合+亚洲+欧美中文字幕| 色94色欧美sute亚洲线路一久| 成人毛片老司机大片| 国产成人精品一区二| 国产不卡视频一区二区三区| 国产精品18久久久久久久久| 国产综合色精品一区二区三区| 开心九九激情九九欧美日韩精美视频电影 | 国产精品白丝在线| 中文成人综合网| 最新欧美精品一区二区三区| 国产精品久久久久久户外露出| 亚洲国产精品精华液2区45| 日本一区二区不卡视频| 国产精品久久久久久久午夜片| 国产精品国产馆在线真实露脸| 国产精品理伦片| 亚洲精品国产视频| 亚洲成人777| 久久精品国内一区二区三区| 精品系列免费在线观看| 粉嫩嫩av羞羞动漫久久久 | 久久精品国产在热久久| 久久91精品久久久久久秒播| 国产麻豆精品在线| 97精品久久久午夜一区二区三区| 欧美一区二区人人喊爽| 欧美色老头old∨ideo| 欧美丰满美乳xxx高潮www| 日韩一区二区免费高清| www国产成人免费观看视频 深夜成人网| 久久久久国产一区二区三区四区| 欧美国产视频在线| 亚洲一区二区在线播放相泽| 人人爽香蕉精品| 国产mv日韩mv欧美| 欧洲激情一区二区| 日韩色视频在线观看| 中文字幕精品综合| 亚洲国产aⅴ天堂久久| 国产在线一区二区| 色狠狠色狠狠综合| 欧美xfplay| 亚洲精品乱码久久久久久黑人| 日本中文一区二区三区| 成人免费三级在线| 制服丝袜中文字幕一区| 国产精品久久久久aaaa樱花 | 91麻豆福利精品推荐| 欧美日韩一区成人| 国产欧美综合在线观看第十页 | 一本一道综合狠狠老| 欧美大片免费久久精品三p| 中文字幕日韩av资源站| 久久国产尿小便嘘嘘| 一本高清dvd不卡在线观看| 欧美精品一区二区精品网| 一区二区三区美女| 国产不卡一区视频| 日韩欧美一区二区视频| 亚洲乱码国产乱码精品精小说| 精品一区二区久久| 欧美三级中文字幕| 亚洲丝袜另类动漫二区| 国产毛片一区二区| 欧美一级欧美一级在线播放| 亚洲三级电影全部在线观看高清| 国产永久精品大片wwwapp| 欧美三级在线播放| 亚洲精品视频在线看| 国产成人综合精品三级| 日韩一卡二卡三卡四卡| 亚洲一区中文日韩| 精品国免费一区二区三区| 亚洲综合一区二区精品导航| 99久久精品国产网站| 国产三级精品视频| 国产在线精品免费| 日韩一区二区麻豆国产| 日韩成人一级大片| 欧美精品乱码久久久久久按摩 | 国产欧美视频一区二区三区| 蜜桃一区二区三区四区| 91精品国产综合久久久久久漫画| 樱花影视一区二区| 91成人免费网站| 一区二区三区成人| 在线观看日韩av先锋影音电影院| 亚洲欧美日韩国产成人精品影院 | 国产在线观看免费一区| 欧美成人午夜电影|