Aplikacja klient-server telnet

0

Witam może tutaj ktoś mnie oświeci a mianowicie:

Chce napisac program Telnet Klient-Server Gdzie bede mogl wysylac pliki jak i wiadomosci do tego komendy takie jak :
ls cd cat rm itd. (jak to w linuxie) mają sie wykonywac i teraz pytanie co ja mam programowac calą konsole od nowa (w co wątpie) czy może jest jakis sposob zeby odpalic w Java klona konsoli i tylko do niego dopisac troche kodu (chociaż wątpie że tak sie da).

Potrzebuje wymyslic rozwiazanie bo z implementacja nie mam problemow a w tym rozwiazaniu ma sie miescic:
-wysylanie wiadomosci i plikow pomiedzy klientami polaczonymi do servera
-dzialanie komend np. ls, cat, rm

ps. Jak nie jest jasno i nie czaicie to tylko napiszcie a zaraz poprawie.

2

@Prank866:

Piszesz Java, ale o czym myślisz? Okno desktprowe np Swing ?
Srodowisko webowe, czyli konsola w rzeczywistości w przeglądarce - o czym zapomniałeś napisać?

2

Telnet działa tak, że każde naciśnięcie klawisza powoduje wysłanie jednego bajtu lub krótkiej sekwencji (strzałki, funkcyjne itp), natomiast serwer wysyła dowolne teksty (wyjątek stanowi bajt o kodzie 0xFF). Aby zadziałała np. komenda "ls", musisz wysłać znali "l", "s" i 0x0D, a potem przyjąć wszystko, co wysyła serwer. Potem dochodzi kwestia obsługi komend VT100/ANSI.

Jeszcze dochodzi kwestia sekwencji "negocjacyjnych", czyli kilku sekwencji startowych, zaczynających się od 0xFF. Obsługa jest o tyle ważna, bo całkowita ignorancja moze spowodować, że klient nie otrzyma nawet komunikatu do zalogowania się i dalsza praca nie będzie możliwa. Na ogół wystarczą predefiniowane odpowiedzi na komunikaty z serwera.

Jakiś czas temu ja zmierzyłem się z podobnym tematem link, tyle, że jako apka desktopowa w C#, może coś wykorzystasz. Klient telnet to jedna z kilku funkcji, ale nie jedyna. Tu są ważne następujące pliki:

Telnet - sekwencje bajtowe dla klawiszy (istnieje kilka wariantów dla strzałek, funkcyjnych, dla kompatybilności wszystkie są potrzebne), odpowiedzi na sekwencje negocjacyjne.
Telnet_Client - podłączenie do serwera sieciowego, wysyłanie i odbieranie danych, odpowiedzi na niektóre kody VT100 będące żądaniem przesłania informacji z terminala do serwera (nie jest to konieczne, ale pozwala przechodzić kilka testów w vttest).
Core_ANSI_Parse - interpretacja tekstu wyposażonego w kody VT100/ANSI. Nie ma i nie przewiduję pełnej obsługi, obsługa jest wystarczająca do korzystania z konsoli Linuxa i do przejścia większości tekstów wizuanych z programu vttest dostępnego dla Linux.
Readme ANSI - zawiera opis kodów VT100/ANSI zaimplementowanych w moim programie, ten zakres wystarczy w większości zastosowań.

Opis wszystkich kodów sterujących - na 99% wystarczy obsługiwać tylko te, które obsługuje VT100 plus kolory.

Jeżeli chcesz zobaczyć, jak działa telnet, to potrzebne są dwa komputery lub maszyny wirtualne, program Wireshark. Program Wireshark nie rejestruje ruchu po localhost, stąd potrzeba dwóch komputerów. Jeden z nich powinien mieć system Linux i ten będzie serwerem, do tego co najmniej program vttest (tester terminala VT100 i pochodnych) i Midnight Commander (sprawdzenie działania podstawowych funkcji ujawnia problemy z kompatybilnością terminala w początkowej fazie rozwoju). Najprościej testować wszystkie funkcje w vttest, rejestrować ruch w Wireshark i sprawdzić znaczenie użytych kodów VT100.

W ten sam sposób można też zarejestrować sekwencje negocjacyjne, często klient "z własnej inicjatywy" wysyła sekwencje negocjacyjne (co też można stwierdzić bez większego problemu). W praktyce ja osobiście stwierdziłem, ze wystarczy tylko odbierać te sekwencje i na każdą odpowiednio odpowiadać. Jedynie i to też nie zawsze, z inicjatywy klienta potrzebne jest wysłanie sekwencji negocjacyjnej zawierającej informację o wielkości terminala w znakach.

1

O! Widzisz jak kol @andrzejlisek szczegółówo wprowadził w wykład ... przypomniał mi zabawy czy to na BBSach Z-Modemy nie Z-modemy, Kermity nie Kermity, czy na linuksie normalnym hardwarowych terminalem szeregowym, który posiadałem (oj, za tą animację jak wypełniał ekran bursztynowym tekstem to bym dał się posiekać)

@Prank866:
Nie za wielki temat na ten etap? Rozpaćkasz i porzucisz
Jak po w/w wprowadzeniu zaczyna być widać, to z pięć do ośmiu dużych modułów, żaden na poziomie szkolnym
client i serwer protokołu sieciowego "jakby telneta"
klient i serwer protokołu "jakby ftp"
GUI klienta
2x interpeter znaków sterujących, serwer i klient (bardzo rozległe, podatne na błędy)

Nawet jeśli 2-3 wesprzemy się gotowcami, i tak bardzo dużo precyzyjnej roboty

BTW jeszcze miesiąc temu nie odróżniałeś telnetu od "dowolnego protokołu sieciowego", stad pytanie czy wiesz na pewno CO chcesz, i ŻE na pewno chcesz.
Stzrelenei byka w protokole sieciowym się debuguje 10x trudniej, niż złe wypisanie danych w System.out

0

Ej a takie jeszcze jedno pytanie mam jest może jakis sposob aby z kodu w java zwrocic sie do polecenia 'ls' i zapisac jego wartosc do zmiennej potem odeslac do klienta czy raczej takie cos nie istnieje ?

2
Prank866 napisał(a):

Ej a takie jeszcze jedno pytanie mam jest może jakis sposob aby z kodu w java zwrocic sie do polecenia 'ls' i zapisac jego wartosc do zmiennej potem odeslac do klienta czy raczej takie cos nie istnieje ?

ls czyli listowanie plików w katalogu .... ja bym zrobił samą Java, tzn bez zewnętrznego wywołania. To ZAWSZE jest coś, co należy unikać za wszelką cenę

https://www.baeldung.com/java-list-directory-files

0

Nie chciałem zniechęcać do tematu ani przedstawiać go jako bardzo trudny, chciałem uświadomić, z czym to się wiąże. Sam protokół telnet jest bardzo prosty, tylko wspomniana obsługa kodów sterujących wyświetlania jest najtrudniejsza. Na początku, to można ignorować wszystkie kody sterujące. Proste polecenia, jak ls lub cat, powinny mimo tego wyświetlać się prawidłowo, gorzej, jak spróbuje się czegoś interaktywnego, chociażby less i more.

W miarę potrzeb trzeba będzie implementować niektóre podstawowe kody sterujące, które będą występować w odpowiedziach poleceń, jakie chcesz obsługiwać. Przy niektórych kodach pewne szczegóły są istotne, dlatego mój program się rozrósł, a i tak nie obsługuje wszystkiego, choć obsługuje poprawnie większość poleceń shella Linuxa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1