diff options
Diffstat (limited to 'seekp.c')
-rw-r--r-- | seekp.c | 110 |
1 files changed, 110 insertions, 0 deletions
@@ -0,0 +1,110 @@ +/* + Query remote host for TCP/IP socket +*/ +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netinet/tcp.h> +#include <netdb.h> + +#include <stdio.h> +#include <errno.h> + +char *name; + +int Connect(); + +main(argc,argv) +int argc; +char *argv[]; + +{ + int f; + + name=argv[0]; + + if (argc<2) + { + fprintf(stderr,"%s: usage %s host\n",name,name); + exit(1); + } + + setbuf(stdout,NULL); + + for(f=0;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(0); +} + + +char *GetLine() + +{ + static char buff[1024]; + int l; + + if (feof(stdin)) + return(NULL); + + printf("> "); + + if (!gets(buff)) + return(NULL); + + l=strlen(buff); + + if (buff[l-1]=='\n') + buff[l-1]=0; + + if (strlen(buff)) + return(buff); + else + return(GetLine()); +} + + +int Connect(n,p) +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(1); + } + + bcopy(remote->h_addr,&addr.sin_addr,remote->h_length); + init=1; + } + + if ((sock=socket(AF_INET,SOCK_STREAM,0))==-1) + { + perror(name); + exit(1); + } + + addr.sin_family=AF_INET; + addr.sin_port=htons(p); + + if (connect(sock,&addr,sizeof(addr))!=-1) + printf("%s:%d\n",n,p); + + close(sock); +} |