[PHP] Telnet ANSI/VT escape codes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 11-09 17:37

DexterDee

I doubt, therefore I might be

Topicstarter
Ik ben bezig met een daemon script in PHP die om de X seconden een fork doet naar een taak die uitgevoerd wordt. Dit werkt inmiddels prima.

Vervolgens wilde ik (alhoewel het een achtergrondproces is, gedaemonized) een console output hebben van de loglines die voorbij schieten en deze live tonen ipv. alleen in de logfile weg te schrijven. Dit is mij ook gelukt. Ik heb een multiuser socket servertje ingebouwd en men kan met telnet inloggen en vervolgens de console output bekijken.

Dan nu het probleem waar ik tegenaan loop:
Ik wil graag gebruik maken van ANSI escape codes om de console applicatie beter en veiliger te laten werken:
1. Bij het starten van de verbinding en bij succesvolle authenticatie wil ik dat het scherm eerst leeg gemaakt wordt.
2. Bij het invoeren van het password moeten de tekens niet zichtbaar zijn
3. Ik wil users in een telnet sessie met een toetscombinatie netjes laten afbreken

Ik heb te maken met linux en windows clients. Deze handelen helaas allebei telnet sessies op een andere manier af

Voor punt 1 (clear screen) heb ik deze escape sequence gevonden:
^[?47h
Deze werkt in linux vlekkeloos onder telnet, onder windows weigert deze een 2e keer in 1 sessie
^[2J (erase screen)
Deze werkt niet goed, verandert alleen de scrollback en voegt whitespace toe zodat de tekst bovenaan lijkt te staan (na een ansi goto 0;0)

Voor punt 2 (invoer onzichtbaar) heb ik deze escape sequences gevonden:
^[8m (onzichtbare tekst)
^[?25l (geen cursor)
Deze werken in linux prima, maar windows negeert ze volledig
Ik heb ook nog ^[12h en ^[12l gevonden (disable en enable local echo) maar dat vindt linux niet leuk omdat dan alle karakters dubbel in de terminal komen.

Voor punt 3 (netjes afsluiten) heb ik het volgende geprobeerd:
De escape sequence van CTRL-C afgevangen en hierop in telnet gecheckt. In linux stuurt telnet alleen per lijn door (geen individuele karakters) en CTRL-C werkt daar alleen als ik er een enter achter geef. Bovendien krijg ik geen output meer nadat ik CTRL-C heb ingevoerd (zonder enter), terwijl er wel data naar de client komt (zoals mijn disconnected string). In windows is CTRL-C al een client-side toetscombi die telnet automatisch afbreekt. Ik heb nu maar CTRL-X gemapped en dat werkt op allebei (mits je wel een enter geeft)
Additioneel probleem is dat als ik in de linux password prompt sta (en ik heb met ansi escapes de output en cursor uitgezet) dat deze niet hersteld worden nadat de terminal de verbinding verbreekt. Ik zit daarna dus met een local terminal waarbij alles wat ik intyp onzichtbaar is.

Wie o wie kan mij helpen met een van deze bovenstaande punten. Ik weet dat goedkoper routertjes enzo ook telnet hebben en dat deze bovenstaande punten (gedeeltelijk) correct oplossen op beide platformen. Helaas heb ik geen apparaat waarmee ik dat kan testen / output kan sniffen.

Alvast bedankt!

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Misschien heb je hier wat aan maar in een oud c programma van mij vond ik dit "\033[2J\033[0;0H" voor een clear screen.
Voor wachtwoord had ik dit 'sprintf(seq,"%c%c%c",255,252,1);'
Punt drie kreeg ik ook niet voor elkaar

[ Voor 30% gewijzigd door eek op 14-04-2008 14:30 ]

Skill is when luck becomes a habit.


Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 11-09 17:37

DexterDee

I doubt, therefore I might be

Topicstarter
Bedankt, ik ga dat eens uitproberen.

Die 255,252,1 sequence, hoe maak ik die weer ongedaan? Na de password prompt wil ik wel weer zichtbare input kunnen weergeven.

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

sprintf(seq,"%c%c%c",255,252,1); = on
sprintf(seq,"%c%c%c",255,251,1); = off

blijkbaar de verkeerde geknipt en geplakt.

[ Voor 23% gewijzigd door eek op 14-04-2008 14:30 ]

Skill is when luck becomes a habit.