ื›ืชื™ื‘ืช ืชื•ื›ื ื” ืขื ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื›ืœื™ ืขื–ืจ ืฉืœ Windows ืœืงื•ื—-ืฉืจืช, ื—ืœืง 01

ะŸั€ะธะฒะตั‚ัั‚ะฒัƒัŽ.

ื”ื™ื•ื ื‘ืจืฆื•ื ื™ ืœื”ืกืชื›ืœ ืขืœ ืชื”ืœื™ืš ื›ืชื™ื‘ืช ื™ื™ืฉื•ืžื™ ืฉืจืช-ืœืงื•ื— ื”ืžื‘ืฆืขื™ื ืืช ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ื›ืœื™ ืขื–ืจ ืกื˜ื ื“ืจื˜ื™ื™ื ืฉืœ Windows, ื›ื’ื•ืŸ Telnet, TFTP ื•ื›ื•' ื•ื›ื•' ื‘-Java ื˜ื”ื•ืจ. ื‘ืจื•ืจ ืฉืœื ืื‘ื™ื ืฉื•ื ื“ื‘ืจ ื—ื“ืฉ - ื›ืœ ื”ืฉื™ืจื•ืชื™ื ื”ืืœื” ืขื•ื‘ื“ื™ื ื‘ื”ืฆืœื—ื” ื›ื‘ืจ ื™ื•ืชืจ ืžืฉื ื”, ืื‘ืœ ืื ื™ ืžืืžื™ืŸ ืฉืœื ื›ื•ืœื ื™ื•ื“ืขื™ื ืžื” ืงื•ืจื” ืžืชื—ืช ืœืžื›ืกื” ื”ืžื ื•ืข.

ื–ื” ื‘ื“ื™ื•ืง ืžื” ืฉื ื“ื•ืŸ ืชื—ืช ื”ืงื™ืฆื•ืฅ.

ื‘ืžืืžืจ ื–ื”, ื›ื“ื™ ืœื ืœื’ืจื•ืจ ืืช ื–ื”, ื‘ื ื•ืกืฃ ืœืžื™ื“ืข ื›ืœืœื™, ืื›ืชื•ื‘ ืจืง ืขืœ ืฉืจืช Telnet, ืื‘ืœ ื›ืจื’ืข ื™ืฉ ื’ื ื—ื•ืžืจ ืขืœ ื›ืœื™ ืขื–ืจ ืื—ืจื™ื - ื–ื” ื™ื”ื™ื” ื‘ื—ืœืงื™ื ื ื•ืกืคื™ื ืฉืœ ื”ืกื“ืจื”.

ืงื•ื“ื ื›ืœ, ืืชื” ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืžื” ื–ื” Telnet, ืœืžื” ื–ื” ื ื—ื•ืฅ ื•ืœืžื” ื”ื•ื ืžืฉืžืฉ. ืœื ืืฆื˜ื˜ ืžืงื•ืจื•ืช ืžื™ืœื•ืœื™ืช (ื‘ืžื™ื“ืช ื”ืฆื•ืจืš ืืฆืจืฃ ื‘ืกื•ืฃ ื”ืžืืžืจ ืงื™ืฉื•ืจ ืœื—ื•ืžืจื™ื ื‘ื ื•ืฉื), ืจืง ืื’ื™ื“ ืฉื˜ืœื ื˜ ืžืกืคืงืช ื’ื™ืฉื” ืžืจื—ื•ืง ืœืฉื•ืจืช ื”ืคืงื•ื“ื” ืฉืœ ื”ืžื›ืฉื™ืจ. ื‘ื’ื“ื•ืœ, ื›ืืŸ ืžืกืชื™ื™ืžืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœื• (ืฉืชืงืชื™ ื‘ื›ื•ื•ื ื” ืœื’ื‘ื™ ื”ื’ื™ืฉื” ืœื™ืฆื™ืืช ื”ืฉืจืช; ืขืœ ื›ืš ื‘ื”ืžืฉืš). ื–ื” ืื•ืžืจ ืฉื›ื“ื™ ืœื™ื™ืฉื ืืช ื–ื”, ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืงื‘ืœ ืฉื•ืจื” ื‘ืœืงื•ื—, ืœื”ืขื‘ื™ืจ ืื•ืชื” ืœืฉืจืช, ืœื ืกื•ืช ืœื”ืขื‘ื™ืจ ืื•ืชื” ืœืฉื•ืจืช ื”ืคืงื•ื“ื”, ืœืงืจื•ื ืืช ืชื’ื•ื‘ืช ืฉื•ืจืช ื”ืคืงื•ื“ื”, ืื ื™ืฉ ื›ื–ื•, ืœื”ืขื‘ื™ืจ ืื•ืชื” ื‘ื—ื–ืจื” ืœืœืงื•ื— ื• ื”ืฆื’ ืื•ืชื• ืขืœ ื”ืžืกืš, ืื•, ืื ื™ืฉ ืฉื’ื™ืื•ืช, ื™ื™ื“ืข ืืช ื”ืžืฉืชืžืฉ ืฉืžืฉื”ื• ืœื ื‘ืกื“ืจ.

ื›ื“ื™ ืœื™ื™ืฉื ืืช ื”ืืžื•ืจ ืœืขื™ืœ, ื‘ื”ืชืื, ืื ื• ื–ืงื•ืงื™ื ืœ-2 ืžื—ืœืงื•ืช ืขื‘ื•ื“ื” ื•ืžื—ืœืงืช ื‘ื“ื™ืงื” ื›ืœืฉื”ื™ ืฉืžืžื ื” ื ืฉื™ืง ืืช ื”ืฉืจืช ื•ื“ืจื›ื” ื™ืขื‘ื•ื“ ื”ืœืงื•ื—.
ื‘ื”ืชืื, ื ื›ื•ืŸ ืœืขื›ืฉื™ื• ืžื‘ื ื” ื”ื‘ืงืฉื” ื›ื•ืœืœ:

  • TelnetClient
  • TelnetClientTester
  • TelnetServer
  • TelnetServerTester

ื‘ื•ืื• ื ืขื‘ื•ืจ ืขืœ ื›ืœ ืื—ื“ ืžื”ื:

TelnetClient

ื›ืœ ืžื” ืฉื”ื›ื™ืชื” ื”ื–ื• ืืžื•ืจื” ืœื”ื™ื•ืช ืžืกื•ื’ืœืช ืœืขืฉื•ืช ื”ื•ื ืœืฉืœื•ื— ืคืงื•ื“ื•ืช ืฉื”ืชืงื‘ืœื• ื•ืœื”ืจืื•ืช ืืช ื”ืชื’ื•ื‘ื•ืช ืฉื”ืชืงื‘ืœื•. ื‘ื ื•ืกืฃ, ืืชื” ืฆืจื™ืš ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ืชื—ื‘ืจ ืœื™ืฆื™ืื” ืฉืจื™ืจื•ืชื™ืช (ื›ืคื™ ืฉื”ื•ื–ื›ืจ ืœืขื™ืœ) ืฉืœ ืžื›ืฉื™ืจ ืžืจื•ื—ืง ื•ืœื”ืชื ืชืง ืžืžื ื•.

ื›ื“ื™ ืœื”ืฉื™ื’ ื–ืืช, ื™ื•ืฉืžื• ื”ืคื•ื ืงืฆื™ื•ืช ื”ื‘ืื•ืช:

ืคื•ื ืงืฆื™ื” ืฉืœื•ืงื—ืช ื›ืชื•ื‘ืช socket ื›ืืจื’ื•ืžื ื˜, ืคื•ืชื—ืช ื—ื™ื‘ื•ืจ ื•ืžืชื—ื™ืœื” ื–ืจืžื™ ืงืœื˜ ื•ืคืœื˜ (ืžืฉืชื ื™ ื–ืจื ืžื•ืฆื”ืจื™ื ืœืžืขืœื”, ืžืงื•ืจื•ืช ืžืœืื™ื ื ืžืฆืื™ื ื‘ืกื•ืฃ ื”ืžืืžืจ).

 public void run(String ip, int port)
    {
        try {
            Socket socket = new Socket(ip, port);
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
            Scanner keyboard = new Scanner(System.in);
            reader = new Thread(()->read(keyboard, sout));
            writer = new Thread(()->write(sin));
            reader.start();
            writer.start();
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

ืขื•ืžืก ื™ืชืจ ืขืœ ืื•ืชื” ืคื•ื ืงืฆื™ื”, ื—ื™ื‘ื•ืจ ืœื™ืฆื™ืืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ - ืขื‘ื•ืจ telnet ื–ื” 23


    public void run(String ip)
    {
        run(ip, 23);
    }

ื”ืคื•ื ืงืฆื™ื” ืงื•ืจืืช ืชื•ื•ื™ื ืžื”ืžืงืœื“ืช ื•ืฉื•ืœื—ืช ืื•ืชื ืœืฉืงืข ื”ืคืœื˜ - ื•ื–ื” ืื•ืคื™ื™ื ื™, ื‘ืžืฆื‘ ืงื•, ืœื ื‘ืžืฆื‘ ืชื•ื•ื™ื:


    private void read(Scanner keyboard, OutputStream sout)
    {
        try {
            String input = new String();
            while (true) {
                input = keyboard.nextLine();
                for (char i : (input + " n").toCharArray())
                    sout.write(i);
            }
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

ื”ืคื•ื ืงืฆื™ื” ืงื•ืœื˜ืช ื ืชื•ื ื™ื ืžื”ืฉืงืข ื•ืžืฆื™ื’ื” ืื•ืชื ืขืœ ื”ืžืกืš


    private void write(InputStream sin)
    {
        try {
            int tmp;
            while (true){
                tmp = sin.read();
                System.out.print((char)tmp);
            }
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

ื”ืคื•ื ืงืฆื™ื” ืžืคืกื™ืงื” ืงืœื™ื˜ืช ื ืชื•ื ื™ื ื•ืฉื™ื“ื•ืจ


    public void stop()
    {
        reader.stop();
        writer.stop();
    }
}

TelnetServer

ืžื—ืœืงื” ื–ื• ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ื‘ืขืœืช ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ืงื‘ืœืช ืคืงื•ื“ื” ืžืฉืงืข, ืฉืœื™ื—ืชื” ืœื‘ื™ืฆื•ืข ื•ืฉืœื™ื—ืช ืชื’ื•ื‘ื” ืžื”ืคืงื•ื“ื” ื—ื–ืจื” ืืœ ื”ืฉืงืข. ื”ืชื•ื›ื ื™ืช ืœื ื‘ื•ื“ืงืช ื‘ื›ื•ื•ื ื” ืืช ื ืชื•ื ื™ ื”ืงืœื˜, ื›ื™ ืจืืฉื™ืช, ืืคื™ืœื• ื‘-"boxed telnet" ื ื™ืชืŸ ืœืคืจืžื˜ ืืช ื“ื™ืกืง ื”ืฉืจืช, ื•ืฉื ื™ืช, ื ื•ืฉื ื”ืื‘ื˜ื—ื” ื‘ืžืืžืจ ื–ื” ื ืฉืžื˜ ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ื•ื–ื• ื”ืกื™ื‘ื” ืฉืื™ืŸ ืžื™ืœื” ืขืœ ื”ืฆืคื ื” ืื• SSL.

ื™ืฉ ืจืง 2 ืคื•ื ืงืฆื™ื•ืช (ืื—ืช ืžื”ืŸ ืขืžื•ืกื” ื™ืชืจ ืขืœ ื”ืžื™ื“ื”), ื•ื‘ืื•ืคืŸ ื›ืœืœื™ ื–ื” ืœื ืชืจื’ื•ืœ ื˜ื•ื‘ ื‘ืžื™ื•ื—ื“, ืื‘ืœ ืœืžื˜ืจื•ืช ื”ืžืฉื™ืžื” ื”ื–ื•, ื ืจืื” ืœื™ ืžืชืื™ื ืœื”ืฉืื™ืจ ื”ื›ืœ ื›ืžื• ืฉื”ื•ื.

 boolean isRunning = true;
    public void run(int port)    {

        (new Thread(()->{ try {
            ServerSocket ss = new ServerSocket(port); // ัะพะทะดะฐะตะผ ัะพะบะตั‚ ัะตั€ะฒะตั€ะฐ ะธ ะฟั€ะธะฒัะทั‹ะฒะฐะตะผ ะตะณะพ ะบ ะฒั‹ัˆะตัƒะบะฐะทะฐะฝะฝะพะผัƒ ะฟะพั€ั‚ัƒ
            System.out.println("Port "+port+" is waiting for connections");

            Socket socket = ss.accept();
            System.out.println("Connected");
            System.out.println();

            // ะ‘ะตั€ะตะผ ะฒั…ะพะดะฝะพะน ะธ ะฒั‹ั…ะพะดะฝะพะน ะฟะพั‚ะพะบะธ ัะพะบะตั‚ะฐ, ั‚ะตะฟะตั€ัŒ ะผะพะถะตะผ ะฟะพะปัƒั‡ะฐั‚ัŒ ะธ ะพั‚ัั‹ะปะฐั‚ัŒ ะดะฐะฝะฝั‹ะต ะบะปะธะตะฝั‚ัƒ.
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();

            Map<String, String> env = System.getenv();
            String wayToTemp = env.get("TEMP") + "tmp.txt";
            for (int i :("Connectednnr".toCharArray()))
                sout.write(i);
            sout.flush();

            String buffer = new String();
            while (isRunning) {

                int intReader = 0;
                while ((char) intReader != 'n') {
                    intReader = sin.read();
                    buffer += (char) intReader;
                }


                final String inputToSubThread = "cmd /c " + buffer.substring(0, buffer.length()-2) + " 2>&1";


                new Thread(()-> {
                    try {

                        Process p = Runtime.getRuntime().exec(inputToSubThread);
                        InputStream out = p.getInputStream();
                        Scanner fromProcess = new Scanner(out);
                        try {

                            while (fromProcess.hasNextLine()) {
                                String temp = fromProcess.nextLine();
                                System.out.println(temp);
                                for (char i : temp.toCharArray())
                                    sout.write(i);
                                sout.write('n');
                                sout.write('r');
                            }
                        }
                        catch (Exception e) {
                            String output = "Something gets wrong... Err code: "+ e.getStackTrace();
                            System.out.println(output);
                            for (char i : output.toCharArray())
                                sout.write(i);
                            sout.write('n');
                            sout.write('r');
                        }

                        p.getErrorStream().close();
                        p.getOutputStream().close();
                        p.getInputStream().close();
                        sout.flush();

                    }
                    catch (Exception e) {
                        System.out.println("Error: " + e.getMessage());
                    }
                }).start();
                System.out.println(buffer);
                buffer = "";

            }
        }
        catch(Exception x) {
            System.out.println(x.getMessage());
        }})).start();

    }

ื”ืชื•ื›ื ื™ืช ืคื•ืชื—ืช ืืช ื™ืฆื™ืืช ื”ืฉืจืช, ืงื•ืจืืช ืžืžื ื• ื ืชื•ื ื™ื ืขื“ ืฉื”ื™ื ื ืชืงืœืช ื‘ืชื• ืกื™ื•ื ืคืงื•ื“ื”, ืžืขื‘ื™ืจื” ืืช ื”ืคืงื•ื“ื” ืœืชื”ืœื™ืš ื—ื“ืฉ ื•ืžื ืชื‘ืช ืžื—ื“ืฉ ืืช ื”ืคืœื˜ ืžื”ืชื”ืœื™ืš ืœืฉืงืข. ื”ื›ืœ ืคืฉื•ื˜ ื›ืžื• ืจื•ื‘ื” ืกืขืจ ืงืœืฆ'ื ื™ืงื•ื‘.

ื‘ื”ืชืื ืœื›ืš, ื™ืฉ ืขื•ืžืก ื™ืชืจ ืขื‘ื•ืจ ืคื•ื ืงืฆื™ื” ื–ื• ืขื ื™ืฆื™ืืช ื‘ืจื™ืจืช ืžื—ื“ืœ:

 public void run()
    {
        run(23);
    }

ื•ื‘ื›ืŸ, ื‘ื”ืชืื, ื”ืคื•ื ืงืฆื™ื” ืฉืขื•ืฆืจืช ืืช ื”ืฉืจืช ื”ื™ื ื’ื ื˜ืจื™ื•ื•ื™ืืœื™ืช, ื”ื™ื ืงื•ื˜ืขืช ืืช ื”ืœื•ืœืื” ื”ื ืฆื—ื™ืช ื•ืžืคืจื” ืืช ืžืฆื‘ื”.

    public void stop()
    {
        System.out.println("Server was stopped");
        this.isRunning = false;
    }

ืื ื™ ืœื ืืชืŸ ื›ืืŸ ืฉื™ืขื•ืจื™ ืžื‘ื—ืŸ, ื”ื ืœืžื˜ื” - ื›ืœ ืžื” ืฉื”ื ืขื•ืฉื™ื ื–ื” ืœื‘ื“ื•ืง ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ืฉื™ื˜ื•ืช ืฆื™ื‘ื•ืจื™ื•ืช. ื”ื›ืœ ื ืžืฆื ื‘-Git.

ืœืกื™ื›ื•ื, ื‘ืขื•ื“ ื›ืžื” ืขืจื‘ื™ื ืืชื” ื™ื›ื•ืœ ืœื”ื‘ื™ืŸ ืืช ืขืงืจื•ื ื•ืช ื”ืคืขื•ืœื” ืฉืœ ื›ืœื™ ื”ืขื–ืจ ื”ืขื™ืงืจื™ื™ื ืฉืœ ื”ืงื•ื ืกื•ืœื”. ืขื›ืฉื™ื•, ื›ืฉืื ื—ื ื• ื˜ืœื ื˜ื™ื ืœืžื—ืฉื‘ ืžืจื•ื—ืง, ืื ื—ื ื• ืžื‘ื™ื ื™ื ืžื” ืงื•ืจื” - ื”ืงืกื ื ืขืœื)

ืื– ื”ืงื™ืฉื•ืจื™ื:
ื›ืœ ื”ืžืงื•ืจื•ืช ื”ื™ื•, ื ืžืฆืื™ื ื•ื™ื”ื™ื• ื›ืืŸ
ืœื’ื‘ื™ Telnet
ืขื•ื“ ืขืœ Telnet

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”