Kulemba mapulogalamu ndi magwiridwe antchito a Windows kasitomala-server, gawo 01

Moni.

Lero ndikufuna kuyang'ana njira yolembera ma seva a kasitomala omwe amagwira ntchito zama Windows, monga Telnet, TFTP, et cetera, et cetera mu Java yoyera. Zikuwonekeratu kuti sindidzabweretsa zatsopano - zonsezi zakhala zikugwira ntchito bwino kwa chaka chimodzi, koma ndikukhulupirira kuti si aliyense amene akudziwa zomwe zikuchitika pansi pa hood.

Izi ndizo zomwe zidzakambidwe pansi pa odulidwa.

M'nkhaniyi, kuti ndisatulutse, kuwonjezera pazidziwitso zambiri, ndingolemba za seva ya Telnet, koma pakadali pano palinso zinthu zina zothandizira - zidzakhala mbali zina za mndandanda.

Choyamba, muyenera kudziwa chomwe Telnet ndi, chomwe chimafunika, ndi chomwe chimagwiritsidwa ntchito. Sindingatchule magwero amtundu uliwonse (ngati kuli kofunikira, ndikulumikiza ulalo wazinthu zomwe zili pamutuwu kumapeto kwa nkhaniyo), ndingonena kuti Telnet imapereka mwayi wofikira ku mzere wolamula wa chipangizocho. Mwambiri, apa ndipamene ntchito yake imathera (ndinakhala chete dala kuti ndipeze doko la seva; zambiri pambuyo pake). Izi zikutanthauza kuti kuti tigwiritse ntchito, tifunika kuvomereza mzere kwa kasitomala, kuupereka kwa seva, kuyesa kuupereka ku mzere wolamula, werengani yankho la mzere wa lamulo, ngati pali imodzi, perekani kwa kasitomala ndipo ziwonetseni pazenera, kapena, ngati zolakwika, mudziwitse wogwiritsa ntchito kuti chinachake chalakwika.

Kuti tigwiritse ntchito zomwe tafotokozazi, tifunikira makalasi ogwirira ntchito a 2 ndi kalasi yoyesera yomwe tidzayambitsa seva ndi momwe kasitomala angagwiritsire ntchito.
Chifukwa chake, pakadali pano mawonekedwe ogwiritsira ntchito akuphatikiza:

  • TelnetClient
  • TelnetClientTester
  • TelnetServer
  • TelnetServerTester

Tiyeni tidutse aliyense wa iwo:

TelnetClient

Zomwe kalasili liyenera kuchita ndikutumiza malamulo olandilidwa ndikuwonetsa mayankho omwe alandilidwa. Kuphatikiza apo, muyenera kulumikizana ndi doko losakhazikika (monga tafotokozera pamwambapa) la chipangizo chakutali ndikuchichotsa.

Kuti akwaniritse izi, ntchito zotsatirazi zidakhazikitsidwa:

Ntchito yomwe imatenga adilesi ya socket ngati mkangano, imatsegula kugwirizana ndikuyambitsa mitsinje yolowera ndi yotulutsa (zosintha zamtundu zimalengezedwa pamwambapa, magwero athunthu ali kumapeto kwa nkhaniyo).

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

Kudzaza ntchito yomweyo, kulumikiza ku doko lokhazikika - pa telnet iyi ndi 23


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

Ntchitoyi imawerenga zilembo kuchokera pa kiyibodi ndikuzitumiza ku socket yotulutsa - yomwe imakhala, mumayendedwe a mzere, osati mawonekedwe:


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

Ntchitoyi imalandira deta kuchokera ku socket ndikuwonetsa pazenera


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

Ntchitoyi imayimitsa kulandira ndi kutumiza deta


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

TelnetServer

Kalasi iyi iyenera kukhala ndi magwiridwe antchito olandila lamulo kuchokera ku socket, kuitumiza kuti ikaphatikizidwe, ndikutumiza yankho kuchokera ku lamulo kubwerera ku socket. Pulogalamuyi mwadala sichiyang'ana zomwe zalowetsedwa, chifukwa choyamba, ngakhale mu "boxed telnet" ndizotheka kupanga mawonekedwe a seva disk, ndipo kachiwiri, nkhani ya chitetezo m'nkhaniyi sinasiyidwe, ndipo chifukwa chake palibe. mawu okhudza encryption kapena SSL.

Pali ntchito za 2 zokha (imodzi mwazo ndi yolemetsa), ndipo kawirikawiri izi sizinthu zabwino kwambiri, koma chifukwa cha ntchitoyi, zinkawoneka zoyenera kwa ine kusiya zonse monga momwe zilili.

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

    }

Pulogalamuyi imatsegula doko la seva, imawerenga deta kuchokera pamenepo mpaka itakumana ndi munthu womaliza, ipereka lamulo ku ndondomeko yatsopano, ndikuwongolera zomwe zimachokera ku ndondomekoyi kupita kuzitsulo. Chilichonse ndi chosavuta ngati mfuti ya Kalashnikov.

Chifukwa chake, pali zochulukira pantchito iyi yokhala ndi doko lokhazikika:

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

Chabwino, motero, ntchito yomwe imayimitsa seva imakhalanso yochepa, imasokoneza chizungulire chamuyaya, kuphwanya chikhalidwe chake.

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

Sindipereka makalasi oyesera pano, ali pansipa - zomwe amachita ndikuwunika momwe njira za anthu zikuyendera. Zonse zili pa git.

Mwachidule, madzulo angapo mutha kumvetsetsa mfundo zoyendetsera zida zazikulu za console. Tsopano, tikatumiza telenet ku kompyuta yakutali, timamvetsetsa zomwe zikuchitika - matsenga adatha)

Kenako, maulalo:
Magwero onse anali, alipo ndipo adzakhala pano
Za Telnet
Zambiri za Telnet

Source: www.habr.com

Kuwonjezera ndemanga