FINGER.C
上传用户:better800
上传日期:2022-06-13
资源大小:1853k
文件大小:3k
源码类别:

TCP/IP协议栈

开发平台:

DOS

  1. /******************************************************************************
  2.     FINGER - display user/system information
  3.     Copyright (C) 1991 Erick Engelke
  4.     This program is free software; you can redistribute it and/or modify
  5.     it, but you may not sell it.
  6.     This program is distributed in the hope that it will be useful,
  7.     but without any warranty; without even the implied warranty of
  8.     merchantability or fitness for a particular purpose.
  9.         Erick Engelke                   or via E-Mail
  10.         Faculty of Engineering
  11.         University of Waterloo          Erick@development.watstar.uwaterloo.ca
  12.         200 University Ave.,
  13.         Waterloo, Ont., Canada
  14.         N2L 3G1
  15. ******************************************************************************/
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <tcp.h>
  20. #define FINGER_PORT 79
  21. tcp_Socket fingersock;
  22. char buffer[ 513 ];
  23. int finger(char *userid, longword host, char *hoststring)
  24. {
  25.     tcp_Socket *s;
  26.     int status;
  27.     int len;
  28.     s = &fingersock;
  29.     if (!tcp_open( s, 0, host, FINGER_PORT, NULL )) {
  30. puts("Sorry, unable to connect to that machine right now!");
  31. return (1);
  32.     }
  33.     printf("waiting...r");
  34.     sock_wait_established(s, sock_delay, NULL, &status);
  35.     if (*userid)
  36. printf("'%s' is looking for '%s'...nnn", hoststring, userid);
  37.     strcpy( buffer, userid );
  38.     rip( buffer ); /* kill all n and r's */
  39.     strcat( buffer , "rn");
  40.     sock_puts( s, buffer );
  41.     sock_close( s );                    /* close sending side.... */
  42.     while ( 1 ) {
  43. sock_wait_input( s, 30, NULL, &status );
  44. len = sock_fastread( s, buffer, 512 );
  45. buffer[ len ] = 0;
  46. printf( "%s", buffer );
  47.     }
  48. sock_err:
  49.     switch (status) {
  50. case 1 : /* foreign host closed */
  51.                  printf("n");
  52.                  exit(2);
  53. case -1: /* timeout */
  54.                  printf("ERROR: %snn", sockerr(s));
  55.  exit(3);
  56.     }
  57.     printf("n");
  58.     return (0);  /* not reached */
  59. }
  60. int main(int argc, char **argv )
  61. {
  62.     char *user,*server;
  63.     longword host;
  64.     int status;
  65.     dbug_init();
  66.     sock_init();
  67.     /* process args */
  68.     do {
  69. if (argc == 2) {
  70.     user = argv[1];
  71.     if ( (server = strchr( user, '@')) != NULL )
  72. break;
  73. }
  74. puts("   FINGER  [userid]@server");
  75. exit( 3 );
  76.     } while ( 0 );
  77.     *server ++ = 0;
  78.     if ( (host = resolve( server )) != 0uL ) {
  79. status = finger( user, host, server);
  80.     } else {
  81. printf("Could not resolve host '%s'n", server );
  82. exit( 3 );
  83.     }
  84.     exit( status );
  85.     return (0);  /* not reached */
  86. }