Stripy Horse
Stripy Horse

← All guides

How to find your Zebra printer's IP address

To print over the network you need the printer's address, and Zebras rarely advertise it. Five ways, ordered by what you already have access to.

1. Sweep the network for port 9100

If you are on the same network as the printer, this needs nothing installed. Every networked Zebra listens on TCP 9100:

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

Real output on a LAN with one printer:

192.168.1.157:9100 open

Two details there are easy to get wrong, and both fail quietly. Wait() throws when a connection is refused rather than returning $false, so without the try the loop dies on the first closed address. And the braces in ${ip} are required: PowerShell reads $ip:9100 as a scoped variable and prints open with no address at all.

Change 192.168.1 to your own subnet, which ip route or ipconfig will tell you. It takes a few seconds.

Anything that answers on 9100 is not necessarily a printer. Print servers and label simulators listen there too. Confirm before you send anything (next section).

2. Confirm it is the printer you think it is

Once you have a candidate, ~HI (Host Identify) makes it say what it is:

(printf '~HI'; sleep 2) | nc 192.168.1.157 9100

Real answer:

GX430t-300dpi,V56.17.11Z,12,2104KB

Model, firmware version, dots per millimetre, and memory. The 12 matters more than it looks: it is 12 dpmm (300 dpi), and it is what every size calculation in your ZPL depends on.

3. Ask the printer over SGD, and mind the trap

If you can already reach it, SGD reports the configuration. But the obvious query is the wrong one. On a wired GX430t, plainly reachable at 192.168.1.157:

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

That is not a fault. ip.addr belongs to a different interface from the one carrying your connection, and the printer answers honestly about an interface that has no address. Ask which network is active first, then query that interface by name:

(printf '! U1 getvar "ip.active_network"\r\n'; sleep 1) | nc 192.168.1.157 9100
"Internal Wired"
(printf '! U1 getvar "internal_wired.ip.addr"\r\n'; sleep 1) | nc 192.168.1.157 9100
"192.168.1.157"

For a wireless printer the prefix is wlan. instead. On the same machine wlan.ip.addr returns "0.0.0.0", which is the same honest answer about an interface that is not in use.

Other keys worth having while you are there:

internal_wired.mac_addr   "00:07:4d:42:0c:6e"
ip.dhcp.enable            "on"
device.friendly_name      "32J120300675"

4. Print the configuration label

With physical access and no network at all, the printer will tell you directly. On most desktop models: power off, hold the feed button, power on, and release after the status light flashes once. Some models use a different button dance, so check the manual for yours.

Two labels come out. The network section of the second lists the IP address, subnet mask and MAC.

If you can already reach it over the network, ~WC prints the same thing without touching the printer:

printf '~WC' | nc 192.168.1.157 9100

5. Find it by MAC address in the router

Zebra's network hardware uses a handful of registered MAC prefixes, 00:07:4D among them. That makes a Zebra easy to spot in a DHCP client list or an ARP table:

arp -a | grep -i "0:7:4d\|00:07:4d"

Your router's DHCP leases page shows the same thing with a hostname, which is often the printer's serial number (32J120300675 above).

Keep it from moving

The printer here has ip.dhcp.enable set to "on", so the address it has today is a lease, not a property. Every reboot is a chance for it to change, and hard-coding a leased address into an application is a Monday morning outage waiting to happen.

Two fixes, either is fine:

printf '! U1 setvar "internal_wired.ip.protocol" "permanent"\r\n' | nc 192.168.1.157 9100
printf '! U1 setvar "internal_wired.ip.addr" "192.168.1.157"\r\n' | nc 192.168.1.157 9100

The reservation is usually the safer of the two, because it is undone from the router rather than from a printer you can no longer reach.

Nothing answered on 9100 at all

See Zebra printer not responding on port 9100, which covers the difference between a refused connection and a timeout, and why only one program can hold the port at a time.

I have the address, now what?

Send it ZPL. cat label.zpl | nc 192.168.1.157 9100 is the whole protocol, and the printing guide covers Windows and the driver traps. If you would rather test without a printer at all, a virtual Zebra speaks the same raw 9100.

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).