ืฉืจื™ื™ื‘ืŸ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืžื™ื˜ ื“ื™ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืคื•ืŸ Windows ืงืœื™ืขื ื˜-ืกืขืจื•ื•ืขืจ ื™ื•ื˜ื™ืœืึทื˜ื™ื–, ื˜ื™ื™ืœ 01

ื’ืจืขืขื˜ื™ื ื’ืก.

ื”ื™ื™ึทื ื˜ ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ืงื•ืงืŸ ืื™ืŸ ื“ืขื ืคึผืจืึธืฆืขืก ืคื•ืŸ ืฉืจื™ื™ื‘ืŸ ืงืœื™ืขื ื˜-ืกืขืจื•ื•ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื•ื•ืึธืก ื“ื•ืจื›ืคื™ืจืŸ ื“ื™ ืคืึทื ื’ืงืฉืึทื ื– ืคื•ืŸ ื ืึธืจืžืึทืœ Windows ื™ื•ื˜ื™ืœืึทื˜ื™ื–, ืึทื–ืึท ื•ื•ื™ ื˜ืขืœื ืขื˜, ื˜ืคื˜ืคึผ, ืขื˜ืง, ืืื–"ื• ื• ืื™ืŸ ืจื™ื™ืŸ ื–'ืื‘ื. ืขืก ืื™ื– ืงืœืึธืจ ืึทื– ืื™ืš ื•ื•ืขืœ ื ื™ืฉื˜ ื‘ืจืขื ื’ืขืŸ ืขืคึผืขืก ื ื™ื™ึท - ืึทืœืข ื“ื™ ื™ื•ื˜ื™ืœืึทื˜ื™ื– ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืืจื‘ืขื˜ืŸ ื”ืฆืœื—ื” ืคึฟืึทืจ ืžืขืจ ื•ื•ื™ ืื™ื™ืŸ ื™ืึธืจ, ืึธื‘ืขืจ ืื™ืš ื’ืœื•ื™ื‘ืŸ ืึทื– ื ื™ื˜ ืึทืœืขืžืขืŸ ื•ื•ื™ื™ืกื˜ ื•ื•ืึธืก ืื™ื– ื’ืขืฉืขืขื ื™ืฉ ืื•ื ื˜ืขืจ ื“ื™ ืงืึทืคึผื˜ืขืจ.

ื“ืึธืก ืื™ื– ืคึผื•ื ืงื˜ ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ืกืงืึทืกื˜ ืื•ื ื˜ืขืจ ื“ื™ ืฉื ื™ื™ึทื“ืŸ.

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ื›ึผื“ื™ ืขืก ื ื™ืฉื˜ ืฆื• ืฉืœืขืคึผืŸ, ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ืึทืœื’ืขืžื™ื™ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข, ืื™ืš ื•ื•ืขื˜ ืฉืจื™ื™ึทื‘ืŸ ื‘ืœื•ื™ื– ื•ื•ืขื’ืŸ ื“ื™ ื˜ืขืœื ืขื˜ ืกืขืจื•ื•ืขืจ, ืึธื‘ืขืจ ื“ืขืจื•ื•ื™ื™ึทืœ ืขืก ืื™ื– ืื•ื™ืš ืžืึทื˜ืขืจื™ืึทืœ ืื•ื™ืฃ ืื ื“ืขืจืข ื™ื•ื˜ื™ืœืึทื˜ื™ื– - ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื™ืŸ ื•ื•ื™ื™ึทื˜ืขืจ ื˜ื™ื™ืœืŸ ืคื•ืŸ ื“ืขืจ ืกืขืจื™ืข.

ืขืจืฉื˜ืขืจ ืคื•ืŸ ืึทืœืข, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืจืขื›ืขื ืขืŸ ื•ื•ืึธืก ื˜ืขืœื ืขื˜ ืื™ื–, ื•ื•ืึธืก ืขืก ืื™ื– ื“ืืจืฃ ืคึฟืึทืจ ืื•ืŸ ื•ื•ืึธืก ืขืก ืื™ื– ื’ืขื ื™ืฆื˜ ืคึฟืึทืจ. ืื™ืš ื•ื•ืขืœ ื ื™ืฉื˜ ืฆื™ื˜ื™ืจืŸ ืžืงื•ืจื™ื ื•ื•ืขืจื‘ืึทื˜ื™ื (ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ืื™ืš ื•ื•ืขืœ ืฆื•ื˜ืฉืขืคึผืขืŸ ืึท ืœื™ื ืง ืฆื• ืžืึทื˜ืขืจื™ืึทืœืก ืื•ื™ืฃ ื“ืขืจ ื˜ืขืžืข ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ), ืื™ืš ื•ื•ืขืœ ื ืึธืจ ื–ืึธื’ืŸ ืึทื– ื˜ืขืœื ืขื˜ ื’ื™ื˜ ื•ื•ื™ื™ึทื˜ ืึทืงืกืขืก ืฆื• ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ืคื•ืŸ ื“ื™ ืžื™ื˜ืœ. ื“ื•ืจืš ืื•ืŸ ื’ืจื•ื™ืก, ื“ืึธืก ืื™ื– ื•ื•ื• ื“ื™ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืขื ื“ืก (ืื™ืš ื“ื™ืœื™ื‘ืจืึทื˜ืœื™ ื’ืขื”ืืœื˜ืŸ ืฉื˜ื™ืœ ื•ื•ืขื’ืŸ ืึทืงืกืขืก ื“ื™ ืกืขืจื•ื•ืขืจ ืคึผืึธืจื˜; ืžืขืจ ื•ื•ืขื’ืŸ ื“ืขื ืฉืคึผืขื˜ืขืจ). ื“ืขื ืžื™ื˜ืœ ืึทื– ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืขืก, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธื ื ืขืžืขืŸ ืึท ืฉื•ืจื” ืื•ื™ืฃ ื“ืขื ืงืœื™ืขื ื˜, ืคืึธืจืŸ ืขืก ืฆื• ื“ื™ ืกืขืจื•ื•ืขืจ, ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืคืึธืจืŸ ืขืก ืฆื• ื“ื™ ื‘ืึทืคึฟืขืœ ืฉื•ืจื”, ืœื™ื™ืขื ืขืŸ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ืขื ื˜ืคืขืจ, ืื•ื™ื‘ ืขืก ืื™ื– ืื™ื™ืŸ, ืคืึธืจืŸ ืขืก ืฆื•ืจื™ืง ืฆื• ื“ืขืจ ืงืœื™ืขื ื˜ ืื•ืŸ ื•ื•ื™ื™ึทื–ืŸ ืขืก ืื•ื™ืฃ ื“ืขื ืขืงืจืึทืŸ, ืึธื“ืขืจ, ืื•ื™ื‘ ืขืจืจืึธืจืก, ืœืึธื–ืŸ ื“ื™ ื‘ืึทื ื™ืฆืขืจ ื•ื•ื™ืกืŸ ืึทื– ืขืคึผืขืก ืื™ื– ืคืึทืœืฉ.

ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ื™ ืื•ื™ื‘ืŸ, ืึทืงืึธืจื“ื™ื ื’ืœื™, ืžื™ืจ ื“ืึทืจืคึฟืŸ 2 ืืจื‘ืขื˜ืŸ ืงืœืืกืŸ ืื•ืŸ ืขื˜ืœืขื›ืข ืคึผืจื•ื‘ื™ืจืŸ ืงืœืึทืก ืคื•ืŸ ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ืงืึทื˜ืขืจ ื“ื™ ืกืขืจื•ื•ืขืจ ืื•ืŸ ื“ื•ืจืš ื•ื•ืึธืก ื“ืขืจ ืงืœื™ืขื ื˜ ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ.
ื“ืขืจื•ื•ื™ื™ึทืœ, ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกื˜ืจื•ืงื˜ื•ืจ ื›ื•ืœืœ:

  • TelnetClient
  • TelnetClientTester
  • TelnetServer
  • TelnetServerTester

ืœืึธืžื™ืจ ื’ื™ื™ืŸ ื“ื•ืจืš ื™ืขื“ืขืจ ืคื•ืŸ ื–ื™ื™:

TelnetClient

ืึทืœืข ื“ืขื ืงืœืึทืก ื–ืึธืœ ืงืขื ืขืŸ ืฆื• ื˜ืึธืŸ ืื™ื– ืฉื™ืงืŸ ื‘ืืงื•ืžืขืŸ ืงืึทืžืึทื ื“ื– ืื•ืŸ ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ื‘ืืงื•ืžืขืŸ ืจืขืกืคึผืึธื ืกืขืก. ืื™ืŸ ื“ืขืจืฆื•, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืงืขื ืขืŸ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ืึท ืึทืจื‘ื™ื˜ืจืึทืจื™ืฉ (ื•ื•ื™ ื“ืขืจืžืื ื˜ ืื•ื™ื‘ืŸ) ืคึผืึธืจื˜ ืคื•ืŸ ืึท ื•ื•ื™ื™ึทื˜ ืžื™ื˜ืœ ืื•ืŸ ื“ื™ืกืงืึทื ืขืงื˜ ื“ืขืจืคื•ืŸ.

ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ื“ืขื, ื“ื™ ืคืืœื’ืขื ื“ืข ืคืึทื ื’ืงืฉืึทื ื– ื–ืขื ืขืŸ ื™ืžืคึผืœืึทืžืขื ืึทื“:

ื ืคึฟื•ื ืงืฆื™ืข ื•ื•ืึธืก ื ืขืžื˜ ืึท ื›ืึธืœืขืœ ืึทื“ืจืขืก ื•ื•ื™ ืึทืŸ ืึทืจื’ื•ืžืขื ื˜, ืึธืคึผืขื ืก ืึท ืงืฉืจ ืื•ืŸ ืกื˜ืึทืจืฅ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜ ืกื˜ืจื™ืžื– (ืกื˜ืจื™ื ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื–ืขื ืขืŸ ื“ืขืจืงืœืขืจื˜ ืื•ื™ื‘ืŸ, ืคื•ืœ ืงื•ื•ืืœืŸ ื–ืขื ืขืŸ ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ).

 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());
        }
    }

ืึธื•ื•ืขืจืœืึธืึทื“ ื“ื™ ื–ืขืœื‘ืข ืคื•ื ืงืฆื™ืข, ืงืึทื ืขืงื˜ื™ื ื’ ืฆื• ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืคึผืึธืจื˜ - ืคึฟืึทืจ ื˜ืขืœื ืขื˜ ื“ืึธืก ืื™ื– 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

ื“ืขืจ ืงืœืึทืก ืžื•ื–ืŸ ื”ืึธื‘ืŸ ื“ื™ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืคื•ืŸ ื‘ืึทืงื•ืžืขืŸ ืึท ื‘ืึทืคึฟืขืœ ืคื•ืŸ ืึท ื›ืึธืœืขืœ, ืฉื™ืงืŸ ืขืก ืคึฟืึทืจ ื“ื•ืจื›ืคื™ืจื•ื ื’, ืื•ืŸ ืฉื™ืงืŸ ืึท ืขื ื˜ืคืขืจ ืคื•ืŸ ื“ื™ ื‘ืึทืคึฟืขืœ ืฆื•ืจื™ืง ืฆื• ื“ื™ ื›ืึธืœืขืœ. ื“ื™ ืคึผืจืึธื’ืจืึทื ื“ื™ืœื™ื‘ืจืึทื˜ืœื™ ื˜ื•ื˜ ื ื™ืฉื˜ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ, ื•ื•ื™ื™ึทืœ ืขืจืฉื˜ืขืจ, ืืคื™ืœื• ืื™ืŸ "ื‘ืึธืงืกืขื“ ื˜ืขืœื ืขื˜" ืขืก ืื™ื– ืžืขื’ืœืขืš ืฆื• ืคึฟืึธืจืžืึทื˜ ื“ื™ ืกืขืจื•ื•ืขืจ ื“ื™ืกืง, ืื•ืŸ ืฆื•ื•ื™ื™ื˜ื ืก, ื“ื™ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืคื•ืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ื– ืื™ื‘ืขืจื’ืขื”ื™ืคึผืขืจื˜ ืื™ืŸ ืคึผืจื™ื ืฆื™ืคึผ, ืื•ืŸ ื“ืึธืก ืื™ื– ื•ื•ืึธืก ืขืก ืื™ื– ื ื™ืฉื˜. ืึท ื•ื•ืึธืจื˜ ื•ื•ืขื’ืŸ ืขื ืงืจื™ืคึผืฉืึทืŸ ืึธื“ืขืจ ืกืกืœ.

ืขืก ื–ืขื ืขืŸ ื‘ืœื•ื™ื– 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;
    }

ืื™ืš ื•ื•ืขืœ ื ื™ืฉื˜ ื’ืขื‘ืŸ ื˜ืขืกื˜ ืงืœืืกืŸ ื“ืึธ, ื–ื™ื™ ื–ืขื ืขืŸ ืื•ื ื˜ืŸ - ืึทืœืข ื–ื™ื™ ื˜ืึธืŸ ืื™ื– ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืคื•ืŸ ืขืคื ื˜ืœืขืš ืžืขื˜ื”ืึธื“ืก. ืึทืœืฅ ืื™ื– ืื•ื™ืฃ ื“ืขืจ ืขืจื“.

ืฆื• ืกืึทืžืขืจื™ื™ื–, ืื™ืŸ ืึท ืคึผืึธืจ ืคื•ืŸ ื™ื•ื•ื ื™ื ื’ื– ืื™ืจ ืงืขื ืขืŸ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ืคึผืจื™ื ืฆื™ืคึผืŸ ืคื•ืŸ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื”ื•ื™ืคึผื˜ ืงืึทื ืกืึธื•ืœ ื™ื•ื˜ื™ืœืึทื˜ื™ื–. ืื™ืฆื˜, ื•ื•ืขืŸ ืžื™ืจ ื˜ืขืœืขื ืขื˜ ืฆื• ืึท ื•ื•ื™ื™ึทื˜ ืงืึธืžืคึผื™ื•ื˜ืขืจ, ืžื™ืจ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ืึธืก ืื™ื– ื’ืขืฉืขืขื ื™ืฉ - ื“ื™ ืžืึทื’ื™ืฉ ืื™ื– ืคืึทืจืฉื•ื•ื•ื ื“ืŸ)

ืึทื–ื•ื™, ื“ื™ ืœื™ื ืงืก:
ืืœืข ืžืงื•ืจื™ื ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ, ื–ืขื ืขืŸ ืื•ืŸ ื•ื•ืขืœืŸ ื–ื™ื™ืŸ ื“ื
ื•ื•ืขื’ืŸ ื˜ืขืœื ืขื˜
ืžืขืจ ื•ื•ืขื’ืŸ ื˜ืขืœื ืขื˜

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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’