tcpprobe.c
上传用户:jxr_002
上传日期:2007-01-05
资源大小:12k
文件大小:1k
源码类别:

扫描程序

开发平台:

Unix_Linux

  1. /* -*-C-*- tcpprobe.c */
  2. /* tcpprobe - report on which tcp ports accept connections */
  3. /* IO ERROR, error@axs.net, Sep 15, 1995 */
  4. #include <stdio.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <errno.h>
  8. #include <netdb.h>
  9. #include <signal.h>
  10. int main(int argc, char **argv)
  11. {
  12.   int probeport = 0;
  13.   struct hostent *host;
  14.   int err, i, net;
  15.   struct sockaddr_in sa;
  16.   if (argc != 2) {
  17.     printf("Usage: %s hostnamen", argv[0]);
  18.     exit(1);
  19.   }
  20.   for (i = 1; i < 1024; i++) {
  21.     strncpy((char *)&sa, "", sizeof sa);
  22.     sa.sin_family = AF_INET;
  23.     if (isdigit(*argv[1]))
  24.       sa.sin_addr.s_addr = inet_addr(argv[1]);
  25.     else if ((host = gethostbyname(argv[1])) != 0)
  26.       strncpy((char *)&sa.sin_addr, (char *)host->h_addr, sizeof sa.sin_addr);
  27.     else {
  28.       herror(argv[1]);
  29.       exit(2);
  30.     }
  31.     sa.sin_port = htons(i);
  32.     net = socket(AF_INET, SOCK_STREAM, 0);
  33.     if (net < 0) {
  34.       perror("nsocket");
  35.       exit(2);
  36.     }
  37.     err = connect(net, (struct sockaddr *) &sa, sizeof sa);
  38.     if (err < 0) {
  39.       printf("%s %-5d %sr", argv[1], i, strerror(errno));
  40.       fflush(stdout);
  41.     } else {
  42.       printf("%s %-5d accepted.                               n", argv[1], i);
  43.       if (shutdown(net, 2) < 0) {
  44. perror("nshutdown");
  45. exit(2);
  46.       }
  47.     }
  48.     close(net);
  49.   }
  50.   printf("                                                                r");
  51.   fflush(stdout);
  52.   return (0);
  53. }