Does this site look plain?

This site uses advanced css techniques

For a customer project, we had to perform configuration of one of serveral ethernet print servers from Hawking Technology, and the result is a too that we document here. This small perl utility can query the local network for these printservers and plug in a few of the key TCP/IP parameters. This replaces the vendor-provided PSAdmin tool that runs only on Windows.

We've tested this program with the H-PS1U Ethernet-to-USB printserver, and the PN7127P Ethernet-to-Parallel printserver, and for all we know there are others in the product line for which it works as well. We did all of our development with Perl 5.6.1 on a Red Hat Linux 6.2 system, but hpsutil seems to work fine under Windows with ActivePerl 5.6.1. We also have a report from Chip Warden that it run well on Darwin 6.6/Mac OS X 10.2.6 with Perl 5.6.

Much more information about the techniques involved in configuring these printers can be found in our Tech Tip on the subject.

Tech Tip - Working with Hawking USB and Parallel Ethernet Print Servers

Command Line Parameters

--help
Show a brief help listing to the standard error stream and exit with failure status.
--version
Show the program's version info and exit
--ip=IP
Set the unit's IP address to IP. The tool performs very little validation, and it only accepts an IP address, not a hostname.
--mask=mask
Set the unit's IP subnet mask to mask (say, 255.255.255.0). The program does very little data validation.
--gw=IP
Set the unit's default gateway to IP address IP. Many units on a local network don't really require a default gateway if outside connectivity is not needed.
--pass=PW
Set the unit's password to PW, which will allow you to access and configure the unit. We have reports that this must be eight alphanumeric characters but have not looked into it in any detail.
--unit=N
Select unit N on a multi-device network. This unit number is not assigned by the unit itself, but by this program: if a network query brings multiple responses, they're presented to the user in alphabetical order based on the responding unit MAC addresses. A second query can include the --unit to select which of the multiple unit.
--multi
Presume that we might find more than one print server on the network, and allow for multiple queries and longer response timeouts. This is the default.
--nomulti
Presume there is only one print server on the network and exit the query phase immediately upon receiving the first response from any unit. This will ignore all other responses, so only use this parameter if you're sure there is only one on the network.
--verbose
Show a bit more detail on the conversations.
--ntries=N
When querying the network, send the magic broadcast packet N times (default = 3). Note that if the --nomulti parameter is given, then the first cuts off all subsequent query attempts.
--dhcp=bf
This asks that the EnableDHCP option be set or disabled in the printserver, and the bf Boolean flag can be any of yes/no on/off true/false 1/0.
--nosend
This suppresses actually sending the update packets to the unit, and it's only really useful when testing the code itself (say, when adding a new field). It is not very useful unless --verbose or --dumpbinary are also provided.
--dumpbinary
Show the full binary dump of the @i{data} (but not reset) packets sent, and the responses received. This is only useful if you're developing the code itself.

Examples

When first running the program on the local network, always do so with no parameters: this allows it to query multiple times for as many printservers are found. It also shows the password required for telnet access ("unixwiz"), which is blank by default but can be changed by the user.

$ hpsutil
Sending magic packet to 255.255.255.255:20560/udp
--> got new reply from 00:40:01:20:66:CF
Sending magic packet to 255.255.255.255:20560/udp
  Read 1030 bytes from sender
Sending magic packet to 255.255.255.255:20560/udp
  Read 1030 bytes from sender

[UNIT 1]
    EnableDHCP           = {Yes}
    Firmware             = {5.61.13E}
    Gateway              = {10.1.1.254}
    IPAddress            = {10.1.1.106}
    MACAddress           = {00:40:01:20:66:CF}
    Netmask              = {255.255.255.0}
    Password             = {unixwiz}
    PrinterName          = {1P_PrintServ2066CF}

Now that we've identified the unit in question (including noting that there is only one on the network in spite of multiple queries), we're ready to set the IP address on the unit. In this case, the DHCP server on our network has programmed in most of the IP parameters, but we'll set them this way nevertheless for illustration. After setting the parameters, we'll query only again just to verify:

$ hpsutil --nomulti --ip=10.1.1.220 --gw=10.1.1.254 --mask=255.255.255.0
Sending magic packet to 255.255.255.255:20560/udp
--> got new reply from 00:40:01:20:66:CF

[UNIT 1]
    EnableDHCP           = {Yes}
    Firmware             = {5.61.13E}
    Gateway              = {10.1.1.254}
    IPAddress            = {10.1.1.106}
    MACAddress           = {00:40:01:20:66:CF}
    Netmask              = {255.255.255.0}
    Password             = {unixwiz}
    PrinterName          = {1P_PrintServ2066CF}
Setting unit 1 (00:40:01:20:66:CF)

$ hpsutil --nomulti
Sending magic packet to 255.255.255.255:20560/udp
--> got new reply from 00:40:01:20:66:CF

[UNIT 1]
    EnableDHCP           = {Yes}
    Firmware             = {5.61.13E}
    Gateway              = {10.1.1.254}
    IPAddress            = {10.1.1.220} <-- parameter has been changed
    MACAddress           = {00:40:01:20:66:CF}
    Netmask              = {255.255.255.0}
    Password             = {unixwiz}
    PrinterName          = {1P_PrintServ2066CF}

Download

Download the program here:

Download hpsutil-1.04.txt «« Latest (2004/03/12)

This is a Perl program, but we've used the .txt extension to make it easier to fetch via the web. Once downloaded, remove the extension (and version), make it executable with chmod a+x hpsutil, and install it in a common place, such as /usr/local/bin.

Revision History

v1.00 - 2003/03/03
Initial development and release
v1.01 - 2003/04/21
Added the --pass=PW parameter to allow ressetting the unit's password to allow reconfiguration. This change submitted by Chad Vogelsong.
v1.02 - 2003/07/13
We now rotate through more than one query string when trying to locate units on the network (apparently different products respond to different strings). The program still sends the same packet to set the information as the previous version - we're not sure if this has to be changed as well - but this at least should locate more printservers. Thanks to Dave Rugh for the heads up on this.
v1.03 - 2004/03/06
Added the --dhcp option (suggested by Kevin Weeks)
v1.04 - 2004/03/12
Actually tested the --dhcp param (sorry Kevin), added --nosend and --dumpbinary parameters.