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

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

?? ssh2connection.cs

?? Granados是一個基于.NET的SSH客戶端庫。同時支持SSH1和SSH2。實現了AES, Blowfish, TripleDES, RSA, DSA等加密驗證算法。實現TCP協議連接。
?? CS
?? 第 1 頁 / 共 3 頁
字號:
				int local_channel = r.ReadInt32();
				ChannelEntry e = FindChannelEntry(local_channel);
				if(e!=null) //throw new SSHException("Unknown channel "+local_channel);
					((SSH2Channel)e._channel).ProcessPacket(e._receiver, pt, 5+r.Rest, r);
				else
					Debug.WriteLine("unexpected channel pt="+pt+" local_channel="+local_channel.ToString());
				return true;
			}
			else if(pt==PacketType.SSH_MSG_IGNORE) {
				_eventReceiver.OnIgnoreMessage(r.ReadString());
				return true;
			}
			else if(_asyncKeyExchanger!=null) {
				_asyncKeyExchanger.AsyncProcessPacket(packet);
				return true;
			}
			else if(pt==PacketType.SSH_MSG_KEXINIT) {
				Debug.WriteLine("Host sent KEXINIT");
				_asyncKeyExchanger = new KeyExchanger(this, _sessionID);
				_asyncKeyExchanger.AsyncProcessPacket(packet);
				return true;
			}
			else {
				_eventReceiver.OnUnknownMessage((byte)pt, r.Image);
				return false;
			}
		}

		public override void Disconnect(string msg) {
			if(_closed) return;
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_DISCONNECT);
			wr.Write(0);
			wr.Write(msg);
			wr.Write(""); //language
			TransmitPacket(wr.ToByteArray());
			_stream.Flush();
			_closed = true;
			_stream.Close();
		}

		public override void Close() {
			if(_closed) return;
			_closed = true;
			_stream.Close();
		} 
		public override void SendIgnorableData(string msg) {
			SSH2DataWriter w = new SSH2DataWriter();
			w.WritePacketType(PacketType.SSH_MSG_IGNORE);
			w.Write(msg);
			TransmitPacket(w.ToByteArray());
		}
		public void ReexchangeKeys() {
			_asyncKeyExchanger = new KeyExchanger(this, _sessionID);
			_asyncKeyExchanger.AsyncStartReexchange();
		}

		internal void LockCommunication() {
			_packetBuilder.SetSignal(false);
		}
		internal void UnlockCommunication() {
			_packetBuilder.SetSignal(true);
		}
		internal void RefreshKeys(byte[] sessionID, Cipher tc, Cipher rc, MAC tm, MAC rm) {
			_sessionID = sessionID;
			_tCipher = tc;
			_tMAC = tm;
			_packetBuilder.SetCipher(rc, _param.CheckMACError? rm : null);
			_asyncKeyExchanger = null;
		}

	}

	public class SSH2Channel : SSHChannel {
		//channel property
		protected int _windowSize;
		protected int _leftWindowSize;
		protected int _serverMaxPacketSize;

		//negotiation status
		protected int _negotiationStatus;

		public SSH2Channel(SSHConnection con, ChannelType type, int local_id) : base(con, type, local_id) {
			_windowSize = _leftWindowSize = con.Param.WindowSize;
			_negotiationStatus = type==ChannelType.Shell? 3 : type==ChannelType.ForwardedLocalToRemote? 1 : type==ChannelType.Session? 1 : 0;
		}
		public SSH2Channel(SSHConnection con, ChannelType type, int local_id, int remote_id, int maxpacketsize) : base(con, type, local_id) {
			_windowSize = _leftWindowSize = con.Param.WindowSize;
			Debug.Assert(type==ChannelType.ForwardedRemoteToLocal);
			_remoteID = remote_id;
			_serverMaxPacketSize = maxpacketsize;
			_negotiationStatus = 0;
		}

		public override void ResizeTerminal(int width, int height, int pixel_width, int pixel_height) {
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_REQUEST);
			wr.Write(_remoteID);
			wr.Write("window-change");
			wr.Write(false);
			wr.Write(width);
			wr.Write(height);
			wr.Write(pixel_width); //no graphics
			wr.Write(pixel_height);
			TransmitPacket(wr.ToByteArray());
		}
		public override void Transmit(byte[] data)	{
			//!!it is better idea that we wait a WINDOW_ADJUST if the left size is lack
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_DATA);
			wr.Write(_remoteID);
			wr.WriteAsString(data);

			TransmitPacket(wr.ToByteArray());
		}
		public override void Transmit(byte[] data, int offset, int length)	{
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_DATA);
			wr.Write(_remoteID);
			wr.WriteAsString(data, offset, length);

			TransmitPacket(wr.ToByteArray());
		}

		public override void SendEOF() {
			if(_connection.IsClosed) return;
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_EOF);
			wr.Write(_remoteID);
			TransmitPacket(wr.ToByteArray());
		}


		public override void Close() {
			if(_connection.IsClosed) return;
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_CLOSE);
			wr.Write(_remoteID);
			TransmitPacket(wr.ToByteArray());

		}

		//maybe this is SSH2 only feature
		public void SetEnvironmentVariable(string name, string value) {
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_REQUEST);
			wr.Write(_remoteID);
			wr.Write("env");
			wr.Write(false);
			wr.Write(name);
			wr.Write(value);
			TransmitPacket(wr.ToByteArray());
		}
		public void SendBreak(int time) {
			SSH2DataWriter wr = new SSH2DataWriter();
			wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_REQUEST);
			wr.Write(_remoteID);
			wr.Write("break");
			wr.Write(true);
			wr.Write(time);
			TransmitPacket(wr.ToByteArray());
		}

		internal void ProcessPacket(ISSHChannelEventReceiver receiver, PacketType pt, int data_length, SSH2DataReader re) {

			//NOTE: the offset of 're' is next to 'receipiant channel' field
			_leftWindowSize -= data_length;
			while(_leftWindowSize <= _windowSize) {
				SSH2DataWriter adj = new SSH2DataWriter();
				adj.WritePacketType(PacketType.SSH_MSG_CHANNEL_WINDOW_ADJUST);
				adj.Write(_remoteID);
				adj.Write(_windowSize);
				TransmitPacket(adj.ToByteArray());
				_leftWindowSize += _windowSize;
				//Debug.WriteLine("Window size is adjusted to " + _leftWindowSize);
			}

			if(pt==PacketType.SSH_MSG_CHANNEL_WINDOW_ADJUST) {
				int w = re.ReadInt32();
				//Debug.WriteLine(String.Format("Window Adjust +={0}",w));
			}
			else if(_negotiationStatus!=0) { //when the negotiation is not completed
				if(_type==ChannelType.Shell)
					OpenShell(receiver, pt, re);
				else if(_type==ChannelType.ForwardedLocalToRemote)
					ReceivePortForwardingResponse(receiver, pt, re);
				else if(_type==ChannelType.Session)
					EstablishSession(receiver, pt, re);
			}
			else {
				switch(pt) {
					case PacketType.SSH_MSG_CHANNEL_DATA: {
						int len = re.ReadInt32();
						receiver.OnData(re.Image, re.Offset, len);
					}
						break;
					case PacketType.SSH_MSG_CHANNEL_EXTENDED_DATA: {
						int t = re.ReadInt32();
						byte[] data = re.ReadString();
						receiver.OnExtendedData(t, data);
					}
						break;
					case PacketType.SSH_MSG_CHANNEL_REQUEST: {
						string request = Encoding.ASCII.GetString(re.ReadString());
						bool reply = re.ReadBool();
						if(request=="exit-status") {
							int status = re.ReadInt32();
						}
					}
						break;
					case PacketType.SSH_MSG_CHANNEL_EOF:
						receiver.OnChannelEOF();
						break;
					case PacketType.SSH_MSG_CHANNEL_CLOSE:
						_connection.UnregisterChannelEventReceiver(_localID);
						receiver.OnChannelClosed();
						break;
					case PacketType.SSH_MSG_CHANNEL_FAILURE:
					case PacketType.SSH_MSG_CHANNEL_SUCCESS:
						receiver.OnMiscPacket((byte)pt, re.Image, re.Offset, re.Rest);
						break;
					default:
						receiver.OnMiscPacket((byte)pt, re.Image, re.Offset, re.Rest);
						Debug.WriteLine("Unknown Packet "+pt);
						break;
				}			

			}

		}

		private void TransmitPacket(byte[] data) {
			((SSH2Connection)_connection).TransmitPacket(data);
		}

		private void OpenShell(ISSHChannelEventReceiver receiver, PacketType pt, SSH2DataReader reader) {
			if(_negotiationStatus==3) {
				if(pt!=PacketType.SSH_MSG_CHANNEL_OPEN_CONFIRMATION) {
					if(pt!=PacketType.SSH_MSG_CHANNEL_OPEN_FAILURE)
						receiver.OnChannelError(null, "opening channel failed; packet type="+pt);
					else {
						int errcode = reader.ReadInt32();
						string msg = Encoding.ASCII.GetString(reader.ReadString());
						receiver.OnChannelError(null, msg);
					}
					Close();
				}
				else {
					_remoteID = reader.ReadInt32();
					_serverMaxPacketSize = reader.ReadInt32();
				
					//open pty
					SSH2DataWriter wr = new SSH2DataWriter();
					wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_REQUEST);
					wr.Write(_remoteID);
					wr.Write("pty-req");
					wr.Write(true);
					wr.Write(_connection.Param.TerminalName);
					wr.Write(_connection.Param.TerminalWidth);
					wr.Write(_connection.Param.TerminalHeight);
					wr.Write(_connection.Param.TerminalPixelWidth);
					wr.Write(_connection.Param.TerminalPixelHeight);
					wr.WriteAsString(new byte[0]);
					TransmitPacket(wr.ToByteArray());

					_negotiationStatus = 2;
				}
			}
			else if(_negotiationStatus==2) {
				if(pt!=PacketType.SSH_MSG_CHANNEL_SUCCESS) {
					receiver.OnChannelError(null, "opening pty failed");
					Close();
				}
				else {
					//open shell
					SSH2DataWriter wr = new SSH2DataWriter();
					wr.Write((byte)PacketType.SSH_MSG_CHANNEL_REQUEST);
					wr.Write(_remoteID);
					wr.Write("shell");
					wr.Write(true);
					TransmitPacket(wr.ToByteArray());

					_negotiationStatus = 1;
				}
			}
			else if(_negotiationStatus==1) {
				if(pt!=PacketType.SSH_MSG_CHANNEL_SUCCESS) {
					receiver.OnChannelError(null, "Opening shell failed: packet type="+pt.ToString());
					Close();
				}
				else {
					receiver.OnChannelReady();
					_negotiationStatus = 0; //goal!
				}
			}
			else
				Debug.Assert(false);
		}

		private void ReceivePortForwardingResponse(ISSHChannelEventReceiver receiver, PacketType pt, SSH2DataReader reader) {
			if(_negotiationStatus==1) {
				if(pt!=PacketType.SSH_MSG_CHANNEL_OPEN_CONFIRMATION) {
					if(pt!=PacketType.SSH_MSG_CHANNEL_OPEN_FAILURE)
						receiver.OnChannelError(null, "opening channel failed; packet type="+pt);
					else {
						int errcode = reader.ReadInt32();
						string msg = Encoding.ASCII.GetString(reader.ReadString());
						receiver.OnChannelError(null, msg);
					}
					Close();
				}
				else {
					_remoteID = reader.ReadInt32();
					_serverMaxPacketSize = reader.ReadInt32();
					_negotiationStatus = 0;
					receiver.OnChannelReady();
				}
			}
			else
				Debug.Assert(false);
		}
		private void EstablishSession(ISSHChannelEventReceiver receiver, PacketType pt, SSH2DataReader reader) {
			if(_negotiationStatus==1) {
				if(pt!=PacketType.SSH_MSG_CHANNEL_OPEN_CONFIRMATION) {
					if(pt!=PacketType.SSH_MSG_CHANNEL_OPEN_FAILURE)
						receiver.OnChannelError(null, "opening channel failed; packet type="+pt);
					else {
						int remote_id = reader.ReadInt32();
						int errcode = reader.ReadInt32();
						string msg = Encoding.ASCII.GetString(reader.ReadString());
						receiver.OnChannelError(null, msg);
					}
					Close();
				}
				else {
					_remoteID = reader.ReadInt32();
					_serverMaxPacketSize = reader.ReadInt32();
					_negotiationStatus = 0;
					receiver.OnChannelReady();
				}
			}
			else
				Debug.Assert(false);
		}
	}

	internal class KeyExchanger {
		private SSH2Connection _con;
		private SSHConnectionParameter _param;
		private SSH2ConnectionInfo _cInfo;
		//payload of KEXINIT message
		private byte[] _serverKEXINITPayload;
		private byte[] _clientKEXINITPayload;

		//true if the host sent KEXINIT first
		private bool _startedByHost;

		private ManualResetEvent _newKeyEvent;

		//status
		private enum Status {
			INITIAL,
			WAIT_KEXINIT,
			WAIT_KEXDH_REPLY,
			WAIT_NEWKEYS,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区三区四区在线视频| 日韩理论片网站| 亚洲专区一二三| 91久久人澡人人添人人爽欧美| 亚洲色图20p| 欧美日韩精品高清| 美女mm1313爽爽久久久蜜臀| 欧美v国产在线一区二区三区| 国产一区二区福利| 国产欧美日韩三级| 91高清在线观看| 日韩av一区二| 欧美—级在线免费片| 91视频观看视频| 日韩高清不卡一区二区| 久久午夜免费电影| 一本大道综合伊人精品热热| 日日摸夜夜添夜夜添亚洲女人| 日韩欧美国产麻豆| 成人国产精品免费观看| 亚洲成人一二三| 精品美女在线播放| 色天天综合久久久久综合片| 奇米精品一区二区三区在线观看一| 久久久久久久综合狠狠综合| fc2成人免费人成在线观看播放| 亚洲一卡二卡三卡四卡五卡| 欧美精品一区男女天堂| 色呦呦国产精品| 久久精品二区亚洲w码| 国产精品二三区| 7777精品伊人久久久大香线蕉完整版| 激情久久五月天| 亚洲综合一二区| 久久久久久日产精品| 欧美亚洲动漫制服丝袜| 国产传媒一区在线| 日韩一区精品字幕| 自拍偷拍国产精品| 久久综合国产精品| 欧美日韩在线播放三区四区| 国产精品888| 午夜精品在线视频一区| 亚洲国产成人一区二区三区| 欧美一区午夜精品| 色一情一伦一子一伦一区| 国产乱码精品一区二区三区av| 亚洲午夜电影网| 国产精品高潮久久久久无| 欧美videos大乳护士334| 91精品1区2区| 成人开心网精品视频| 精品亚洲成a人| 日韩高清不卡在线| 亚洲高清久久久| 亚洲乱码国产乱码精品精98午夜| 国产亚洲精品久| 日韩午夜在线影院| 欧美精品电影在线播放| 日本韩国欧美在线| 99视频有精品| 成人性视频免费网站| 国产精品一线二线三线| 韩国av一区二区三区四区| 男女男精品视频网| 日韩国产在线观看| 午夜精品爽啪视频| 亚洲成人一二三| 亚洲成人先锋电影| 午夜激情久久久| 亚洲成人午夜电影| 亚洲第一在线综合网站| 亚洲国产成人91porn| 亚洲午夜三级在线| 亚洲国产综合视频在线观看| 一区二区日韩电影| 一区二区三区四区国产精品| 亚洲欧美日韩国产成人精品影院| 国产精品久久久久久久久久久免费看 | 日韩电影免费在线| 五月天国产精品| 日本三级亚洲精品| 日韩成人免费看| 麻豆精品一区二区三区| 麻豆91小视频| 国内久久精品视频| 国产mv日韩mv欧美| a级高清视频欧美日韩| 99re热视频精品| 色系网站成人免费| 欧美午夜精品久久久| 欧美精品vⅰdeose4hd| 欧美一级免费大片| 久久这里都是精品| 亚洲国产精品传媒在线观看| 国产精品成人免费在线| 一区二区三区四区在线播放| 首页国产丝袜综合| 蜜臀av性久久久久蜜臀aⅴ四虎 | 美国一区二区三区在线播放| 蜜桃久久av一区| 久久 天天综合| 成人晚上爱看视频| 91黄色免费版| 欧美人与z0zoxxxx视频| 精品日韩一区二区三区| 国产精品久久久久aaaa樱花| 一区二区国产视频| 老司机免费视频一区二区| 国产91色综合久久免费分享| 在线观看不卡一区| 日韩欧美你懂的| 亚洲欧美综合在线精品| 偷窥国产亚洲免费视频| 国产综合色视频| 色婷婷av一区二区三区gif| 日韩一级高清毛片| 国产精品久久久久一区二区三区共| 亚洲六月丁香色婷婷综合久久 | 丁香啪啪综合成人亚洲小说| 色噜噜夜夜夜综合网| 日韩欧美精品在线视频| 国产精品国产馆在线真实露脸| 日韩国产在线观看| 91小视频免费看| 精品国产乱码久久久久久久| 一区二区三区在线免费视频| 国模大尺度一区二区三区| 欧美三级视频在线播放| 中文字幕不卡在线| 蜜臀av性久久久久av蜜臀妖精| 成人sese在线| 欧美电视剧在线观看完整版| 一区二区高清在线| 欧美一级一区二区| 色综合久久88色综合天天免费| 91精品国产91综合久久蜜臀| 国产精品免费人成网站| 美女诱惑一区二区| 色播五月激情综合网| 国产亚洲精久久久久久| 日本特黄久久久高潮| 色婷婷综合中文久久一本| 久久日韩粉嫩一区二区三区| 日韩在线一区二区三区| 99国产精品国产精品久久| 精品国产乱码久久久久久图片 | 69av一区二区三区| 亚洲乱码国产乱码精品精的特点 | 亚洲欧美偷拍三级| 久久99精品一区二区三区三区| 在线观看av一区| 成人免费在线播放视频| 国产一区二区三区黄视频| 久久久精品免费免费| 亚洲中国最大av网站| 成人午夜在线播放| 久久久久9999亚洲精品| 麻豆国产欧美日韩综合精品二区| 欧美色爱综合网| 一区二区三区四区在线| 91污在线观看| 国产色一区二区| 韩国精品久久久| 欧美精品一区男女天堂| 韩国精品在线观看| 久久综合九色综合97_久久久| 美女爽到高潮91| 日韩女优制服丝袜电影| 麻豆精品国产传媒mv男同| 日韩欧美的一区| 精品一区二区在线观看| 精品欧美乱码久久久久久 | 日韩和欧美一区二区| 在线免费精品视频| 国产专区综合网| 777色狠狠一区二区三区| 午夜电影一区二区三区| 欧美日韩一级片在线观看| 亚洲欧美日韩国产中文在线| 在线免费观看视频一区| 亚洲电影中文字幕在线观看| 欧美日韩国产在线观看| 蜜芽一区二区三区| 欧美一级欧美三级在线观看| 黄色精品一二区| 久久久精品欧美丰满| 99在线精品一区二区三区| 亚洲乱码一区二区三区在线观看| 在线观看视频一区二区欧美日韩| 亚洲一区二区3| 日韩精品一区二区三区视频在线观看| 老司机午夜精品| 国产精品九色蝌蚪自拍| 91欧美激情一区二区三区成人| 亚洲卡通动漫在线| 日韩一区二区中文字幕| 国产精品白丝jk黑袜喷水| 亚洲欧美一区二区在线观看| 欧美日韩日日骚|