Stripy Horse
Stripy Horse

← All guides

Zebra printer not responding on port 9100

Raw TCP 9100 is the whole protocol for a networked Zebra: open a socket, write ZPL, close it. When it stops working, the first job is to find out how it is failing, because "not responding" covers three faults that share no fix.

nc -z -v 192.168.1.157 9100

Which failure do you have?

Connection refused, immediately. Something is at that address and it is actively saying no:

nc: connect to 192.168.1.157 port 9101 (tcp) failed: Connection refused

The host is up, nothing is listening on that port. Either the address now belongs to a different machine, or the printer's print server is off.

No answer, then a timeout. Nothing is at that address at all, or a firewall is dropping the packets silently. A refusal is a reply; a timeout is silence.

Connects fine, prints nothing. The port is open and your bytes were accepted. This is not a network problem at all, and the sections below cover it.

Refused or timed out: the address moved

The most common cause by a distance. Most printers ship with DHCP on:

(printf '! U1 getvar "ip.dhcp.enable"\r\n'; sleep 1) | nc 192.168.1.157 9100
"on"

An address from DHCP is a lease, not a property. A reboot, a power cut or a lease expiry can move it, and the application that has it hard-coded then talks to nothing, or worse, to whatever took the address.

Find where it went by sweeping for the port:

for i in $(seq 1 254); do
  (timeout 0.4 bash -c "</dev/tcp/192.168.1.$i/9100" 2>/dev/null \
    && echo "192.168.1.$i:9100 open") &
done; wait
192.168.1.157:9100 open

Then confirm it is the printer and not something else that uses 9100:

(printf '~HI'; sleep 2) | nc 192.168.1.157 9100
GX430t-300dpi,V56.17.11Z,12,2104KB

Finding a Zebra's address covers the other four ways, including the SGD query that returns 0.0.0.0 on a printer that is plainly online.

Once you have found it, pin it with a DHCP reservation in your router. Hard-coding a leased address is the bug you are currently fixing.

Connects, but nothing prints

Only one program can hold the port

This surprises people. A Zebra accepts one connection at a time on 9100. If a Windows print spooler, a stuck script, or a colleague's session is holding the socket open, your connection waits or is dropped, and nothing you send arrives.

You will not see an error, which is what makes it hard to spot. Check for a print queue on the machine that normally drives the printer, and for an old process holding the connection. Anything that opened the socket and never closed it will block everyone else indefinitely.

The printer is paused, out of media, or has its head up

The port works; the printer will not print. ~HS answers with three lines of status:

(printf '~HS'; sleep 2) | nc 192.168.1.157 9100
030,0,0,1824,002,0,0,0,000,0,0,0
001,0,0,0,1,2,6,0,00000000,1,000
1234,0

On the first line, the second field is paper out and the third is paused. Both 0 above, which is healthy. On the second line the second field is head up: a latch that is not quite closed reads as a printer that accepts everything and prints nothing.

The ZPL never closed

A format that opens with ^XA and never sends ^XZ is an unfinished job. The printer holds it, waiting for the rest, and prints when the closing tag arrives or never. Check the last bytes you actually sent, especially if you are streaming or building the string in code.

Paste the same stream into the ZPL viewer. If it renders there, the format is complete and the problem is the printer or the transport.

It goes quiet in the middle of a job

This one is normal, and worth knowing before you add a timeout that breaks it. A Zebra stops reading from the socket while the printhead is running, then resumes. On a long batch that pause can last many seconds.

A client with an aggressive idle timeout reads that as a dead connection, gives up mid-job, and you get half a run of labels. Sending to a printer needs no idle timeout. nc has none by default, which is part of why it is the right tool here.

Firewall and network shape

If the printer answers a sweep from one machine and times out from another, the path is the problem, not the printer:

Test from a machine on the same switch as the printer first. If that works and your application host does not, you have a network policy question, not a printer question.

Should I use a different port?

9100 is the raw print port and is what you want. Zebras also listen on 9200 for raw with status, and on 6101 for some legacy tooling. If 9100 is genuinely disabled on your unit, the configuration label will say so.

Can I test any of this without the printer?

Yes. A virtual Zebra printer listens on raw 9100 exactly like the real thing and shows you what arrived, so you can prove your application's sending code is correct before blaming the hardware. That separation is usually the fastest way to end the argument.

Stripy Horse is the developer platform for Zebra printing: convert PDFs and images, design labels in HTML, preview ZPL pixel-true, and test against virtual printers in CI. Get in touch or try the free tools.

Published 2026-09-03 · Ben Faerber, software engineer, five years building warehouse fulfillment and label-printing systems; maintainer of pdf-to-zpl (27,000+ installs powering production label generation).