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!
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