2008-11-07 14 views
7

Mam aplikację, w której akceptuję połączenie przez gniazdo z klienta telnet i ustawiam prosty, oparty na klawiaturze graficzny interfejs graficzny.Wymuszenie klienta Telnet w trybie znakowym

Klient telnet, przynajmniej w systemie Linux, domyślnie przechodzi w tryb liniowy, więc zawsze muszę ręcznie wykonać ^]mode char.

Odpowiedni dokument RFC sugeruje, że jeśli moja aplikacja wyśle ​​po prostu znaki IAC DONT LINEMODE (\377\376\042), gdy klient się połączy, klient powinien przejść do trybu znakowego. Jednak to nie robi żadnej różnicy.

Jaki jest najprostszy kod, który wykona zadanie? Idealnie po prostu ciąg do wysłania. Moja aplikacja może absorbować wszelkie śmieci, które klient odsyła.

Odpowiedz

6

Za to, co warto, sam to rozwiązałem.

// IAC WONT LINEMODE IAC WILL ECHO 

write(s,"\377\375\042\377\373\001",6); 

pobiera pilota (przynajmniej telnet z Xterm na Linuksie) do właściwego stanu.

8

Interesujące. Miałem więcej szczęścia wysyłania

IAC WILL ECHO IAC WILL SUPPRESS_GO_AHEAD IAC WONT LINEMODE 
255 251 1 255 251     3 255 252  34 

IAC WONT LINEMODE wydaje się być zbędny: mój klient telnet wydaje się dostać do prawego stanie bez niego, ale zostawiłem go pod względem kompletności.

0

rozwiązanie Kevina działa świetnie: write(s,"\377\375\042\377\373\001",6);

Choć komentarz jest nieco źle. Należy powiedzieć „NIE LINEMODE”, a nie „przyzwyczajenie LINEMODE”, czyli: // IAC DO LINEMODE IAC WILL ECHO

(Źródło: rfc854)

+0

Domyślny stan równoważne NVT (podstawa wirtualną sieć terminali), że każdy koniec Telnet połączenie ma się zachowywać tak jak przy połączeniu __ wszystko_ jest wyłączone i nic nie jest włączone dopóki opcja, którą jeden koniec zaoferował, została uzgodniona z ich WILL i drugą odpowiedzią DO i/lub tą samą opcją, że ten sam koniec chce inny koniec do zrobienia został zażądany z ich DO, a drugi koniec WILL w odpowiedzi. Oczywiście opcja w jednym kierunku jest oddzielona od tej samej opcji w drugim kierunku - z wyjątkiem tego, że ECHO jest _specjalnym_wpisie ... – SlySven

+0

... i jest niedozwolone (nie może sobie przypomnieć, czy jest to POWINIENNE NIE MUSISZ) do ECHO w jednym kierunku, jeśli kierunek wsteczny już jest w trybie ECHOing! – SlySven

Powiązane problemy