Пример #1
0
 public ProxyHTTP(String proxy_host)
 {
     int port=DEFAULTPORT;
     String host=proxy_host;
     if(proxy_host.indexOf(':')!=-1)
     {
         try
         {
             host=proxy_host.substring(0, proxy_host.indexOf(':'));
             port=Integer.parseInt(proxy_host.substring(proxy_host.indexOf(':')+1));
         }
         catch(Exception e)
         {
         }
     }
     this.proxy_host=host;
     this.proxy_port=port;
 }
Пример #2
0
 public void delPortForwardingL(String boundaddress, int lport)
 {
     PortWatcher.delPort(this, boundaddress, lport);
 }
Пример #3
0
        private void checkHost(String host, KeyExchange kex)
        {
            String shkc=getConfig("StrictHostKeyChecking");

            //System.Console.WriteLine("shkc: "+shkc);

            byte[] K_S=kex.getHostKey();
            String key_type=kex.getKeyType();
            String key_fprint=kex.getFingerPrint();

            hostkey=new HostKey(host, K_S);

            HostKeyRepository hkr=jsch.getHostKeyRepository();
            int i=0;
            lock(hkr)
            {
                i=hkr.check(host, K_S);
            }

            bool insert=false;

            if((shkc.equals("ask") || shkc.equals("yes")) &&
                i==HostKeyRepository.CHANGED)
            {
                String file=null;
                lock(hkr)
                {
                    file=hkr.getKnownHostsRepositoryID();
                }
                if(file==null){file="known_hosts";}
                String message=
                    "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!\n"+
                    "IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!\n"+
                    "Someone could be eavesdropping on you right now (man-in-the-middle attack)!\n"+
                    "It is also possible that the "+key_type+" host key has just been changed.\n"+
                    "The fingerprint for the "+key_type+" key sent by the remote host is\n"+
                    key_fprint+".\n"+
                    "Please contact your system administrator.\n"+
                    "Add correct host key in "+file+" to get rid of this message.";

                bool b=false;

                if(userinfo!=null)
                {
                    //userinfo.showMessage(message);
                    b=userinfo.promptYesNo(message+
                        "\nDo you want to delete the old key and insert the new key?");
                }
                //throw new JSchException("HostKey has been changed: "+host);
                if(!b)
                {
                    throw new JSchException("HostKey has been changed: "+host);
                }
                else
                {
                    lock(hkr)
                    {
                        hkr.remove(host,
                                  (key_type.equals("DSA") ? "ssh-dss" : "ssh-rsa"),
                                   null);
                        insert=true;
                    }
                }
            }

            //    bool insert=false;

            if((shkc.equals("ask") || shkc.equals("yes")) &&
                (i!=HostKeyRepository.OK) && !insert)
            {
                if(shkc.equals("yes"))
                {
                    throw new JSchException("reject HostKey: "+host);
                }
                //System.Console.WriteLine("finger-print: "+key_fprint);
                if(userinfo!=null)
                {
                    bool foo=userinfo.promptYesNo(
                        "The authenticity of host '"+host+"' can't be established.\n"+
                        key_type+" key fingerprint is "+key_fprint+".\n"+
                        "Are you sure you want to continue connecting?"
                        );
                    if(!foo)
                    {
                        throw new JSchException("reject HostKey: "+host);
                    }
                    insert=true;
                }
                else
                {
                    if(i==HostKeyRepository.NOT_INCLUDED)
                        throw new JSchException("UnknownHostKey: "+host+". "+key_type+" key fingerprint is "+key_fprint);
                    else throw new JSchException("HostKey has been changed: "+host);
                }
            }

            if(shkc.equals("no") &&
                HostKeyRepository.NOT_INCLUDED==i)
            {
                insert=true;
            }

            if(insert)
            {
                lock(hkr)
                {
                    hkr.add(host, K_S, userinfo);
                }
            }
        }
Пример #4
0
 public void setHost(String host)
 {
     this.host=host;
 }
Пример #5
0
 public ProxyHTTP(String proxy_host, int proxy_port)
 {
     this.proxy_host=proxy_host;
     this.proxy_port=proxy_port;
 }
Пример #6
0
 public void setUserPasswd(String user, String passwd)
 {
     this.user=user;
     this.passwd=passwd;
 }
Пример #7
0
        /*
        cd /tmp
        c->s REALPATH
        s->c NAME
        c->s STAT
        s->c ATTR
        */
        public void cd(String path)
        {
            //throws SftpException{
            try
            {
                path=remoteAbsolutePath(path);

                Vector v=glob_remote(path);
                if(v.size()!=1)
                {
                    throw new SftpException(SSH_FX_FAILURE, v.toString());
                }
                path=(String)(v.elementAt(0));
                sendREALPATH(path.getBytes());

                Header _header=new Header();
                _header=header(buf, _header);
                int length=_header.length;
                int type=_header.type;
                buf.rewind();
                fill(buf.buffer, 0, length);

                if(type!=101 && type!=104)
                {
                    throw new SftpException(SSH_FX_FAILURE, "");
                }
                int i;
                if(type==101)
                {
                    i=buf.getInt();
                    throwStatusError(buf, i);
                }
                i=buf.getInt();
                byte[] str=buf.getString();
                if(str!=null && str[0]!='/')
                {
                    str=(cwd+"/"+new String(str)).getBytes();
                }
                str=buf.getString();         // logname
                i=buf.getInt();              // attrs

                String newpwd=new String(str);
                SftpATTRS attr=_stat(newpwd);
                if((attr.getFlags()&SftpATTRS.SSH_FILEXFER_ATTR_PERMISSIONS)==0)
                {
                    throw new SftpException(SSH_FX_FAILURE,
                                            "Can't change directory: "+path);
                }
                if(!attr.isDir())
                {
                    throw new SftpException(SSH_FX_FAILURE,
                                            "Can't change directory: "+path);
                }
                cwd=newpwd;
            }
            catch(Exception e)
            {
                if(e is SftpException) throw (SftpException)e;
                throw new SftpException(SSH_FX_FAILURE, "");
            }
        }
 public void request(Session session, Channel channel, String subsystem, bool want_reply)
 {
     this.subsystem=subsystem;
     this.want_reply=want_reply;
     this.request(session, channel);
 }
Пример #9
0
 public void setPortForwardingR(int rport, String host, int lport, SocketFactory sf)
 {
     ChannelForwardedTCPIP.addPort(this, rport, host, lport, sf);
     setPortForwarding(rport);
 }
Пример #10
0
 public void setPortForwardingR(int rport, String host, int lport)
 {
     setPortForwardingR(rport, host, lport, (SocketFactory)null);
 }
Пример #11
0
 public void setPortForwardingL(String boundaddress, int lport, String host, int rport, ServerSocketFactory ssf)
 {
     PortWatcher pw=PortWatcher.addPort(this, boundaddress, lport, host, rport, ssf);
     Thread tmp=new Thread(pw);
     tmp.setName("PortWatcher Thread for "+host);
     tmp.start();
 }
Пример #12
0
 public void setPortForwardingL(String boundaddress, int lport, String host, int rport)
 {
     setPortForwardingL(boundaddress, lport, host, rport, null);
 }
Пример #13
0
 public void setPortForwardingL(int lport, String host, int rport)
 {
     setPortForwardingL("127.0.0.1", lport, host,rport);
 }
Пример #14
0
 public void setPassword(String foo)
 {
     this.password=foo;
 }
Пример #15
0
 //public void start(){ (new Thread(this)).start();  }
 public Channel openChannel(String type)
 {
     if(!_isConnected)
     {
         throw new JSchException("session is down");
     }
     try
     {
         Channel channel=Channel.getChannel(type);
         addChannel(channel);
         channel.init();
         return channel;
     }
     catch(Exception e)
     {
         System.Console.WriteLine(e);
     }
     return null;
 }
Пример #16
0
        public void run()
        {
            thread=this;

            byte[] foo;
            Buffer buf=new Buffer();
            Packet packet=new Packet(buf);
            int i=0;
            Channel channel;
            int[] start=new int[1];
            int[] length=new int[1];
            KeyExchange kex=null;

            try
            {
                while(_isConnected &&
                    thread!=null)
                {
                    buf=read(buf);
                    int msgType=buf.buffer[5]&0xff;
                    //      if(msgType!=94)
                    //System.Console.WriteLine("read: 94 ? "+msgType);

                    if(kex!=null && kex.getState()==msgType)
                    {
                        bool result=kex.next(buf);
                        if(!result)
                        {
                            throw new JSchException("verify: "+result);
                        }
                        continue;
                    }

                    switch(msgType)
                    {
                        case SSH_MSG_KEXINIT:
                            //System.Console.WriteLine("KEXINIT");
                            kex=receive_kexinit(buf);
                            break;

                        case SSH_MSG_NEWKEYS:
                            //System.Console.WriteLine("NEWKEYS");
                            send_newkeys();
                            receive_newkeys(buf, kex);
                            kex=null;
                            break;

                        case SSH_MSG_CHANNEL_DATA:
                            buf.getInt();
                            buf.getByte();
                            buf.getByte();
                            i=buf.getInt();
                            channel=Channel.getChannel(i, this);
                            foo=buf.getString(start, length);
                            if(channel==null)
                            {
                                break;
                            }
                            try
                            {
                                channel.write(foo, start[0], length[0]);
                            }
                            catch(Exception e)
                            {
                                //System.Console.WriteLine(e);
                                try{channel.disconnect();}
                                catch(Exception ee){}
                                break;
                            }
                            int len=length[0];
                            channel.setLocalWindowSize(channel.lwsize-len);
                            if(channel.lwsize<channel.lwsize_max/2)
                            {
                                packet.reset();
                                buf.putByte((byte)SSH_MSG_CHANNEL_WINDOW_ADJUST);
                                buf.putInt(channel.getRecipient());
                                buf.putInt(channel.lwsize_max-channel.lwsize);
                                write(packet);
                                channel.setLocalWindowSize(channel.lwsize_max);
                            }
                            break;

                        case SSH_MSG_CHANNEL_EXTENDED_DATA:
                            buf.getInt();
                            buf.getShort();
                            i=buf.getInt();
                            channel=Channel.getChannel(i, this);
                            buf.getInt();                   // data_type_code == 1
                            foo=buf.getString(start, length);
                            //System.Console.WriteLine("stderr: "+new String(foo,start[0],length[0]));
                            if(channel==null)
                            {
                                break;
                            }
                            //channel.write(foo, start[0], length[0]);
                            channel.write_ext(foo, start[0], length[0]);

                            len=length[0];
                            channel.setLocalWindowSize(channel.lwsize-len);
                            if(channel.lwsize<channel.lwsize_max/2)
                            {
                                packet.reset();
                                buf.putByte((byte)SSH_MSG_CHANNEL_WINDOW_ADJUST);
                                buf.putInt(channel.getRecipient());
                                buf.putInt(channel.lwsize_max-channel.lwsize);
                                write(packet);
                                channel.setLocalWindowSize(channel.lwsize_max);
                            }
                            break;

                        case SSH_MSG_CHANNEL_WINDOW_ADJUST:
                            buf.getInt();
                            buf.getShort();
                            i=buf.getInt();
                            channel=Channel.getChannel(i, this);
                            if(channel==null)
                            {
                                break;
                            }
                            channel.addRemoteWindowSize(buf.getInt());
                            break;

                        case SSH_MSG_CHANNEL_EOF:
                            buf.getInt();
                            buf.getShort();
                            i=buf.getInt();
                            channel=Channel.getChannel(i, this);
                            if(channel!=null)
                            {
                                //channel._eof_remote=true;
                                //channel.eof();
                                channel.eof_remote();
                            }
                            /*
                            packet.reset();
                            buf.putByte((byte)SSH_MSG_CHANNEL_EOF);
                            buf.putInt(channel.getRecipient());
                            write(packet);
                            */
                            break;
                        case SSH_MSG_CHANNEL_CLOSE:
                            buf.getInt();
                            buf.getShort();
                            i=buf.getInt();
                            channel=Channel.getChannel(i, this);
                            if(channel!=null)
                            {
                                //	      channel.close();
                                channel.disconnect();
                            }
                            /*
                                if(Channel.pool.size()==0){
                              thread=null;
                            }
                            */
                            break;
                        case SSH_MSG_CHANNEL_OPEN_CONFIRMATION:
                            buf.getInt();
                            buf.getShort();
                            i=buf.getInt();
                            channel=Channel.getChannel(i, this);
                            if(channel==null)
                            {
                                //break;
                            }
                            channel.setRecipient(buf.getInt());
                            channel.setRemoteWindowSize(buf.getInt());
                            channel.setRemotePacketSize(buf.getInt());
                            break;
                        case SSH_MSG_CHANNEL_OPEN_FAILURE:
                            buf.getInt();
                            buf.getShort();
                            i=buf.getInt();
                            channel=Channel.getChannel(i, this);
                            if(channel==null)
                            {
                                //break;
                            }
                            int reason_code=buf.getInt();
                            //foo=buf.getString();  // additional textual information
                            //foo=buf.getString();  // language tag
                            channel.exitstatus=reason_code;
                            channel._close=true;
                            channel._eof_remote=true;
                            channel.setRecipient(0);
                            break;
                        case SSH_MSG_CHANNEL_REQUEST:
                            buf.getInt();
                            buf.getShort();
                            i=buf.getInt();
                            foo=buf.getString();
                            bool reply=(buf.getByte()!=0);
                            channel=Channel.getChannel(i, this);
                            if(channel!=null)
                            {
                                byte reply_type=(byte)SSH_MSG_CHANNEL_FAILURE;
                                if((new String(foo)).equals("exit-status"))
                                {
                                    i=buf.getInt();             // exit-status
                                    channel.setExitStatus(i);
                                    //	    System.Console.WriteLine("exit-stauts: "+i);
                                    //          channel.close();
                                    reply_type=(byte)SSH_MSG_CHANNEL_SUCCESS;
                                }
                                if(reply)
                                {
                                    packet.reset();
                                    buf.putByte(reply_type);
                                    buf.putInt(channel.getRecipient());
                                    write(packet);
                                }
                            }
                            else
                            {
                            }
                            break;
                        case SSH_MSG_CHANNEL_OPEN:
                            buf.getInt();
                            buf.getShort();
                            foo=buf.getString();
                            String ctyp=new String(foo);
                            //System.Console.WriteLine("type="+ctyp);
                            if(!new String("forwarded-tcpip").equals(ctyp) &&
                                !(new String("x11").equals(ctyp) && x11_forwarding))
                            {
                                System.Console.WriteLine("Session.run: CHANNEL OPEN "+ctyp);
                                throw new IOException("Session.run: CHANNEL OPEN "+ctyp);
                            }
                            else
                            {
                                channel=Channel.getChannel(ctyp);
                                addChannel(channel);
                                channel.getData(buf);
                                channel.init();

                                packet.reset();
                                buf.putByte((byte)SSH_MSG_CHANNEL_OPEN_CONFIRMATION);
                                buf.putInt(channel.getRecipient());
                                buf.putInt(channel.id);
                                buf.putInt(channel.lwsize);
                                buf.putInt(channel.lmpsize);
                                write(packet);
                                Thread tmp=new Thread(channel);
                                tmp.setName("Channel "+ctyp+" "+host);
                                tmp.start();
                                break;
                            }
                        case SSH_MSG_CHANNEL_SUCCESS:
                            buf.getInt();
                            buf.getShort();
                            i=buf.getInt();
                            channel=Channel.getChannel(i, this);
                            if(channel==null)
                            {
                                break;
                            }
                            channel.reply=1;
                            break;
                        case SSH_MSG_CHANNEL_FAILURE:
                            buf.getInt();
                            buf.getShort();
                            i=buf.getInt();
                            channel=Channel.getChannel(i, this);
                            if(channel==null)
                            {
                                break;
                            }
                            channel.reply=0;
                            break;
                        case SSH_MSG_GLOBAL_REQUEST:
                            buf.getInt();
                            buf.getShort();
                            foo=buf.getString();       // request name
                            reply=(buf.getByte()!=0);
                            if(reply)
                            {
                                packet.reset();
                                buf.putByte((byte)SSH_MSG_REQUEST_FAILURE);
                                write(packet);
                            }
                            break;
                        case SSH_MSG_REQUEST_FAILURE:
                        case SSH_MSG_REQUEST_SUCCESS:
                            Thread t=grr.getThread();
                            if(t!=null)
                            {
                                grr.setReply(msgType==SSH_MSG_REQUEST_SUCCESS? 1 : 0);
                                t.interrupt();
                            }
                            break;
                        default:
                            System.Console.WriteLine("Session.run: unsupported type "+msgType);
                            throw new IOException("Unknown SSH message type "+msgType);
                    }
                }
            }
            catch(Exception e)
            {
                //System.Console.WriteLine("# Session.run");
                //e.printStackTrace();
            }
            try
            {
                disconnect();
            }
            catch(NullReferenceException e)
            {
                //System.Console.WriteLine("@1");
                //e.printStackTrace();
            }
            catch(Exception e)
            {
                //System.Console.WriteLine("@2");
                //e.printStackTrace();
            }
            _isConnected=false;
        }
Пример #17
0
 public void setPortForwardingR(int rport, String daemon)
 {
     setPortForwardingR(rport, daemon, null);
 }
Пример #18
0
        public override bool start(Session session)
        {
            base.start(session);
            //System.out.println("UserAuthNone: start");
            Packet packet=session.packet;
            Buffer buf=session.buf;
            String username=session.username;

            byte[] _username=null;
            try{ _username=Util.getBytesUTF8(username); }
            catch
            {//(java.io.UnsupportedEncodingException e){
                _username=Util.getBytes(username);
            }

            // send
            // byte      SSH_MSG_USERAUTH_REQUEST(50)
            // string    user name
            // string    service name ("ssh-connection")
            // string    "none"
            packet.reset();
            buf.putByte((byte)Session.SSH_MSG_USERAUTH_REQUEST);
            buf.putString(_username);
            buf.putString(Util.getBytes("ssh-connection"));
            buf.putString(Util.getBytes("none"));
            session.write(packet);

            loop:
                while(true)
                {
                    // receive
                    // byte      SSH_MSG_USERAUTH_SUCCESS(52)
                    // string    service name
                    buf=session.read(buf);
                    //System.out.println("UserAuthNone: read: 52 ? "+    buf.buffer[5]);
                    if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_SUCCESS)
                    {
                        return true;
                    }
                    if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_BANNER)
                    {
                        buf.getInt(); buf.getByte(); buf.getByte();
                        byte[] _message=buf.getString();
                        byte[] lang=buf.getString();
                        String message=null;
                        try{ message=Util.getStringUTF8(_message); }
                        catch
                        {//(java.io.UnsupportedEncodingException e){
                            message=Util.getString(_message);
                        }
                        if(userinfo!=null)
                        {
                            userinfo.showMessage(message);
                        }
                        goto loop;
                    }
                    if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_FAILURE)
                    {
                        buf.getInt(); buf.getByte(); buf.getByte();
                        byte[] foo=buf.getString();
                        int partial_success=buf.getByte();
                        methods=Util.getString(foo);
                        //System.out.println("UserAuthNONE: "+methods+
                        //		   " partial_success:"+(partial_success!=0));
                        //	if(partial_success!=0){
                        //	  throw new JSchPartialAuthException(new String(foo));
                        //	}
                        break;
                    }
                    else
                    {
                        //      System.out.println("USERAUTH fail ("+buf.buffer[5]+")");
                        throw new JSchException("USERAUTH fail ("+buf.buffer[5]+")");
                    }
                }
            //throw new JSchException("USERAUTH fail");
            return false;
        }
Пример #19
0
 public void setPortForwardingR(int rport, String daemon, System.Object[] arg)
 {
     ChannelForwardedTCPIP.addPort(this, rport, daemon, arg);
     setPortForwarding(rport);
 }
Пример #20
0
        public void chown(int uid, String path)
        {
            //throws SftpException{
            try
            {
                path=remoteAbsolutePath(path);

                Vector v=glob_remote(path);
                int vsize=v.size();
                for(int j=0; j<vsize; j++)
                {
                    path=(String)(v.elementAt(j));

                    SftpATTRS attr=_stat(path);

                    attr.setFLAGS(0);
                    attr.setUIDGID(uid, attr.gid);
                    _setStat(path, attr);
                }
            }
            catch(Exception e)
            {
                if(e is SftpException) throw (SftpException)e;
                throw new SftpException(SSH_FX_FAILURE, "");
            }
        }
Пример #21
0
 public void setX11Cookie(String cookie)
 {
     ChannelX11.setCookie(cookie);
 }
Пример #22
0
 public void setX11Host(String host)
 {
     ChannelX11.setHost(host);
 }
Пример #23
0
 internal void setUserName(String foo)
 {
     this.username=foo;
 }
Пример #24
0
        public void connect(SocketFactory socket_factory, String host, int port, int timeout)
        {
            try
            {
                if(socket_factory==null)
                {
                    socket=Util.createSocket(proxy_host, proxy_port, timeout);
                    ins= new JStream(socket.getInputStream());
                    outs=new JStream(socket.getOutputStream());
                }
                else
                {
                    socket=socket_factory.createSocket(proxy_host, proxy_port);
                    ins=new JStream(socket_factory.getInputStream(socket));
                    outs=new JStream(socket_factory.getOutputStream(socket));
                }
                if(timeout>0)
                {
                    socket.setSoTimeout(timeout);
                }
                socket.setTcpNoDelay(true);

                outs.write(new String("CONNECT "+host+":"+port+" HTTP/1.0\r\n").getBytes());

                if(user!=null && passwd!=null)
                {
                    byte[] _code=(user+":"+passwd).getBytes();
                    _code=Util.toBase64(_code, 0, _code.Length);
                    outs.write(new String("Proxy-Authorization: Basic ").getBytes());
                    outs.write(_code);
                    outs.write(new String("\r\n").getBytes());
                }

                outs.write(new String("\r\n").getBytes());
                outs.flush();

                int foo=0;

                StringBuffer sb=new StringBuffer();
                while(foo>=0)
                {
                    foo=ins.read(); if(foo!=13){sb.append((char)foo);  continue;}
                    foo=ins.read(); if(foo!=10){continue;}
                    break;
                }
                if(foo<0)
                {
                    throw new System.IO.IOException();
                }

                String response=sb.toString();
                String reason="Unknow reason";
                int code=-1;
                try
                {
                    foo=response.indexOf(' ');
                    int bar=response.indexOf(' ', foo+1);
                    code=Integer.parseInt(response.substring(foo+1, bar));
                    reason=response.substring(bar+1);
                }
                catch(Exception e)
                {
                }
                if(code!=200)
                {
                    throw new System.IO.IOException("proxy error: "+reason);
                }

                /*
                while(foo>=0){
                  foo=in.read(); if(foo!=13) continue;
                  foo=in.read(); if(foo!=10) continue;
                  foo=in.read(); if(foo!=13) continue;
                  foo=in.read(); if(foo!=10) continue;
                  break;
                }
                */

                int count=0;
                while(true)
                {
                    count=0;
                    while(foo>=0)
                    {
                        foo=ins.read(); if(foo!=13){count++;  continue;}
                        foo=ins.read(); if(foo!=10){continue;}
                        break;
                    }
                    if(foo<0)
                    {
                        throw new System.IO.IOException();
                    }
                    if(count==0)break;
                }
            }
            catch(RuntimeException e)
            {
                throw e;
            }
            catch(Exception e)
            {
                try{ if(socket!=null)socket.close(); }
                catch(Exception eee)
                {
                }
                String message="ProxyHTTP: "+e.toString();
                throw e;
            }
        }
Пример #25
0
 public void setClientVersion(String cv)
 {
     V_C=cv.getBytes();
 }