ZMODEM on Windows in 2026: Still the Fastest Way Off a Locked-Down Box
You are on a serial console of a switch in a rack with no network. You need the running config off it, and the config backup script is part of the problem you are fixing. There is no SSH, no SFTP, no USB port you are allowed to touch. There is a shell prompt. That is the situation ZMODEM was built for, and forty years later nothing has replaced it.
What ZMODEM actually is
ZMODEM is a file transfer protocol that runs inside the terminal session —
no second connection, no TCP port, no daemon. The remote side runs sz (send
ZMODEM) or rz (receive ZMODEM); the local client detects the escape sequence
and takes over the stream. Because it rides the same channel as your keystrokes, it works
over serial, over Telnet, over SSH, and over a console server.
On Unix-like systems the tooling is the lrzsz package. On network gear you
will often find copy ... flash: style commands that speak ZMODEM underneath.
Why it is still relevant
- No network path needed. If you can see a prompt, you can move bytes.
- The device may not have SSH at all. Plenty of switches, UPS cards and industrial controllers are Telnet-and-serial only.
- Air-gapped and recovery environments where opening an SFTP server is not permitted.
- Rescue and bootstrap work — getting a first firmware image onto hardware that has nothing installed.
Using it
- On the remote host, install
lrzszif it is not already present. - To pull a file down: run
sz filename. Your client should detect the transfer and open a save dialog (or save automatically). - To push a file up: run
rzon the remote, then choose the file locally when prompted. - Use
sz -b(binary) when transferring anything that is not text, andsz -yto overwrite existing files.
In FlyTerminal, typing rz on the remote starts the upload automatically — you
do not have to fire up a separate transfer menu.
ZMODEM vs the alternatives
| Protocol | Needs | Strengths | Weak spots |
|---|---|---|---|
| ZMODEM | Only the existing session | Crash recovery, batch transfers, auto-start, CRC-32 | Not secure by itself (inherits the channel); needs client support |
| SFTP | SSH on the remote | Encrypted, browsable, scriptable | Useless if there is no SSH or no network |
| SCP | SSH | Simple, ubiquitous | Deprecated in favour of SFTP by OpenSSH; same requirements |
| XMODEM / 1K | Session | Universally implemented on ancient gear | 128-byte blocks, no batch, no crash recovery |
| Kermit | Session | Survives 7-bit and parity-mangled links, highly configurable | Slow, fiddly, rare on modern hosts |
Security note: ZMODEM is not encryption. Over SSH it inherits SSH's protection; over Telnet or a bare serial line it is plaintext, like everything else on that channel.
Which Windows clients support it
Support is the catch. PuTTY has no ZMODEM support and no plans to add it, which is why many people assume ZMODEM is dead. Clients that do support it include SecureCRT, Xshell, ZOC, WindTerm, MobaXterm and FlyTerminal (ZMODEM, XMODEM and Kermit).
When a transfer hangs
- It sits at 0%. The client did not detect the trigger string. Make sure it is listening, then re-run
sz. - CRC errors repeat. Almost always flow control or a baud rate mismatch. Drop to 9600 and retry; enable RTS/CTS if the device expects it.
- The file arrives corrupt. You transferred binary in text mode — use
sz -b. - Filenames are mangled. Non-ASCII names on an 8-bit-clean-unsafe link; rename to plain ASCII.
- It works over SSH but not serial. Check that the console does not filter control characters, and that local echo is off.
ZMODEM, XMODEM and Kermit built in
FlyTerminal detects rz/sz automatically and includes a HEX monitor for when a transfer misbehaves. 30-day trial.
FAQ
Do I need to install anything on the remote device?
Usually lrzsz. Minimal or recovery images often already include it; network gear frequently has its own copy command that uses ZMODEM internally.
Is ZMODEM faster than SFTP?
No. SFTP is faster and encrypted. ZMODEM wins on availability: it works when SFTP has no transport to run on.
Why does PuTTY hang when I run sz?
Because PuTTY does not implement ZMODEM — it just shows you the raw escape sequence. Use a client with ZMODEM support, or an external helper.
Can I script it?
Yes — sz accepts file lists and flags, which pairs well with a command button or a saved script in your terminal client.