private void ProcessAgentForwardRequest(ISSHConnectionEventReceiver receiver, SSH2DataReader reader) { int remote_channel = reader.ReadInt32(); int window_size = reader.ReadInt32(); //skip initial window size int servermaxpacketsize = reader.ReadInt32(); TraceReceptionEvent("agent forward request", ""); SSH2DataWriter wr = new SSH2DataWriter(); IAgentForward af = _param.AgentForward; if(_agentForwardConfirmed && af!=null && af.CanAcceptForwarding()) { //send OPEN_CONFIRMATION AgentForwardingChannel ch = new AgentForwardingChannel(af); SSH2Channel channel = new SSH2Channel(this, ChannelType.AgentForward, this.ChannelCollection.RegisterChannelEventReceiver(null, ch).LocalID, remote_channel, servermaxpacketsize); ch.SetChannel(channel); 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 TraceTransmissionEvent("granados confirmed agent-forwarding request", ""); } else { wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_OPEN_FAILURE); wr.Write(remote_channel); wr.Write(0); wr.Write("reject"); wr.Write(""); //lang tag TraceTransmissionEvent("granados rejected agent-forwarding request", ""); } TransmitRawPayload(wr.ToByteArray()); }
private void ProcessPortforwardingRequest(ISSHConnectionEventReceiver receiver, SSH2DataReader reader) { 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(); TraceReceptionEvent("port forwarding request", String.Format("host={0} port={1} originator-ip={2} originator-port={3}", host, port, originator_ip, originator_port)); 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, this.ChannelCollection.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); TraceTransmissionEvent("port-forwarding request is confirmed", "host={0} port={1} originator-ip={2} originator-port={3}", host, port, originator_ip, originator_port); } 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 TraceTransmissionEvent("port-forwarding request is rejected", "host={0} port={1} originator-ip={2} originator-port={3}", host, port, originator_ip, originator_port); } TransmitRawPayload(wr.ToByteArray()); }
public override SSHChannel ForwardPort(ISSHChannelEventReceiver receiver, string remote_host, int remote_port, string originator_host, int originator_port) { SSH2DataWriter wr = OpenTransmissionPacket(); wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_OPEN); wr.Write("direct-tcpip"); int local_id = this.ChannelCollection.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, null); TraceTransmissionEvent(PacketType.SSH_MSG_CHANNEL_OPEN, "opening a forwarded port : host={0} port={1}", remote_host, remote_port); TransmitPacket(wr); return channel; }
//open channel private SSHChannel DoExecCommandInternal(ISSHChannelEventReceiver receiver, ChannelType channel_type, string command, string message) { SSH2DataWriter wr = OpenTransmissionPacket(); wr.WritePacketType(PacketType.SSH_MSG_CHANNEL_OPEN); wr.Write("session"); int local_channel = this.ChannelCollection.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, channel_type, local_channel, command); TraceTransmissionEvent(PacketType.SSH_MSG_CHANNEL_OPEN, "executing command"); TransmitPacket(wr); return channel; }
//open channel private SSHChannel DoExecCommandInternal(ISSHChannelEventReceiver receiver, ChannelType channel_type, string command, string message) { int local_channel = this.ChannelCollection.RegisterChannelEventReceiver(null, receiver).LocalID; int windowsize = _param.WindowSize; SSH2Channel channel = new SSH2Channel(this, channel_type, local_channel, command); Transmit( new SSH2Packet(SSH2PacketType.SSH_MSG_CHANNEL_OPEN) .WriteString("session") .WriteInt32(local_channel) .WriteInt32(_param.WindowSize) //initial window size .WriteInt32(_param.MaxPacketSize) //max packet size ); TraceTransmissionEvent(SSH2PacketType.SSH_MSG_CHANNEL_OPEN, message); return channel; }
public override SSHChannel ForwardPort(ISSHChannelEventReceiver receiver, string remote_host, int remote_port, string originator_host, int originator_port) { int local_id = this.ChannelCollection.RegisterChannelEventReceiver(null, receiver).LocalID; int windowsize = _param.WindowSize; SSH2Channel channel = new SSH2Channel(this, ChannelType.ForwardedLocalToRemote, local_id, null); Transmit( new SSH2Packet(SSH2PacketType.SSH_MSG_CHANNEL_OPEN) .WriteString("direct-tcpip") .WriteInt32(local_id) .WriteInt32(_param.WindowSize) //initial window size .WriteInt32(_param.MaxPacketSize) //max packet size .WriteString(remote_host) .WriteInt32(remote_port) .WriteString(originator_host) .WriteInt32(originator_port) ); TraceTransmissionEvent(SSH2PacketType.SSH_MSG_CHANNEL_OPEN, "opening a forwarded port : host={0} port={1}", remote_host, remote_port); return channel; }