Qorista software oo leh shaqeynta adeegyada macmiilka-server Windows, qaybta 01

salaan.

Maanta waxaan jeclaan lahaa in aan eego habka qorista codsiyada macmiilka-server ee fuliya hawlaha utilities Windows caadiga ah, sida Telnet, TFTP, et cetera, iyo cetera ee Java saafiga ah. Way caddahay inaanan wax cusub keeni doonin - dhammaan adeegyadan waxay si guul leh u shaqeynayeen in ka badan hal sano, laakiin waxaan aaminsanahay in qof kastaa uusan ogeyn waxa ka socda daboolka.

Tani waa dhab ahaan waxa lagaga wada hadli doono goynta.

Maqaalkan, si aan loo jiidin, marka lagu daro macluumaadka guud, waxaan kaliya ku qori doonaa serverka Telnet, laakiin hadda waxaa jira waxyaabo kale oo ku saabsan adeegyada kale - waxay noqon doontaa qaybo dheeraad ah oo taxane ah.

Marka hore, waxaad u baahan tahay inaad ogaato waxa Telnet yahay, waxa loo baahan yahay iyo waxa loo isticmaalo. Ma soo xigan doono ilo hadal ah (haddii loo baahdo, waxaan ku soo lifaaqi doonaa isku xirka walxaha mawduuca dhamaadka maqaalka), waxaan kaliya sheegi doonaa in Telnet ay bixiso marin fog oo khadka taliska ee qalabka. Guud ahaan, tani waa meesha ay ku dhamaato shaqadeeda (si ula kac ah ayaan uga aamusay gelitaanka dekedda server-ka; wax badan oo ku saabsan taas ka dib). Tani waxay ka dhigan tahay in si loo hirgeliyo, waxaan u baahanahay inaan aqbalno khadka macmiilka, u gudubno server-ka, isku day inaad u gudubto khadka taliska, akhri jawaabta khadka taliska, haddii ay jirto, dib ugu soo celi macmiilka iyo ku soo bandhig shaashadda, ama, haddii khaladaad, u sheeg isticmaaluhu inay wax khaldan yihiin.

Si loo hirgeliyo kuwa kor ku xusan, si waafaqsan, waxaan u baahannahay 2 fasal shaqo iyo xoogaa imtixaan ah oo aan ka bilaabi doono server-ka oo uu macaamiishu ku shaqeyn doono.
Sidaa awgeed, wakhtigan xaadirka ah qaabka codsiga waxa ka mid ah:

  • TelnetClient
  • TelnetClientTester
  • TelnetServer
  • TelnetServerTester

Aan soo marno mid walba:

TelnetClient

Dhammaan fasalkan waa inuu awoodo inuu sameeyo waa inuu soo diro amarada la helay oo uu muujiyo jawaabaha la helay. Intaa waxaa dheer, waxaad u baahan tahay inaad awood u yeelatid inaad ku xirto qalab aan macquul ahayn (sida kor ku xusan) ee qalabka fog oo aad ka jarto.

Si taas loo gaaro, hawlaha soo socda ayaa la fuliyay:

Hawl u qaadata ciwaanka godad dood ahaan, furto isku xidhka oo bilaaba gelinta iyo durdurrada wax soo saarka (doorsoomayaasha durdurrada ayaa lagu sheegay kor, ilo buuxa ayaa ku yaal dhammaadka maqaalka).

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

Isku darka isla shaqada, isku xirka dekedda caadiga ah - telnet tani waa 23


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

Shaqadu waxay akhridaa xuruufta kiiboodhka waxayna u dirtaa godka wax soo saarka - kaas oo ah mid caadi ah, qaabka khadka, ee aan ahayn qaabka:


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

Shaqadu waxay ka helaysaa xogta godka waxayna ku soo bandhigaysaa shaashadda


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

Shaqadu waxay joojisaa soo dhawaynta xogta iyo gudbinta


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

TelnetServer

Fasalkani waa inuu lahaadaa shaqeynta ah inuu amarka ka helo godad, u dira si loo fuliyo, iyo u soo dirida jawaabta amarka dib loogu celiyo godka. Barnaamijku si ula kac ah uma hubiyo xogta la soo galiyay, sababtoo ah marka hore, xitaa "telnet boxed" waxaa suurtagal ah in la qaabeeyo diskka server-ka, marka labaadna, arrinta amniga ee qodobkan ayaa laga saaray mabda'a, taasina waa sababta aysan jirin. kelmad ku saabsan sirta ama SSL.

Waxaa jira 2 shaqo oo keliya (Mid ka mid ah ayaa culeys badan saaran yahay), guud ahaan tani maahan dhaqan aad u wanaagsan, laakiin ujeeddooyinka hawshan, waxay ila muuqatay inaan wax walba u daayo sida ay yihiin.

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

    }

Barnaamijku wuxuu furayaa dekedda server-ka, wuxuu akhriyaa xogta ilaa uu la kulmo dabeecadda dhammaadka amarka, wuxuu u gudbiyaa amarka hab cusub, oo u beddelo wax soo saarka habka ilaa godka. Wax walba waa u fudud yihiin sida qoriga Kalashnikov.

Sidaa darteed, waxaa jira culeys dheeraad ah oo shaqadan ah oo leh deked caadi ah:

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

Waa hagaag, si waafaqsan, shaqada joojisa server-ka sidoo kale waa mid aan waxtar lahayn, waxay joojisaa wareegga weligeed ah, ku xadgudubka xaaladdeeda.

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

Kuma bixin doono fasallada imtixaanka halkan, way ka hooseeyaan - waxa kaliya ee ay sameeyaan waa hubinta shaqeynta hababka dadweynaha. Wax walba waa on git.

Si loo soo koobo, laba fiidkii waxaad fahmi kartaa mabaadi'da hawlgalka qalabka konsole ee ugu muhiimsan. Hadda, marka aan teleefoonka u dirno kumbuyuutarka fog, waxaan fahamsanahay waxa dhacaya - sixirkii waa la waayay)

Haddaba, isku xirka:
Dhammaan ilaha halkan bay ahaayeen, wayna jiri doonaan
Ku saabsan Telnet
Wax badan oo ku saabsan Telnet

Source: www.habr.com

Add a comment