/* Query remote host for TCP/IP socket */ #include #include #include #include #include #include #include #include #include #include static const char *name; static void Connect(const char *n, int p) { static int init=0; static struct hostent *remote; static struct sockaddr_in addr; int sock; if (!init) { if (!(remote=gethostbyname(n))) { fprintf(stderr,"%s: unknown host %s\n",name,n); exit(EXIT_FAILURE); } memcpy(&addr.sin_addr, remote->h_addr, remote->h_length); init=1; } if ((sock=socket(AF_INET,SOCK_STREAM,0))==-1) { perror(name); exit(EXIT_FAILURE); } addr.sin_family=AF_INET; addr.sin_port=htons(p); if (connect(sock, (void *)&addr, sizeof(addr))!=-1) { printf("%s:%d\n",n,p); } close(sock); } int main(int argc, char *argv[]) { int f; name=argv[0]; if (argc<2) { fprintf(stderr,"%s: usage %s host\n",name,name); exit(EXIT_FAILURE); } setbuf(stdout,NULL); for(f=1;f<0x10000;f++) { if (argc>2) { printf("Trying %s:%d...\n",argv[1],f); } Connect(argv[1],f); if ((argc==2)&&(f)&&((f%10000)==0)) { fprintf(stderr,"Tried up to %s:%d\n",argv[1],f); } } return EXIT_SUCCESS; }