
[](https://crates.io/crates/telnet_wrapper)
[](https://opensource.org/licenses/MIT)
# telnet_wrapper
A telnet server that wraps any terminal application, exposing it to telnet clients with proper protocol support.
## Features
- Wraps any terminal application and exposes it via telnet
- Telnet protocol support using [libtelnet-rs](https://crates.io/crates/libtelnet-rs)
- **Window size negotiation (NAWS)** - automatically resizes the PTY when the client window changes
- Character-by-character input (no line buffering)
- Supports multiple concurrent clients
- Configurable initial terminal size
- Configurable listening port
## Installation
### From crates.io
```bash
cargo install telnet_wrapper
```
### From source
```bash
git clone https://github.com/justpresident/telnet_wrapper
cd telnet_wrapper
cargo build --release
```
## Usage
```bash
telnet_wrapper [OPTIONS] <APP_COMMAND> [APP_ARGS]...
```
### Arguments
| `<APP_COMMAND>` | The application command to run within the PTY |
| `[APP_ARGS]...` | Arguments to pass to the application command |
### Options
| `--port <PORT>` | 23 | Port to listen on |
| `--rows <ROWS>` | 24 | Initial number of rows for the PTY |
| `--cols <COLS>` | 80 | Initial number of columns for the PTY |
| `-h, --help` | | Print help |
| `-V, --version` | | Print version |
## Examples
### Expose htop on port 2323
```bash
telnet_wrapper --port 2323 /usr/bin/htop
```
Then connect:
```bash
telnet localhost 2323
```
### Run a shell accessible via telnet
```bash
telnet_wrapper --port 2323 /bin/bash
```
### Run vim with a specific file
```bash
telnet_wrapper --port 2323 /usr/bin/vim /tmp/test.txt
```
### Custom terminal size
```bash
telnet_wrapper --port 2323 --rows 40 --cols 120 /usr/bin/htop
```
## Telnet Protocol Support
This wrapper implements the following telnet options:
| ECHO | Server-side echo (enables character mode) |
| SGA | Suppress Go Ahead (required for character mode) |
| NAWS | Negotiate About Window Size (dynamic terminal resizing) |
| LINEMODE | Disabled to ensure character-by-character input |
## Tips
- To close a telnet connection, press `Ctrl+]` and then type `q` or press `Ctrl+D`
- Ports below 1024 require root/administrator privileges. Use higher port numbers when possible
- Don't expose terminals/shells/file editors on publicly accessible addresses! This can be easily exploited to take control over your server. Only expose services within trusted local network or securely-designed applications that do not expose a risk of damaging your system.
- The `TERM` environment variable is set to `xterm-256color` for the wrapped application
## License
MIT License - see [LICENSE](LICENSE) for details.