telnet_wrapper 0.1.0

A telnet server that wraps terminal applications, exposing them to telnet clients with proper protocol support including window size negotiation (NAWS)
![CI](https://github.com/justpresident/telnet_wrapper/actions/workflows/rust.yml/badge.svg)
[![Crates.io](https://img.shields.io/crates/v/telnet_wrapper.svg)](https://crates.io/crates/telnet_wrapper)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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

| Argument | Description |
|----------|-------------|
| `<APP_COMMAND>` | The application command to run within the PTY |
| `[APP_ARGS]...` | Arguments to pass to the application command |

### Options

| Option | Default | Description |
|--------|---------|-------------|
| `--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:

| Option | Description |
|--------|-------------|
| 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.