home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume26
/
con
/
part01
next >
Wrap
Text File
|
1993-06-28
|
46KB
|
1,332 lines
Newsgroups: comp.sources.unix
From: navarra@casbah.acns.nwu.edu (John Navarra)
Subject: v26i276: con - user-friendly network connection utility, Part01/01
Sender: unix-sources-moderator@gw.home.vix.com
Approved: vixie@gw.home.vix.com
Submitted-By: navarra@casbah.acns.nwu.edu (John Navarra)
Posting-Number: Volume 26, Issue 276
Archive-Name: con/part01
Con is a perl script which facilitates con(tacting) different hosts
using a variety of options. It was written so its users did not have
to make a mess of functions, aliases, or other strange contortions
so they could get at their favorite computers. Instead, con uses a
file called .hosts (or whatever you want to call it), and a few
environmental variables to determine what exactly you want to do
with minimal typing. The basic idea is that you have already provided
the information beforehand and are now just using it again. For instance,
the typical entry in .hosts looks like this:
129.105.113.53 <TAB> casbah.acns.nwu.edu sunny <TAB> navarra
The format is exactly like /etc/hosts except for the possible third
field.
Now, con makes use of this information in the following way. Say you
want to rsh to casbah.
with con:
$ con -r cas
$ [alternatively] rsh casbah.acns.nwu.edu -l navarra
Now, say you had a .rhosts entry for yourself on casbah and you wanted
to use rsh to look at a file on a remote machine. With con, this becomes,
$ con -r cas cat filename
$ [alternatively] rsh casbah.acns.nwu.edu -l navarra cat filename
Not good enough you say! (surely you jest). You tell me your shell has
hostname completion so I can easily expand casbah. Then, con is not saving
me all that much typing. Ok, I see your point. Therefore, con also uses
the enviromental variable DEFAULT_OPT=/usr/ucb/rsh (that is what it is
recommended to be anyway). Now, the command to check your file is now
down to this:
$ con cas cat filename
What? Still not good enough! (my you are hard to please! ;-)
Well, what if you could make a link to con, (call it say, casbah) and
have con recognize what you want to do. Ok, now the command becomes
$ casbah cat filename
or to log in as someone else
$ casbah -l jarvis
or to finger someone
$ casbah -F jarvis
talk
$ casbah -T jarvis
or mail jarvis some really cool material! ;-)
$ casbah -m jarvis Interesting Stuff < alt.sex.beastiality
(so jarvis is kinda weird.)
And there are many other cool options which all save time when typing. The
con man page goes into all the excruciating detail.
Con is free. However, if you want to send me money -- sure, I'll
take it. I do not have any formal copyright on con -- all that legal stuff
is garbage anyway. I only ask that you leave my name attached to this
program. If you want to make any modifications, or have any suggestions,
criticisms, ideas, etc, feel free to mail them to me.
Enjoy,
John Navarra
navarra@nwu.edu
Northwestern University
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: README aftp con con.man sample_hostsfile
# Wrapped by navarra@casbah.acns.nwu.edu on Sun Jul 5 22:22:05 1992
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'README' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(2559 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
X
XCon is a perl script which facilitates con(tacting) different hosts
Xusing a variety of options. It was written so its users did not have
Xto make a mess of functions, aliases, or other strange contortions
Xso they could get at their favorite computers. Instead, con uses a
Xfile called .hosts (or whatever you want to call it), and a few
Xenvironmental variables to determine what exactly you want to do
Xwith minimal typing. The basic idea is that you have already provided
Xthe information beforehand and are now just using it again. For instance,
Xthe typical entry in .hosts looks like this:
X
X129.105.113.53 <TAB> casbah.acns.nwu.edu sunny <TAB> navarra
X
XThe format is exactly like /etc/hosts except for the possible third
Xfield.
X
XNow, con makes use of this information in the following way. Say you
Xwant to rsh to casbah.
Xwith con:
X
X $ con -r cas
X $ [alternatively] rsh casbah.acns.nwu.edu -l navarra
X
X
XNow, say you had a .rhosts entry for yourself on casbah and you wanted
Xto use rsh to look at a file on a remote machine. With con, this becomes,
X
X $ con -r cas cat filename
X $ [alternatively] rsh casbah.acns.nwu.edu -l navarra cat filename
X
XNot good enough you say! (surely you jest). You tell me your shell has
Xhostname completion so I can easily expand casbah. Then, con is not saving
Xme all that much typing. Ok, I see your point. Therefore, con also uses
Xthe enviromental variable DEFAULT_OPT=/usr/ucb/rsh (that is what it is
Xrecommended to be anyway). Now, the command to check your file is now
Xdown to this:
X
X $ con cas cat filename
X
XWhat? Still not good enough! (my you are hard to please! ;-)
XWell, what if you could make a link to con, (call it say, casbah) and
Xhave con recognize what you want to do. Ok, now the command becomes
X
X $ casbah cat filename
X
Xor to log in as someone else
X
X $ casbah -l jarvis
X
Xor to finger someone
X
X $ casbah -F jarvis
X
Xtalk
X $ casbah -T jarvis
X
Xor mail jarvis some really cool material! ;-)
X
X $ casbah -m jarvis Interesting Stuff < alt.sex.beastiality
X
X(so jarvis is kinda weird.)
XAnd there are many other cool options which all save time when typing. The
Xcon man page goes into all the excruciating detail.
X
X Con is free. However, if you want to send me money -- sure, I'll
Xtake it. I do not have any formal copyright on con -- all that legal stuff
Xis garbage anyway. I only ask that you leave my name attached to this
Xprogram. If you want to make any modifications, or have any suggestions,
Xcriticisms, ideas, etc, feel free to mail them to me.
X
XEnjoy,
X
XJohn Navarra
Xnavarra@nwu.edu
X
X
END_OF_FILE
if test 2559 -ne `wc -c <'README'`; then
echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'aftp' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'aftp'\"
else
echo shar: Extracting \"'aftp'\" \(1588 characters\)
sed "s/^X//" >'aftp' <<'END_OF_FILE'
X#! /bin/perl
X
X# aftp -- A simple perl script to automate anonymous ftp to a site to
X# get file(s). Aftp comes with the con distribution but may also
X# be used separately. For more details using aftp, see the con
X# man page.
X# Author: John Navarra (navarra@casbah.acns.nwu.edu)
X
X# set up some variables
X$MODE=$ENV{'MODE'};
X$FTP='/usr/ucb/ftp';
X$ME=$ENV{'USER'};
X$HOSTNAME=`hostname`;
X
Xsub y_or_n {
X local($prompt) = @_;
X print STDOUT $prompt;
X local($answer)=scalar(<STDIN>);
X if ( $answer !~ /^n/i ) {
X }
X else {
X if ($MODE =~ ascii) {
X $MODE=bin;
X }
X else {
X $MODE=ascii;
X }
X }
X
X}
X# If aftp was not called with an ascii or bin option so we will go thru
X# some rigamorole to figure out the correct mode.
Xif ($ARGV[0] !~ /^-/) {
X &y_or_n("Transfer using $MODE mode? [yes] ");
X}
X
Xwhile ($ARGV[0] =~ /^-/) {
X $_ = shift;
X if (/^-ascii|^-a/) {
X $MODE=ascii;
X }
X elsif (/^-bin|^-b/) {
X $MODE=bin;
X }
X else {
X print "aftp: not an option! Use -a[scii] or -b[in] \n";
X exit(0);
X }
X}
X$computer=shift;
Xprint "Ftping to $computer using $MODE mode ... \n ";
X
X# Let's do some ftp shall we?
Xopen(FTP, "| $FTP -n $computer");
Xprintf(FTP "user anonymous $ME@$HOSTNAME \n");
Xprintf(FTP "$MODE \n" );
Xforeach $path (@ARGV) {
X ($basename = $path) =~ s!.*/!!;
X if ($basename eq '*' ) {
X ($dirpath = $path) =~ s!/[^/]*$!!;
X printf(FTP "cd $dirpath \n");
X printf(FTP "prompt \n");
X printf(FTP "mget * \n");
X }
X else {
X printf(FTP "get $path $basename \n");
X }
Xclose (FTP);
X}
X
Xprint "Got it! \n ";
X
END_OF_FILE
if test 1588 -ne `wc -c <'aftp'`; then
echo shar: \"'aftp'\" unpacked with wrong size!
fi
chmod +x 'aftp'
# end of 'aftp'
fi
if test -f 'con' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'con'\"
else
echo shar: Extracting \"'con'\" \(22079 characters\)
sed "s/^X//" >'con' <<'END_OF_FILE'
X#! /bin/perl
X'di';
X'ig00';
X#
X# $Header$
X#
X# $Log$
X# Name: Con a program to facilitate contacting other machines in a number
X# Version: 1.1 of different ways.
X# Author: John Navarra (navarra@nwu.edu)
X
X#=====================CON CONFIGURATION SECTION=============================#
X# Special variables
X
X# The user may also want to consider setting $HOSTSFILE to his
X# hostname_completion_file (bash) or to whatever variable or path is
X# appropriate depending on your shell.
X$HOSTSFILE=$ENV{'HOSTSFILE'};
X
X# we use rsh so you can specify a command on the command-line.
X# I use the enviromental variable DEFAULT_OPT so more than one person
X# can run the same con with different default options set
X$DEFAULT_OPT=$ENV{'DEFAULT_OPT'};
X$ME=$ENV{'USER'};
X
X# if $CHECK_HOST is set to 'yes' then failed matches of possible hostnames
X# in $HOSTSFILE will result in a query asking the user if that match is
X# desired as an addition to the hosts file. Otherwise, con will return
X# with the error message "Couldn't find pattern in hosts file."
X$CHECK_HOST=$ENV{'CHECK_HOST'};
X
X# The enviromental variable MAILER is used to determine which mail
X# program to use. Con barfs with /bin/mail (which no one should be
X# using anyway.
X$MAILER=$ENV{'MAILER'};
X
X# regular commands and paths. Change these if not correct.
X$AFTP='/home/u3/navarra/src/con_perl/beta1/aftp';
X$FINGER='/usr/ucb/finger';
X$FTP='/usr/ucb/ftp';
X#Mail is the default. Don't use braindead /bin/mail unless you have to.
X$PING='/usr/etc/ping';
X$RLOGIN='/usr/ucb/rlogin';
X$RSH='/usr/ucb/rsh';
X$TALK='/usr/ucb/talk';
X$OTALK='/usr/ucb/otalk';
X$TELNET='/usr/ucb/telnet';
X$TRACEROUTE='/usr/etc/traceroute';
X
X#============================================================================#
X
X# make this program show up on ps as con.
X$0 = $0;
X
X# Usage message subroutine.
Xsub USAGE_MESG {
X print "Usage: con [-options] machine \n";
X}
X# Yes or no subroutine.
Xsub y_or_n {
X local($prompt) = @_;
X print STDOUT $prompt;
X local($answer)=scalar(<STDIN>);
X exit (0) if $answer =~ /^n/i;
X}
X# Subroutine to collect entry for hostsfile.
Xsub FORM_ENTRY {
X foreach $arg (@_) {;
X print "Enter info or hit return to accept [$arg] ";
X chop($response=scalar(<STDIN>));
X $response=$response || $arg;
X }
X $response;
X}
X# Subroutine to make entry in hostsfile
Xsub MAKE_ENTRY {
Xopen(HOSTSFILE, ">>$HOSTSFILE") || die "can't open $HOSTSFILE: $! \n";
Xif ($username) {
Xprintf(HOSTSFILE "$ipaddress $machine $username\n");
X}
Xelse {
Xprintf(HOSTSFILE "$ipaddress $machine\n");
X}
Xclose(HOSTSFILE);
X#should we exit after updating hostfile or continue? You can always !!
Xexit(0);
X}
X# Subroutine to get ip address of a machine.
Xsub GET_IP {
X ($domain, $aliases)=split(/ /,$machine);
X $addrs = (gethostbyname($domain))[4];
X ($a, $b, $c, $d)=unpack('C4', $addrs);
X $IP="$a.$b.$c.$d";
X
X}
X# Subroutine to get proper username when contacting machine.
Xsub GET_PROPER_NAME {
X $id=shift(@ARGV);
X #check if id is a tty. If so, unshift to get back @ARGV.
X if ( $id =~ /tty\w\d/) {
X unshift(@ARGV, $id);
X $propername=$username || $ME;
X }
X else {
X $propername=$id || $username || $ME;
X }
X}
X
X# Subroutine to get correct info from HOSTSFILE.
Xsub GET_COMP {
X open(HOSTSFILE, $HOSTSFILE ) || die "Can't open $HOSTSFILE: $! \n";
X # For rsh-like ability. You can ln -s con host and then just
X # type host -option etc to run con.
X if ( $0 =~ /con/) {
X $pattern = shift(@ARGV);
X }
X else {
X ($pattern=$0) =~ s!.*/!!;
X }
X while (<HOSTSFILE>) {
X if (/$pattern/) {
X ($IP, $computer, $username)=split(/ /,$_);
X #ok, this is a big pain but it is neccessary to make sure
X #right thing is chopped.
X if ($username) {
X chop $username;
X }
X else {
X chop $computer;
X }
X #want to use FQDN so ftp can make use of .netrc file.
X ($domain, $aliases)=split(/ /,$computer);
X }
X }
X if (!$computer && $CHECK_HOST eq 'yes') {
X &y_or_n("No pattern in hostfile. Do you want to make an entry [yes]");
X print "ok, your will be prompted separately for a domain name \n";
X print "with aliases, an IP address, and a possible username. \n";
X $machine=&FORM_ENTRY($pattern);
X &GET_IP;
X $ipaddress=&FORM_ENTRY($IP);
X $username=&FORM_ENTRY("");
X &y_or_n("Accept: $ipaddress $machine $username [yes]");
X &MAKE_ENTRY;
X }
X if (!$computer) {
X print "Couldn't find $pattern in $HOSTSFILE \n";
X exit(0);
X }
X}
X
X
X#======================== Begin main program ===============================#
X
X#Do Null switch checking first. If this succedes, use DEFAULT OPTION.
Xif ($ARGV[0] !~ /^-/) {
X &GET_COMP;
X if ( $username =~ anonymous ) {
X if (@ARGV) {
X #aftp is automatically called with no option. Aftp will take care
X #of finding the right mode for file transfer.
X print "$AFTP to $domain getting file @ARGV \n";
X system("$AFTP $domain @ARGV");
X }
X else {
X #print "$FTP to $domain \n";
X system("$FTP $domain");
X }
X }
X elsif ( $DEFAULT_OPT eq $RSH ) {
X #the line below assures a propername existing. However, if you do
X #not want to rsh with $username or $ME, rsh will still accept the
X #line 'rsh host -l username1 -l username2 [commands]'
X $propername= $username || $ME;
X #print "Null switch: $DEFAULT_OPT to $IP with $propername @ARGV .\n";
X system("$DEFAULT_OPT $IP -l $propername @ARGV");
X exit(0);
X }
X else {
X # telnet is the next likely default selection -- use that syntax.
X system("$DEFAULT_OPT $IP @ARGV");
X }
X}
X
X# Parse other options.
X
Xwhile ($ARGV[0] =~ /^-/) {
X $_ = shift;
X if (/^-l/) {
X &GET_COMP;
X print "Internet Address: $IP \n";
X print "Computer name: $computer \n";
X print "Domain name: $domain Aliases: $aliases \n";
X $username='<none>' if (!$username);
X print "Common username (or friend): $username \n";
X exit(0);
X }
X elsif (/^-w/) {
X open(HOSTSFILE, ">>$HOSTSFILE") || die "can't open $HOSTSFILE: $! \n";
X printf(HOSTSFILE "@ARGV\n");
X close(HOSTSFILE);
X print "appended @ARGV to $HOSTSFILE \n";
X exit(0);
X }
X elsif (/^-h/) {
X print STDOUT <<"END_OF_HELP";
X
X Con help screen (anything in [] are optional)
X
XOption usage explanation usage
X------------------------------------------------------------------------------
X""|-r rsh host [username] [commands] con -r host [username] [cmds]
X-t telnet host [port] con -t host [port]
X-f ftp host [filename] con -f host [/pathtofile]
X-F finger [-fopt] username@host con -F host [user] [fopt]
X-h print brief help screen con -h
X-l list host info con -l host
X-m Mail|elm [-s subject] username@host con -m host [user] ['Subject']
X-p ping [-option] host [other] con -p host [-opt] [other]
X-R traceroute [[-opt] other] host con -R host [[-opt other]
X-T|To [o]talk username@host [tty] con -T[o] host [user] [tty]
X Note: no packetsize opt available.
X-w direct write to HOSTFILE con -w 'IP<TAB>addr<TAB>name'
X
XEND_OF_HELP
X
X print STDOUT "\f";
X }
X elsif (/^-p/) {
X &GET_COMP;
X # make con [-p] host [-option]
X if (@ARGV[0] =~ /^-/) {
X $add_opts=shift(@ARGV);
X #print "loop1: $PING $add_opts $IP @ARGV \n";
X system("$PING $add_opts $IP @ARGV");
X }
X else {
X #print "loop 2: $PING $IP @ARGV \n";
X system("$PING $IP @ARGV");
X }
X }
X elsif (/^-R/) {
X #No packet capibility. Too hard to parse all the options to traceroute
X &GET_COMP;
X system("$TRACEROUTE @ARGV $IP");
X exit(0);
X }
X elsif (/^-r/) {
X &GET_COMP;
X #propername will always exist.
X $propername= $username || $ME;
X #print "$RSH $IP -l $propername @ARGV \n";
X system("$RSH $IP -l $propername @ARGV");
X exit(0);
X }
X elsif (/^-f|^-fa|^-fb/) {
X if (/^-fa/) {
X &GET_COMP;
X #call auto ftp program and get file(s).
X print "aftp -a to $domain for file(s) @ARGV \n";
X system("$AFTP -ascii $domain @ARGV");
X }
X elsif (/^-fb/) {
X &GET_COMP;
X print "aftp -b to $domain for file(s) @ARGV \n";
X system("$AFTP -bin $domain @ARGV");
X }
X else {
X &GET_COMP;
X if (@ARGV) {
X #again, aftp will find the right mode.
X print "aftp to $domain for file(s) @ARGV \n";
X system("$AFTP $domain @ARGV");
X }
X else {
X print "$FTP to $domain \n";
X system("$FTP $domain");
X }
X }
X exit(0);
X }
X elsif (/^-t/) {
X &GET_COMP;
X if (@ARGV) {
X print "$TELNET to $IP on port # @ARGV \n";
X system("$TELNET $IP @ARGV");
X }
X #this will match any number (I think). If you have a username
X #consisting of entirely numbers, con will think it is a valid
X #port # with the -t option. I don't think this is usually the
X #case so for now, a legit port number can be in the username
X #field for use with this option.
X elsif ($username =~ /^(\d+\.?\d*)$/) {
X print "$TELNET to $IP on port # $username \n";
X system("$TELNET $IP $username");
X }
X else {
X print "$TELNET to $IP \n";
X system("$TELNET $IP");
X }
X exit(0);
X }
X elsif (/^-m/) {
X &GET_COMP;
X &GET_PROPER_NAME;
X print "$MAILER -s \"@ARGV\" $propername@$domain \n";
X #exec this in a subshell so '< filename' can be used on
X #the commmand line
X system("($MAILER -s \"@ARGV\" $propername@$domain)");
X exit(0);
X }
X elsif (/^-F/) {
X #make finger [-opts] username@host
X &GET_COMP;
X if (@ARGV[0] =~ /^-/) {
X $finger_opt=shift(@ARGV);
X &GET_PROPER_NAME;
X #print "loop1: $FINGER $finger_opt $propername@$IP \n";
X system("$FINGER $finger_opt $propername@$IP");
X exit(0);
X }
X else {
X &GET_PROPER_NAME;
X #print "loop2: $FINGER @ARGV $propername@$IP \n";
X system("$FINGER @ARGV $propername@$IP");
X exit(0);
X }
X }
X elsif (/^-T|^-To/) {
X #make talk username@host [tty]
X if (/^-To/) {
X &GET_COMP;
X &GET_PROPER_NAME;
X #print "loop1: $OTALK $propername@$IP @ARGV\n";
X system("$TALK $propername@$IP");
X exit(0);
X }
X else {
X &GET_COMP;
X &GET_PROPER_NAME;
X #print "loop2: $TALK $propername@$IP @ARGV \n";
X system("$TALK $propername@$IP");
X exit(0);
X }
X }
X else {
X print "Unrecognized switch: $_ \n";
X &USAGE_MESG;
X }
X}
X
X
X
X###############################################################
X
X # These next few lines are legal in both Perl and nroff.
X
X.00; # finish .ig
X
X'di \" finish diversion--previous line must be blank
X.nr nl 0-1 \" fake up transition to first page again
X.nr % 0 \" start at page 1
X'; __END__ ##### From here on it's a standard manual page #####
X
X.TH CON 1 "May 2, 1992"
X.AT 3
X.SH NAME
Xcon \- A program to facilitate contacting a host in a variety of ways.
X.SH SYNOPSIS
X.B con
X[
X.B -''fFhlmprRtTw
X] [
X.B hostname
X] [
X.B other
X]
X.SH DESCRIPTION
X.I Con
Xis a perl script that facilitates the various ways of connecting to a
Xmachine, remote or local, by minimizing the repetitive (and unneeded)
Xtyping one has to do to uniquely identify a host, a login name, and an
Xoption (telnet, rlogin, etc).
X.I Con
Xis used in conjunction with a few environmental variables and a hosts
Xfile whose syntax is similiar to /etc/hosts.
X
XThe primary environmental variable used is
X.I HOSTSFILE
Xwhich specifies the path to a file which contains the following information:
X
XIP ADDRESS domain name aliases possible username
X129.105.113.52 casbah.acns.nwu.edu cas navarra
X
XEach field must be separated by a <TAB> and each domain name alias must
Xbe separated by a <SPACE>. The HOSTSFILE need not reside in your home
Xdirectory (although that is probably wise). For bash and/or zsh compatibility
Xyou can set HOSTSFILE to whatever file you use for hostname completion.
X
X.I Con
Xuses the HOSTSFILE as a reference to find the correct computer (and possible
Xusername) to use when called with one of many options. Thus, the user need
Xnot type the full domain name address to connect, only enough to uniquely
Xidentify the requested computer. For possible hosts casbah.acns.nwu.edu and
Xcannibal.acns.nwu.edu, the user could identify casbah with the call 'con
Xcas' but not with the call 'con ca'.
X
X.SH USAGE
X
X.I Con
Xhas many different options. Some of those are used far more than others.
XFor that reason,
X.I con
Xuses the variable
X.I DEFAULT_OPT
Xas a null option. The configuration section sets up DEFAULT_OPT as an
Xenviromental variable. This need not be the case if all who use con agree
Xon a DEFAULT_OPT. It is recommended that
X.I rsh
Xbe used for reasons which will become apparent later in the document. For
Xthe sake of explaining the use of
X.I con,
XI will assume this is the case.
X
X.SH OPTIONS
X
X""|-r) rsh host [username] [commands] or
X ftp [or auto ftp] host [filename]
X
Xpart 1 [rsh]:
X The most common use for
X.I con
Xwill be logging into a remote computer. The null option or -r option
Xuses the same syntax as
X.I rsh.
XThe proper username to use with this option is determined as follows:
XA username specified on the command line is used before any username in
XHOSTSFILE. To specify a username on the command line, use the same
Xsyntax as
X.I rsh:
X
X %example: con cas -l username [commands]
X
XIf no username is specified on the commmand line, the username in the
Xthird field of HOSTSFILE is used. If no username exists in HOSTSFILE
Xthen the username on the local machine ($USER) is used. Note: because
Xthis option always defaults to $USER, there is no reason to put your
Xusername on local machine as the third field in HOSTSFILE.
X
XLike rsh,
Xif the name of the file from which
X.I con
Xwas executed is anything other
Xthan ``con'', that name will be used as its
X.I hostname
Xargument. Thus, if a symbolic link is made to con with a unique hostname
Xto search for in HOSTSFILE, that name will be used (along with any con
Xoption) to connect to a host. This feature is particularly useful to
Xcut down on needless typing. All command lines will now be of the form:
X
X hostname -con_opt [-other_opt] [username] [other]
X %example: casbah -r -l bill cat file
X #rsh casbah.acns.nwu.edu -l bill cat file
X
Xpart 2 [ftp]:
X If the username field of HOSTSFILE contains the string 'anonymous',
X.I con
Xwill prform an ftp to the host.
X.I Con
Xwill work in conjunction with the
X.I .netrc
Xfile to automatically log you into the remote computer.
X
XIf a path-to-filename is given as the last argument,
X.I con
Xwill use the
X.I aftp
X[auto ftp] program which comes with the distribution. This program will
XNOT use your
X.I .netrc
Xfile but will log you in to the remote host with 'local_username@local_host'.
XThe filename MUST be the full path name to the file you want to get.
X.I Aftp
Xuses the enviromental variable MODE (bin or ascii) to determine which
Xmode you want to transfer your file with. However, just as a precaution,
X.I aftp
Xasks for confirmation before it gets the file. The recieved file is left
Xin whatever directory
X.I con
Xwas invoked from.
X.I Aftp
Xcan also get multiples files from one directory, just include a ``*''
Xin the full pathname argument.
X
X %example: con prep
X #username=anonymous ==> ftp prep.ai.mit.edu
X %example: con prep /pub/gnu/filename.tar.Z
X #auto ftp to prep for filename.tar.Z
X %example: con uu /published/unix-world/*
X #auto ftp to ftp.uu.net to do an mget on all
X #files in directory /published/unix-world.
X
XThe auto ftp program is not extraordinarily robust. If you want to use
Xyour own, make sure the path is changed in the Configuration section. More
Xfeatures may be added to
X.I aftp
Xlater.
X
X-t) telnet host [port]
X
X A port number may be specified on the command line or as a username
Xin HOSTSFILE. As usual, if a port number is specified on the command line,
Xit will take precedence over the username field.
X
X %example: con -t phoenix 25
X #telnet to mail port on phoenix.whatever
X
XNote: if you use telnet as a default option, the port number ability in
XHOSTSFILE is lost. The number check is only made when using this option.
X
X-f|-fa|-fb) ftp [or auto ftp] host [filename]
X
X This option works in the same manner described above to ftp to a
Xhost. The difference is that the user may specify directly what mode
Xhe wants the files to be transferred in (thus bypassing confirmation
Xby
X.I aftp
X)
XAlso, this option, (-f), is used for hosts which are not strictly going
Xto be contacted for anonymous ftp (no 'anonymous' string in HOSTSFILE).
X
X-F) finger [-opts] username@host
X
X This option is used to finger a username. Any valid finger option can
Xbe used but must be the last argument. The username precedence is the same
Xas above.
X
X %example: con -F cas nut-boy [-l]
X #finger [-l] nut-boy@casbah.acns.nwu.edu
X
X %example: con -F prin -s
X #finger -s (name in 3rd field)@princeton.edu
X
X-h) print out brief help screen
X
X This option displays a half-page help screen which shows how the
Xvarious options are used.
X
X-l) list host
X
X This option is used to check an entry in HOSTSFILE. If a pattern is
Xfound, the relevant information on that host is displayed:
X
X %example: con -l casbah
X Internet Address: 129.105.113.52
X Domain name (aliases): casbah.acns.nwu.edu
X Common username (or friend): <none>
X
X
X-m) Mail or elm [-s "Subject"] username@host [ < filename ]
X
X This option is used to send mail. It uses the enviromental variable
X.I MAILER
Xto determine which mail program to use. It is recommended that either
Xelm or Mail are used (no other mailers have been tested so far). Again,
Xas in all other options, this option determines which username to use
Xbased on the order of precedence described above. However, if the user
Xwants to specify a Suject on the command line, he MUST specify a username.
XOtherwise, the info passed to the mailer can become botched.
X
X %example: con -m cas #MAILER=elm
X #elm -s "" navarra@casbah.acns.nwu.edu
X #sends a null subject line and puts user in
X #send only mode.
X
X %example: con -m cas bill this is a test
X #elm -s "this is a test" bill@casbah
X #the username bill must be included.
X
X %example: con -m cas < filename
X #elm -s "" navarra@casbah < filename
X
X %example: con -m cas fred Schedule < Schedule
X #elm -s "Schedule" fred@casbah < Schedule
X
XIn the last two examples, a file was transmitted. For this operation,
X.I con
Xcreates a subshell and the contents of filename are sent to it to be
Xprocessed by the mailer.
X
X-p) ping [-opts] host [other]
X
X This option is used to do a ping on a host. All ping options should
Xbe available.
X
X %example: con -p cas -v
X #ping -v casbah.acns.nwu.edu
X
X %example: con -p cas -s 64 2
X #ping -s casbah.acns.nwu.edu 64 2
X
X-R) traceroute [opt [other]] host
X
X This option is used to do a traceroute to a host. Because of the
Xnumerous options to traceroute, the packetsize option is not available
Xdue to parsing problems. All other options are available.
X
X %example: con -R sage -n
X #traceroute -n sage.cc.purdue.edu
X
X %example: con -R sage -nm 5
X #traceroute -nm 5 sage.cc.purdue.edu
X
X-T|To) [o]talk username@host [tty]
X
X This option is used to talk to username. Because some vendors are
Xstill using the braindead otalk (now who could that be?), a -To option
Xis available. The username precedence is the same as above.
X
X %example: con -T cas jarvis ttyp1
X #talk jarvis@casbah.acns.nwu.edu ttyp1
X
X %example: con -To thor
X #username=dick ==> otalk dick@thor
X
X
X-w) direct write to HOSTSFILE
X
X This option is used to make an entry in HOSTSFILE. It is assumed that
Xthe user knows the relavent information neccesary to make a proper entry
X(IP# domain alias username). The entry must be enclosed in quotes
Xwith the proper TABS between the fields. A TAB can be entered on the
Xcommand line by typing C-V TAB (control-v TAB). The entry is appended to
Xthe end of HOSTSFILE.
X
X %example: con -w "129.10.11.3<TAB>io.nwu.edu<TAB>biff"
X
X.I Con
Xalso provides a more user-friendly way to make entries in HOSTSFILE.
XIf the environmental variable
X.I CHECK_HOST
Xis set to ``yes'', then for any hostname pattern entered on the command
Xline not found in HOSTSFILE, the user will be prompted if he wants to
Xmake an entry. The process is demonstrated as follows:
X
X[casbah:112] ~ -> con cas
X.PD 0
X.TP
XNo pattern in hostfile. Do you want to make an entry [yes]
X.TP
Xok, your will be prompted separately for a domain name
X.TP
Xwith aliases, an IP address, and a possible username.
X.TP
XEnter info or hit return to accept [cas] casbah.acns.nwu.edu
X.TP
XEnter info or hit return to accept [129.105.113.52]
X.TP
XEnter info or hit return to accept [] fred
X.TP
XAccept: 129.105.113.52 casbah.acns.nwu.edu fred [yes]
X.br
X
XNote that the IP address is resolved if given a legitimate domain name.
XIn that way, the user just needs to hit RETURN to accept the address
Xand
X.I con
Xwill make sure it is written correctly to HOSTSFILE. Note also the
Xthe default username is nothing (fred was used in the example).
X
X
X
X.SH ENVIRONMENTAL VARIABLES
X.PD 0
X.B HOSTSFILE
X.TP
X.B DEFAULT_OPT
X.TP
X.B CHECK_HOST
X.TP
X.B MAILER
X.TP
X.B MODE
X.br
X
X.SH FILES
X.PD 0
X.B $HOME/$HOSTSFILE
X.TP
X.B ./aftp (auto ftp program)
X.br
X
X.SH AUTHOR
X.PD 0
X.B John Navarra (navarra@nwu.edu)
X.TP
X.B Academic Computing and Networking Services
X.TP
X.B Northwestern University
X.br
X
X.SH BUGS
XThere are probably a few bugs here and there. I have only tested
X.I con
Xon a SunOS and Mach machines. I am interested in hearing about any
Xbugs and suggestions for improvement.
X
END_OF_FILE
if test 22079 -ne `wc -c <'con'`; then
echo shar: \"'con'\" unpacked with wrong size!
fi
chmod +x 'con'
# end of 'con'
fi
if test -f 'con.man' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'con.man'\"
else
echo shar: Extracting \"'con.man'\" \(12318 characters\)
sed "s/^X//" >'con.man' <<'END_OF_FILE'
X
XCON(1) USER COMMANDS CON(1)
X
XNAME
X con - A program to facilitate contacting a host in a variety
X of ways.
X
XSYNOPSIS
X con [ -''fFhlmprRtTw ] [ hostname ] [ other ]
X
XDESCRIPTION
X Con is a perl script that facilitates the various ways of
X connecting to a machine, remote or local, by minimizing the
X repetitive (and unneeded) typing one has to do to uniquely
X identify a host, a login name, and an option (telnet, rlo-
X gin, etc). Con is used in conjunction with a few environmen-
X tal variables and a hosts file whose syntax is similiar to
X /etc/hosts.
X
X The primary environmental variable used is HOSTSFILE which
X specifies the path to a file which contains the following
X information:
X
X IP ADDRESS domain name aliases possible username
X 129.105.113.52 casbah.acns.nwu.edu cas navarra
X
X Each field must be separated by a <TAB> and each domain name
X alias must be separated by a <SPACE>. The HOSTSFILE need not
X reside in your home directory (although that is probably
X wise). For bash and/or zsh compatibility you can set
X HOSTSFILE to whatever file you use for hostname completion.
X
X Con uses the HOSTSFILE as a reference to find the correct
X computer (and possible username) to use when called with one
X of many options. Thus, the user need not type the full
X domain name address to connect, only enough to uniquely
X identify the requested computer. For possible hosts
X casbah.acns.nwu.edu and cannibal.acns.nwu.edu, the user
X could identify casbah with the call 'con cas' but not with
X the call 'con ca'.
X
X
XUSAGE
X Con has many different options. Some of those are used far
X more than others. For that reason, con uses the variable
X DEFAULT_OPT as a null option. The configuration section sets
X up DEFAULT_OPT as an enviromental variable. This need not be
X the case if all who use con agree on a DEFAULT_OPT. It is
X recommended that rsh be used for reasons which will become
X apparent later in the document. For the sake of explaining
X the use of con, I will assume this is the case.
X
X
XOPTIONS
X ""|-r) rsh host [username] [commands] or
X ftp [or auto ftp] host [filename]
X
X part 1 [rsh]:
X The most common use for con will be logging into a
X remote computer. The null option or -r option uses the same
X syntax as rsh. The proper username to use with this option
X is determined as follows: A username specified on the com-
X mand line is used before any username in HOSTSFILE. To
X specify a username on the command line, use the same syntax
X as rsh:
X
X %example: con cas -l username [commands]
X
X If no username is specified on the commmand line, the user-
X name in the third field of HOSTSFILE is used. If no username
X exists in HOSTSFILE then the username on the local machine
X ($USER) is used. Note: because this option always defaults
X to $USER, there is no reason to put your username on local
X machine as the third field in HOSTSFILE.
X
X Like rsh, if the name of the file from which con was exe-
X cuted is anything other than ``con'', that name will be used
X as its hostname argument. Thus, if a symbolic link is made
X to con with a unique hostname to search for in HOSTSFILE,
X that name will be used (along with any con option) to con-
X nect to a host. This feature is particularly useful to cut
X down on needless typing. All command lines will now be of
X the form:
X
X hostname -con_opt [-other_opt] [username] [other]
X %example: casbah -r -l bill cat file
X #rsh casbah.acns.nwu.edu -l bill cat file
X
X part 2 [ftp]:
X If the username field of HOSTSFILE contains the string
X 'anonymous', con will perform an ftp to the host. Con will
X work in conjunction with the .netrc file to automatically
X log you into the remote computer.
X
X If a path-to-filename is given as the last argument, con
X will use the aftp [auto ftp] program which comes with the
X distribution. This program will NOT use your .netrc file but
X will log you in to the remote host with
X 'local_username@local_host'. The filename MUST be the full
X path name to the file you want to get. Aftp uses the
X enviromental variable MODE (bin or ascii) to determine which
X mode you want to transfer your file with. However, just as a
X precaution, aftp asks for confirmation before it gets the
X file. The recieved file is left in whatever directory con
X was invoked from. Aftp can also get multiples files from
X one directory, just include a ``*'' in the full pathname
X argument.
X
X %example: con prep
X #username=anonymous ==> ftp prep.ai.mit.edu
X %example: con prep /pub/gnu/filename.tar.Z
X #auto ftp to prep for filename.tar.Z
X %example: con uu /published/unix-world/*
X #auto ftp to ftp.uu.net to do an mget on all
X #files in directory /published/unix-world.
X
X The auto ftp program is not extraordinarily robust. If you
X want to use your own, make sure the path is changed in the
X Configuration section. More features may be added to aftp
X later.
X
X -t) telnet host [port]
X
X A port number may be specified on the command line or as
X a username in HOSTSFILE. As usual, if a port number is
X specified on the command line, it will take precedence over
X the username field.
X
X %example: con -t phoenix 25
X #telnet to mail port on phoenix.whatever
X
X Note: if you use telnet as a default option, the port number
X ability in HOSTSFILE is lost. The number check is only made
X when using this option.
X
X -f|-fa|-fb) ftp [or auto ftp] host [filename]
X
X This option works in the same manner described above to
X ftp to a host. The difference is that the user may specify
X directly what mode he wants the files to be transferred in
X (thus bypassing confirmation by aftp ) Also, this option,
X (-f), is used for hosts which are not strictly going to be
X contacted for anonymous ftp (no 'anonymous' string in
X HOSTSFILE).
X
X -F) finger [-opts] username@host
X
X This option is used to finger a username. Any valid
X finger option can be used but must be the last argument. The
X username precedence is the same as above.
X
X %example: con -F cas nut-boy [-l]
X #finger [-l] nut-boy@casbah.acns.nwu.edu
X
X %example: con -F prin -s
X #finger -s (name in 3rd field)@princeton.edu
X
X -h) print out brief help screen
X
X This option displays a half-page help screen which shows
X how the various options are used.
X
X -l) list host
X
X This option is used to check an entry in HOSTSFILE. If a
X pattern is found, the relevant information on that host is
X displayed:
X
X %example: con -l casbah
X Internet Address: 129.105.113.52
X Domain name (aliases): casbah.acns.nwu.edu
X Common username (or friend): <none>
X
X
X -m) Mail or elm [-s "Subject"] username@host [ < filename ]
X
X This option is used to send mail. It uses the enviro-
X mental variable MAILER to determine which mail program to
X use. It is recommended that either elm or Mail are used (no
X other mailers have been tested so far). Again, as in all
X other options, this option determines which username to use
X based on the order of precedence described above. However,
X if the user wants to specify a Suject on the command line,
X he MUST specify a username. Otherwise, the info passed to
X the mailer can become botched.
X
X %example: con -m cas #MAILER=elm
X #elm -s "" navarra@casbah.acns.nwu.edu
X #sends a null subject line and puts user in
X #send only mode.
X
X %example: con -m cas bill this is a test
X #elm -s "this is a test" bill@casbah
X #the username bill must be included.
X
X %example: con -m cas < filename
X #elm -s "" navarra@casbah < filename
X
X %example: con -m cas fred Schedule < Schedule
X #elm -s "Schedule" fred@casbah < Schedule
X
X In the last two examples, a file was transmitted. For this
X operation, con creates a subshell and the contents of
X filename are sent to it to be processed by the mailer.
X
X -p) ping [-opts] host [other]
X
X This option is used to do a ping on a host. All ping
X options should be available.
X
X %example: con -p cas -v
X #ping -v casbah.acns.nwu.edu
X
X %example: con -p cas -s 64 2
X #ping -s casbah.acns.nwu.edu 64 2
X
X -R) traceroute [opt [other]] host
X
X This option is used to do a traceroute to a host.
X Because of the numerous options to traceroute, the packet-
X size option is not available due to parsing problems. All
X other options are available.
X
X %example: con -R sage -n
X #traceroute -n sage.cc.purdue.edu
X
X %example: con -R sage -nm 5
X #traceroute -nm 5 sage.cc.purdue.edu
X
X -T|To) [o]talk username@host [tty]
X
X This option is used to talk to username. Because some
X vendors are still using the braindead otalk (now who could
X that be?), a -To option is available. The username pre-
X cedence is the same as above.
X
X %example: con -T cas jarvis ttyp1
X #talk jarvis@casbah.acns.nwu.edu ttyp1
X
X %example: con -To thor
X #username=dick ==> otalk dick@thor
X
X
X -w) direct write to HOSTSFILE
X
X This option is used to make an entry in HOSTSFILE. It is
X assumed that the user knows the relavent information nec-
X cesary to make a proper entry (IP# domain alias user-
X name). The entry must be enclosed in quotes with the proper
X TABS between the fields. A TAB can be entered on the command
X line by typing C-V TAB (control-v TAB). The entry is
X appended to the end of HOSTSFILE.
X
X %example: con -w "129.10.11.3<TAB>io.nwu.edu<TAB>biff"
X
X Con also provides a more user-friendly way to make entries
X in HOSTSFILE. If the environmental variable CHECK_HOST is
X set to ``yes'', then for any hostname pattern entered on the
X command line not found in HOSTSFILE, the user will be
X prompted if he wants to make an entry. The process is demon-
X strated as follows:
X
X [casbah:112] ~ -> con cas
X No pattern in hostfile. Do you want to make an entry [yes]
X ok, your will be prompted separately for a domain name
X with aliases, an IP address, and a possible username.
X Enter info or hit return to accept [cas] casbah.acns.nwu.edu
X Enter info or hit return to accept [129.105.113.52]
X Enter info or hit return to accept [] fred
X Accept: 129.105.113.52 casbah.acns.nwu.edu fred [yes]
X
X Note that the IP address is resolved if given a legiti-
X mate domain name. In that way, the user just needs to
X hit RETURN to accept the address and con will make sure
X it is written correctly to HOSTSFILE. Note also the the
X default username is nothing (fred was used in the exam-
X ple).
X
X
X
XENVIRONMENTAL VARIABLES
X HOSTSFILE
X DEFAULT_OPT
X CHECK_HOST
X MAILER
X MODE
X
XFILES
X $HOME/$HOSTSFILE
X ./aftp (auto ftp program)
X
XAUTHOR
X John Navarra (navarra@nwu.edu)
X Academic Computing and Networking Services
X Northwestern University
X
XBUGS
X There are probably a few bugs here and there. I have only
X tested con on a SunOS and Mach machines. I am interested in
X hearing about any bugs and suggestions for improvement.
X
END_OF_FILE
if test 12318 -ne `wc -c <'con.man'`; then
echo shar: \"'con.man'\" unpacked with wrong size!
fi
# end of 'con.man'
fi
if test -f 'sample_hostsfile' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'sample_hostsfile'\"
else
echo shar: Extracting \"'sample_hostsfile'\" \(728 characters\)
sed "s/^X//" >'sample_hostsfile' <<'END_OF_FILE'
X# Local hosts
X129.105.113.52 casbah.acns.nwu.edu sun
X129.105.113.32 emma.acns.nwu.edu
X129.105.100.1 aristotle.ils.nwu.edu blah
X129.105.5.103 delta.eecs.nwu.edu bill
X129.105.5.15 avalon.eecs.nwu.edu matt
X129.105.113.31 nestor.acns.nwu.edu nestor
X129.105.113.40 lenny.acns.nwu.edu navarra
X129.105.113.42 speedy.acns.nwu.edu navarra
X# Friendly hosts
X128.111.24.70 engrhub.ucsb.edu harley
X128.210.24.1 sage.cc.purdue.edu pucc pucc varney
X128.52.46.26 wombat.gnu.ai.mit.edu gnu mage
X132.206.2.3 quiche.cs.mcgill.ca archie
X128.167.254.179 archie.sura.net archie
X147.225.1.31 archie.ans.net archie
X# anonymous ftp sites
X137.39.1.9 ftp.uu.net anonymous
X18.71.0.38 prep.ai.mit.edu anonymous
X128.252.135.4 wuarchive.wustl.edu anonymous
END_OF_FILE
if test 728 -ne `wc -c <'sample_hostsfile'`; then
echo shar: \"'sample_hostsfile'\" unpacked with wrong size!
fi
chmod +x 'sample_hostsfile'
# end of 'sample_hostsfile'
fi
echo shar: End of shell archive.
exit 0