243 lines
12 KiB
Plaintext
243 lines
12 KiB
Plaintext
![]() |
Description
|
|||
|
-----------
|
|||
|
SPY is a "remote control" program for NetBios compatible networks. The
|
|||
|
current version of SPY is intended as a demonstration of a network
|
|||
|
client-server application implemented in Pascal. We have found it somewhat
|
|||
|
useful for lending remote assistance to our network users.
|
|||
|
|
|||
|
SPY and its accompanying documentation and source files are:
|
|||
|
|
|||
|
Copyright (c) 1989 by Edwin T. Floyd
|
|||
|
All rights reserved
|
|||
|
|
|||
|
SPY and its accompanying documentation is not "shareware" and I do not request
|
|||
|
payment for it. You may distribute and use it without restriction as long as
|
|||
|
you don't sell it and don't hold me liable for any errors or consequential
|
|||
|
damages. If you wish to include this software as part of a commercial
|
|||
|
package offered for sale, you must obtain written permission from me, the
|
|||
|
author:
|
|||
|
|
|||
|
Edwin T. Floyd [76067,747]
|
|||
|
#9 Adams Park Court
|
|||
|
Columbus, GA 31909
|
|||
|
404-322-0076 (home)
|
|||
|
404-576-3305 (work)
|
|||
|
|
|||
|
Release History
|
|||
|
---------------
|
|||
|
11-17-89 1.3 - Corrected missed EGA/VGA mode changes, documentation
|
|||
|
11-15-89 1.2 - Internal version, corrected EGA/VGA/MCGA program hang bugs
|
|||
|
10-04-89 1.1 - Common functions separated to SPYSUP, recovery improved.
|
|||
|
First public release.
|
|||
|
09-30-89 1.0 - Internal version, never released
|
|||
|
|
|||
|
Operation
|
|||
|
---------
|
|||
|
SPY is in two parts: SPY.EXE and SPYTSR.EXE.
|
|||
|
|
|||
|
SPYTSR is a "Terminate and Stay Resident" program that must be running on the
|
|||
|
machine to be controlled. Run like this:
|
|||
|
|
|||
|
SPYTSR name [adapter]
|
|||
|
|
|||
|
..where "name" is the network name by which this invocation of SPYTSR is to
|
|||
|
be known, and (optional) "adapter" is a numeric network adapter number. If
|
|||
|
adapter is omitted, SPYTSR uses adapter zero. The network name may be up
|
|||
|
to fifteen characters long. All alphabetic characters in the name are shifted
|
|||
|
to upper case. The name may not contain spaces. The actual network name that
|
|||
|
SPYTSR adds to the adapter is the name specified padded to the right with
|
|||
|
spaces to fifteen characters and terminated with 0EFh as the sixteenth
|
|||
|
character.
|
|||
|
|
|||
|
SPYTSR occupies about 36k (large for a TSR, but not too bad for one written in
|
|||
|
a high-level language), and does very little except listen until it receives a
|
|||
|
request from SPY. SPYTSR handles these types of requests:
|
|||
|
|
|||
|
SendScreen - Reads the contents of the video buffer and cursor position
|
|||
|
into an internal buffer and transmits it to the client.
|
|||
|
|
|||
|
StuffKeyboard - Copies Key and Scan Codes from the client's message to an
|
|||
|
internal table where they are inserted into the keyboard
|
|||
|
stream by the Int 16h intercept. To the user, keystrokes
|
|||
|
simply appear out of nowhere. It's really spooky.
|
|||
|
|
|||
|
Boot - Reboots the system running SPYTSR as if the user had
|
|||
|
performed a "three finger salute" (Ctrl-Alt-Del).
|
|||
|
|
|||
|
DieQuietly - SPYTSR cancels all its sessions and commands, deletes its
|
|||
|
network name and removes itself from memory.
|
|||
|
|
|||
|
SendScreenInfo - SPYTSR returns information about it's video screen,
|
|||
|
including the adapter type, video mode, number of rows
|
|||
|
and columns, and the maximum size of the buffer that
|
|||
|
SendScreen may transmit.
|
|||
|
|
|||
|
SPY is a quick-and-dirty remote control program that builds requests for
|
|||
|
SPYTSR and displays the screen data returned by the SendScreen request.
|
|||
|
Run like this:
|
|||
|
|
|||
|
SPY name [adapter]
|
|||
|
|
|||
|
..where "name" is the network name by which an invocation of SPYTSR is known
|
|||
|
(see above), and (optional) "adapter" is a numeric network adapter number.
|
|||
|
If adapter is omitted, SPY uses adapter zero. SPY constructs a network name
|
|||
|
just like SPYTSR does, and then calls that name in an attempt to establish a
|
|||
|
"session" with SPYTSR. If SPY is unable to establish a session within about
|
|||
|
half a minute, it gives up and terminates with an error message. If SPY is
|
|||
|
successful, it requests screen information via SendScreenInfo, allocates
|
|||
|
memory for a screen buffer, and then begins its monitor cycle.
|
|||
|
|
|||
|
The monitor cycle has two independent components which are implemented as
|
|||
|
subtasks in the SPY program. They are:
|
|||
|
|
|||
|
Screen-Update cycle - About once every two seconds, SPY sends a SendScreen
|
|||
|
request to SPYTSR, receives the screen data reply and displays the screen
|
|||
|
data on the local screen. For few seconds after the Keyboard cycle (see
|
|||
|
below) sends a StuffKeyboard request, the Screen-Update cycle requests
|
|||
|
screen data about twice each second. Screen updates are suspended during
|
|||
|
"Break" processing. The Screen-Update cycle also attempts to reestablish
|
|||
|
a broken session by calling SPYTSR.
|
|||
|
|
|||
|
Keyboard cycle - SPY constantly checks for keystrokes by issuing
|
|||
|
Int 16h. The keyboard cycle moves keystrokes to a StuffKeyboard request
|
|||
|
message transmits to SPYTSR. The keyboard cycle also examines keystrokes
|
|||
|
for the "Break" key (Alt-0 in this implementation), displays the break
|
|||
|
menu on the screen, and processes the menu selection keystroke.
|
|||
|
|
|||
|
When the SPY user presses Alt-0, the Keyboard cycle displays the following menu
|
|||
|
on the screen:
|
|||
|
|
|||
|
You are connected to remote system <name>
|
|||
|
Break menu:
|
|||
|
|
|||
|
(E)xit SPY on local system
|
|||
|
(B)oot remote system
|
|||
|
(S)top SPYTSR on remote system
|
|||
|
(Alt-0) Send Alt-0 to remote system
|
|||
|
|
|||
|
Press a key to choose an action or <Esc> to return...
|
|||
|
|
|||
|
The next keystroke determines the action taken by SPY, as indicated on
|
|||
|
the menu. Allowable keystrokes are indicated in parentheses. All other
|
|||
|
keystrokes are ignored, except Escape which returns the user to the screen
|
|||
|
update display. If the user chooses any option except Alt-0 or Escape, SPY
|
|||
|
terminates after restoring the original screen saved when it started.
|
|||
|
|
|||
|
Two other utilities are supplied: SPYSTOP.EXE and SPYBOOT.EXE. These are
|
|||
|
non-interactive commands that simply issue the DieQuietly (SPYSTOP) and
|
|||
|
Boot (SPYBOOT) requests to a SPYTSR invocation. Both utilities accept the
|
|||
|
same command line parameters as SPY.EXE.
|
|||
|
|
|||
|
The executable code for SPY is distributed in the SPYEXE.ZIP archive. This
|
|||
|
archive includes the following files:
|
|||
|
|
|||
|
SPYTSR.EXE - Resident portion of SPY
|
|||
|
SPY.EXE - SPY monitor
|
|||
|
SPYSTOP.EXE - Remote stop utility
|
|||
|
SPYBOOT.EXE - Remote boot utility
|
|||
|
SPY.DOC - This file
|
|||
|
|
|||
|
Source Code
|
|||
|
-----------
|
|||
|
The source code for SPY is distributed in the SPYSRC.ZIP archive. This
|
|||
|
archive includes the following source files:
|
|||
|
|
|||
|
SPY.PAS - Source code for SPY
|
|||
|
SPYTSR.PAS - Source code for SPYTSR
|
|||
|
SPYSTOP.PAS - Source code for SPYSTOP
|
|||
|
SPYBOOT.PAS - Source code for SPYBOOT
|
|||
|
SPYSUP.PAS - Source code for support unit with common declarations for
|
|||
|
other SPY sources.
|
|||
|
|
|||
|
In addition SPYSRC contains the following support files:
|
|||
|
|
|||
|
NETBIOS.TPU - Precompiled unit for NetBios support
|
|||
|
NETBIOS.DOC - A copy of the Interface section for NETBIOS.TPU
|
|||
|
TSR.TPU - Precompiled unit for Terminate and Stay Resident support
|
|||
|
TSR.DOC - A copy of the Interface section for TSR.TPU
|
|||
|
MULTI.TPU - Precompiled unit for Non-preemptive multitasking
|
|||
|
MULTI.DOC - A copy of the Interface section for MULTI.TPU
|
|||
|
MULTITSR.PAS - Source code for unit which links MULTI and TSR units
|
|||
|
SCREEN.PAS - Source code for screen I/O unit
|
|||
|
SCREEN.OBJ - Preassembled external routines for SCREEN
|
|||
|
SPY.DOC - This file
|
|||
|
|
|||
|
Because the precompiled units were compiled with Turbo Pascal, v5.5., that
|
|||
|
version of the compiler must be used to compile the source code supplied.
|
|||
|
Source code for units: NETBIOS, TSR, MULTI, and SCREEN.ASM will be available
|
|||
|
from the author at some future date.
|
|||
|
|
|||
|
Limitations
|
|||
|
-----------
|
|||
|
SPY works with NetBIOS, only. Users of Novell networks which are not running
|
|||
|
on top of NetBIOS must install the NetBIOS emulation facility to use SPY.
|
|||
|
SPY was developed on an ArtiSoft LANtastic network.
|
|||
|
|
|||
|
This version of SPY properly displays text-mode screens only. It does not
|
|||
|
translate attribute bytes when monitoring a screen which displays many colors
|
|||
|
on a monitor which displays fewer colors, so your text may look strange when
|
|||
|
you "SPY" a CGA, EGA or VGA screen on a monochrome monitor. Graphics will
|
|||
|
simply look like garbage. Also, no provision is made to monitor off-screen
|
|||
|
portions of an EGA or VGA 43 or 50 line mode screen on an adapter which is
|
|||
|
currently displaying 80 x 25. In that case, only the upper-left corner of the
|
|||
|
screen will display. SPY uses the current mode of the screen from which it
|
|||
|
is run, so it may be advisable to issue a MODE command before running SPY.
|
|||
|
|
|||
|
The keyboard cycle on both SPY and SPYTSR works entirely with the data
|
|||
|
available via Int 16h. So it will be impossible to trigger programs which
|
|||
|
monitor the BIOS shift state flags or the keyboard interrupt (Int 09h). This
|
|||
|
includes many TSR's, like SideKick (I haven't actually tried it with SideKick,
|
|||
|
but suspect it won't work), LanPup, and some communications programs (ProComm
|
|||
|
works nicely; in fact, I use it to run ProComm on a network server from my
|
|||
|
office). Because of the communications delay and the relatively long interval
|
|||
|
between screen updates, remote keyboarding appears sort of "jumpy"; the
|
|||
|
character keyed may not appear immediately on the monitor. This can be
|
|||
|
disconcerting to some typists (it is to me).
|
|||
|
|
|||
|
In addition to the areas indicated above, a commercial implementation of a
|
|||
|
network remote control program should perform data compression on screen data.
|
|||
|
This would allow screen updates to occur more often without swamping the
|
|||
|
network and might improve the "jumpy" effect. Perhaps a copy of the screen
|
|||
|
last transmitted could be maintained in SPYTSR and only the differences sent
|
|||
|
(this gets a little tricky where multiple clients are requesting screens
|
|||
|
asynchronously, so to keep the demo simple I didn't attempt it here.).
|
|||
|
|
|||
|
True to it's name, SPY has absolutely no security features. The user of the
|
|||
|
remote system running SPYTSR is completely at the mercy of anyone who knows
|
|||
|
its network name and has a copy of SPY. A commercial implementation should
|
|||
|
provide some form of password protection and SPYTSR should beep or show a
|
|||
|
courtesy warning message on the monitored screen whenever SPY connects. The
|
|||
|
target system user should have the option of being or not being monitored.
|
|||
|
|
|||
|
SPY should be rewritten to manage multiple remote screens in separate windows,
|
|||
|
and, finally, SPYTSR should be rewritten in assembler to reduce it's overhead.
|
|||
|
|
|||
|
Or, you could buy The Network Eye (tm) by Artisoft in Tucson Arizona. I
|
|||
|
hear good things about this product, though I haven't tried it yet. I
|
|||
|
believe it implements most of the "improvements" listed above, including
|
|||
|
especially multiple windows.
|
|||
|
|
|||
|
Other uses
|
|||
|
----------
|
|||
|
The SPY and SPYTSR source programs provide a "shell" which may be used to
|
|||
|
implement other "client-server" applications in Pascal. Those portions of
|
|||
|
SPYTSR which handle SPY requests may be replaced with code which does just
|
|||
|
about anything. The support units; MULTI and TSR remove most of the
|
|||
|
restrictions ordinarily associated with TSR's in high level languages. In
|
|||
|
particular, the server may open files and do disk I/O with standard Pascal
|
|||
|
procedures. SPYTSR is an example of a "context free" server in that it does
|
|||
|
not need to distinguish between its clients or remember anything about
|
|||
|
previous transactions.
|
|||
|
|
|||
|
What's in store
|
|||
|
---------------
|
|||
|
I plan to supplement the NETBIOS and MULTI units early next year (90) with
|
|||
|
units to handle most of the dirty work of client-server applications through
|
|||
|
NetBios; in particular: synchronization and error recovery after interruption
|
|||
|
of the network connection, and facilities for creating "context dependent"
|
|||
|
servers. In the near future I will make available the source code for the
|
|||
|
precompiled units. Please drop me a note (write, please, don't call) if you
|
|||
|
want to be notified when these are ready.
|
|||
|
|
|||
|
- End -
|
|||
|
|