Brought to you by Markus Hübner.

The enclosed program will probe port 1-1024 on the given host (call it as: % tcpprobe connected.com) and report on which hosts accept connections. It may require a little tweaking to work on some of the oddball Unixes like SunOS... I wrote it under Linux.

    /* -*-C-*- tcpprobe.c */
    /* tcpprobe - report on which tcp ports accept connections */
    /* IO ERROR, error@axs.net, Sep 15, 1995 */

    #include <stdio.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <errno.h>
    #include <netdb.h>
    #include <signal.h>

    int main(int argc, char **argv)
    {
      int probeport = 0;
      struct hostent *host;
      int err, i, net;
      struct sockaddr_in sa;

      if (argc != 2) {
        printf("Usage: %s hostname\n", argv[0]);
        exit(1);
      }

      for (i = 1; i < 1024; i++) {
        strncpy((char *)&sa, "", sizeof sa);
        sa.sin_family = AF_INET;
        if (isdigit(*argv[1]))
          sa.sin_addr.s_addr = inet_addr(argv[1]);
        else if ((host = gethostbyname(argv[1])) != 0)
          strncpy((char *)&sa.sin_addr, (char *)host->h_addr, sizeof sa.sin_addr);
        else {
          herror(argv[1]);
          exit(2);
        }
        sa.sin_port = htons(i);
        net = socket(AF_INET, SOCK_STREAM, 0);
        if (net < 0) {
          perror("\nsocket");
          exit(2);
        }
        err = connect(net, (struct sockaddr *) &sa, sizeof sa);
        if (err < 0) {
          printf("%s %-5d %s\r", argv[1], i, strerror(errno));
          fflush(stdout);
        } else {
          printf("%s %-5d accepted.                               \n", argv[1], i);
          if (shutdown(net, 2) < 0) {
    	perror("\nshutdown");
    	exit(2);
          }
        }
        close(net);
      }
      printf("                                                                \r");
      fflush(stdout);
      return (0);
    }

Back to the Security-Page