WinNT_README.txt
上传用户:wsk323
上传日期:2007-01-05
资源大小:403k
文件大小:6k
源码类别:

Telnet服务器

开发平台:

Visual C++

  1. 4/22/98
  2. revised 7/20/98
  3. revised 3/18/99
  4. revised 8/10/99
  5. E. Brady Trexler
  6. trexler@aecom.yu.edu
  7. http:\magicbus.aecom.yu.edu
  8. ftp:\magicbus.aecom.yu.edu
  9. I have been wanting to write a telnet daemon for Windows NT for quite some time.
  10. By a stroke of good fortune, I came across code from a number of people and 
  11. sources that have allowed the development of a minimal telnet server.  Thanks 
  12. to Daniel Carey (whawke@multipro.com  http://users.multipro.com/whawke) for 
  13. TDCService, a class that installs, uninstalls, and starts itself as a service.  
  14. Also, thanks to Fran鏾is Piette (francois.piette@ping.be and
  15. http://www.rtfm.be/fpiette/indexuk.htm) for his suite of internet components
  16. and demo telnet server and client programs.  A lot of the code in the VTSession
  17. (VTTelnetSession.cpp) and VTDaemon (VTTelnetDaemon.cpp) classes is directly 
  18. from his code.  
  19. I have also written a command line telnet client, using Fran鏾is Piette's components.
  20. These programs and all of the source code is freeware.  What I had hoped is 
  21. that those of you who are interested would help me to improve this telnet daemon. 
  22. There are some features that I could not get working, so the advice of more
  23. experienced programmers would be most appreciated.  Feel free to modify anything.  
  24. But please let me know. Hopefully a community of us could create a server that
  25. rivals the commercial ones available.
  26. USAGE AND INSTALLATION NOTES:
  27.  Copy telnetd.exe (the telnet daemon), telnetd.ini (to specify the listening
  28.  port) and vttelnet.exe (the command line client) to %SystemRoot%system32.
  29.  
  30.  From the command line, type "telnetd -i" to install the service.  "telnetd -u" 
  31.  uninstalls it, and "telnetd -v" gives extended information.  In the 
  32.  "Services" applet in Control Panel, set the startup for VTrex Telnet 
  33.  Server to Automatic, Logon as SYSTEM Account.  Allow Service to Interact
  34.  with Desktop should be off. To allow users to log in, create a new group
  35.  whose members have the  "Logon as Service" right.
  36.  
  37.  In telnetd.ini, set port=XX, with no spaces.  To change the listening port,
  38.  change telnetd.ini appropriately and restart the service.
  39.  In telnetd.ini, set WelcomeMessage=XXXX~ and ExitMessage=XXX~.
  40.  The telnetd.ini that comes with this archive explains further.
  41.  Users can logon from any client, but some work better with VTrex Telnet Daemon
  42.  than others.  I have tested this server with a few clients (unix, qvt3, telnet 
  43.  (that comes with NT)), and with some quirks, they all work fine.
  44.   If a user starts a non-console application, that program is non-accessible
  45.  to any user.  The locally logged in user will not be able to terminate this
  46.  app from TaskManager.  This is bad.  Someone could use all machine memory by
  47.  starting a whole bunch of non-console apps.  Also, any drives the remote user
  48.  mounts will not be unmounted, unless they do so explicitly before logging off.  
  49.  These drives will be accessible to all other users, but no one else will be 
  50.  able to unmount them.  They will not appear as network drives but as local 
  51.  drives, i.e., you don't know to which shared drive they are connected.  Note 
  52.  that these problems are due to WindowsNT architecture, not really from any 
  53.  fault of my own.
  54.  Command line programs that do not use STDIN or STDOUT will have problems 
  55.  with this server.  Some apps write directly to the console screen buffer, 
  56.  so that when STDIN and STDOUT are redirected, they can still prompt the user 
  57.  for info.  Since the console that that apps started in a telnet session see 
  58.  is invisible, it appears as though the app is hung.  FTP, for instance, behaves 
  59.  erratically.  Once you get to the password prompt, it hangs, because it is 
  60.  looking for input at the invisible console.
  61. PROGRAMMING NOTES:
  62. The implementation of the daemon is as follows:
  63.  A VTDaemon class is created in main().  This class owns a TWSocket that
  64.  listens to the telnet port.  main() contains a loop that does nothing 
  65.  but send a WM_TERMINATE message to TApplication. This message just sets 
  66.  TApplication->Terminated to true, so TApplication->Run() will exit, and
  67.  the app will close.  TApplication->Run() is not called in this program,
  68.  so the message is essentially ignored. This is a silly hack that is 
  69.  necessary to start the message loop of TApplication.  Otherwise, this 
  70.  program does nothing, and calling TApplication->Run() would create forms
  71.  and do a bunch of other stuff we don't want.
  72.  
  73.  A request for a session creates a new instance of VTSession, which duplicates
  74.  the socket, freeing VTDaemon to listen again.  If "SERVICE" is defined when 
  75.  compiling, VTSession prompts for a username and password.  After user
  76.  validation, the WindowsNT command interpreter (cmd.exe) is started as a
  77.  sub-process in the security context of the logged on user.  The STDERR,
  78.  STDIN, and STDOUT for cmd have all been redirected to the parent process 
  79.  (thanks to win32.hlp from MicroSoft for the code that does this).  Two 
  80.  threads are started that listen for output from cmd (from STDERR and STDOUT)
  81.  and one thread waits for input from the socket and feeds that to cmd through
  82.  STDIN.  If the cmd interpreter is closed (by responding to exit command), 
  83.  the STDOUT listening thread exits, and closes the session by sending a 
  84.  message to VTDaemon.  Each logged on user requires over a megabyte of 
  85.  memory, so I limited MAXSESSIONS to 5 in VTTelnetDaemon.h.
  86.  
  87.  I used Borland C++ Builder 3.0/4.0 for this project because it allowed me to create 
  88.  console applications that use VCL components (hence, a TApplication object exists), 
  89.  but no visible HWND is created.  This is ideal for a service.  I had built the 
  90.  code previously in version 1.0 of Builder, but it creates this HWND, creating a 
  91.  button on the taskbar, and that is a nuisance.  Moreover, the service must be able
  92.  to interact with the desktop if compiled with ver 1.0.  You must have installed 
  93.  the freeware components from F. Piette in order to compile these programs.  His 
  94.  web site is http://www.rtfm.be/fpiette/indexuk.htm.
  95. NICE FEATURES THAT I HAVEN'T DONE YET:
  96.  A command line interpreter that was written specifically for the purpose of telnet
  97.  would be a great benefit.  This interpreter would not allow any non-console apps
  98.  to be invoked.  A unix-style shell with process control would allow the user to 
  99.  "start" background apps, and kill them.  Maybe someday...