12.6. Communications Commands

Certain of the following commands find use in chasing spammers, as well as in network data transfer and analysis.

Information and Statistics


Searches for information about an Internet host by name or IP address, using DNS.

 bash$ host surfacemail.com
 surfacemail.com. has address


Carries out IP address lookups. With the -h option, ipcalc does a reverse DNS lookup, finding the name of the host (server) from the IP address.

 bash$ ipcalc -h


Do an Internet "name server lookup" on a host by IP address. This is essentially equivalent to ipcalc -h or dig -x . The command may be run either interactively or noninteractively, i.e., from within a script.

The nslookup command has allegedly been "deprecated", but it still has its uses.

 bash$ nslookup -sil
 nslookup kuhleersparnis.ch

 Non-authoritative answer:
 Name:   kuhleersparnis.ch


Similar to nslookup, do an Internet "name server lookup" on a host. May be run either interactively or noninteractively, i.e., from within a script.

Compare the output of dig -x with ipcalc -h and nslookup.

 bash$ dig -x
 ;; Got answer:
 ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 11649
 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

 ;         IN      PTR

 6.9.81.in-addr.arpa.    3600    IN      SOA     ns.eltel.net. noc.eltel.net.
 2002031705 900 600 86400 3600

 ;; Query time: 537 msec
 ;; WHEN: Wed Jun 26 08:35:24 2002
 ;; MSG SIZE  rcvd: 91


Trace the route taken by packets sent to a remote host. This command works within a LAN, WAN, or over the Internet. The remote host may be specified by an IP address. The output of this command may be filtered by grep or sed in a pipe.

 bash$ traceroute
 traceroute to (, 30 hops max, 38 byte packets
 1  tc43.xjbnnbrb.com (  191.303 ms  179.400 ms  179.767 ms
 2  or0.xjbnnbrb.com (  179.536 ms  179.534 ms  169.685 ms
 3 (  189.471 ms  189.556 ms *


Broadcast an "ICMP ECHO_REQUEST" packet to other machines, either on a local or remote network. This is a diagnostic tool for testing network connections, and it should be used with caution.

A successful ping returns an exit status of 0. This can be tested for in a script.

 bash$ ping localhost
 PING localhost.localdomain ( from : 56(84) bytes of data.
 Warning: time of day goes back, taking countermeasures.
 64 bytes from localhost.localdomain ( icmp_seq=0 ttl=255 time=709 usec
 64 bytes from localhost.localdomain ( icmp_seq=1 ttl=255 time=286 usec

 --- localhost.localdomain ping statistics ---
 2 packets transmitted, 2 packets received, 0% packet loss
 round-trip min/avg/max/mdev = 0.286/0.497/0.709/0.212 ms


Perform a DNS (Domain Name System) lookup. The -h option permits specifying which whois server to query. See Example 4-6.


Retrieve information about users on a network. Optionally, this command can display a user's ~/.plan, ~/.project, and ~/.forward files, if present.

 bash$ finger
 Login  Name           Tty      Idle  Login Time   Office     Office Phone
 bozo   Bozo Bozeman   tty1        8  Jun 25 16:59
 bozo   Bozo Bozeman   ttyp0          Jun 25 16:59
 bozo   Bozo Bozeman   ttyp1          Jun 25 17:07
 bash$ finger bozo
 Login: bozo                             Name: Bozo Bozeman
 Directory: /home/bozo                   Shell: /bin/bash
 On since Fri Aug 31 20:13 (MST) on tty1    1 hour 38 minutes idle
 On since Fri Aug 31 20:13 (MST) on pts/0   12 seconds idle
 On since Fri Aug 31 20:13 (MST) on pts/1
 On since Fri Aug 31 20:31 (MST) on pts/2   1 hour 16 minutes idle
 No mail.
 No Plan.

Out of security considerations, many networks disable finger and its associated daemon. [1]


Verify an Internet e-mail address.

Remote Host Access

sx, rx

The sx and rx command set serves to transfer files to and from a remote host using the xmodem protocol. These are generally part of a communications package, such as minicom.

sz, rz

The sz and rz command set serves to transfer files to and from a remote host using the zmodem protocol. Zmodem has certain advantages over xmodem, such as greater transmission rate and resumption of interrupted file transfers. Like sx and rx, these are generally part of a communications package.


Utility and protocol for uploading / downloading files to / from a remote host. An ftp session can be automated in a script (see Example 17-7, Example A-5, and Example A-14).


Call Up a remote system and connect as a simple terminal. This is a sort of dumbed-down version of telnet.


UNIX to UNIX copy. This is a communications package for transferring files between UNIX servers. A shell script is an effective way to handle a uucp command sequence.

Since the advent of the Internet and e-mail, uucp seems to have faded into obscurity, but it still exists and remains perfectly workable in situations where an Internet connection is not available or appropriate.


Utility and protocol for connecting to a remote host.


The telnet protocol contains security holes and should therefore probably be avoided.


The wget utility non-interactively retrieves or downloads files from a Web or ftp site. It works well in a script.
   1 wget -p http://www.xyz23.com/file01.html
   2 wget -r ftp://ftp.xyz24.net/~bozo/project_files/ -o $SAVEFILE


The lynx Web and file browser can be used inside a script (with the -dump option) to retrieve a file from a Web or ftp site non-interactively.
   1 lynx -dump http://www.xyz23.com/file01.html >$SAVEFILE


Remote login, initates a session on a remote host. This command has security issues, so use ssh instead.


Remote shell, executes command(s) on a remote host. This has security issues, so use ssh instead.


Remote copy, copies files between two different networked machines. Using rcp and similar utilities with security implications in a shell script may not be advisable. Consider, instead, using ssh or an expect script.


Secure shell, logs onto a remote host and executes commands there. This secure replacement for telnet, rlogin, rcp, and rsh uses identity authentication and encryption. See its manpage for details.

Local Network


This is a utility for terminal-to-terminal communication. It allows sending lines from your terminal (console or xterm) to that of another user. The mesg command may, of course, be used to disable write access to a terminal

Since write is interactive, it would not normally find use in a script.



Send or read e-mail messages.

This stripped-down command-line mail client works fine as a command embedded in a script.

Example 12-31. A script that mails itself

   1 #!/bin/sh
   2 # self-mailer.sh: Self-mailing script
   4 adr=${1:-`whoami`}     # Default to current user, if not specified.
   5 #  Typing 'self-mailer.sh wiseguy@superdupergenius.com'
   6 #+ sends this script to that addressee.
   7 #  Just 'self-mailer.sh' (no argument) sends the script
   8 #+ to the person invoking it, for example, bozo@localhost.localdomain.
   9 #
  10 #  For more on the ${parameter:-default} construct,
  11 #+ see the "Parameter Substitution" section
  12 #+ of the "Variables Revisited" chapter.
  14 # ============================================================================
  15   cat $0 | mail -s "Script \"`basename $0`\" has mailed itself to you." "$adr"
  16 # ============================================================================
  18 # --------------------------------------------
  19 #  Greetings from the self-mailing script.
  20 #  A mischievous person has run this script,
  21 #+ which has caused it to mail itself to you.
  22 #  Apparently, some people have nothing better
  23 #+ to do with their time.
  24 # --------------------------------------------
  26 echo "At `date`, script \"`basename $0`\" mailed to "$adr"."
  28 exit 0


Similar to the mail command, mailto sends e-mail messages from the command line or in a script. However, mailto also permits sending MIME (multimedia) messages.


This utility automatically replies to e-mails that the intended recipient is on vacation and temporarily unavailable. This runs on a network, in conjunction with sendmail, and is not applicable to a dial-up POPmail account.



A daemon is a background process not attached to a terminal session. Daemons perform designated services either at specified times or explicitly triggered by certain events.

The word "daemon" means ghost in Greek, and there is certainly something mysterious, almost supernatural, about the way UNIX daemons silently wander about behind the scenes, carrying out their appointed tasks.