--- whois.c.orig Tue Nov 6 21:51:51 2001 +++ whois.c Wed Feb 13 13:54:28 2002 @@ -58,6 +58,7 @@ #include #include #include +#include #define NICHOST "whois.crsnic.net" #define INICHOST "whois.networksolutions.com" @@ -90,9 +91,17 @@ main(int argc, char *argv[]) { struct addrinfo *res; + struct sockaddr_in dkh_addr; + struct hostent *dkh_hst; const char *host; - char *qnichost; - int ch, flags, use_qnichost; + char *qnichost, *getreq, *ibuf, *foutput, *garba; + char hostname[sizeof("www.dk-hostmaster.dk")]; +// char corba[16384]; + int ch, flags, use_qnichost, dkh_fd; + size_t ilen, matches = 1; + FILE *dkhfi, *dkhfo; + regex_t REGX_first,REGX_last,REGX_tags,REGX_tr,REGX_newline; + regmatch_t REGM[1]; #ifdef SOCKS SOCKSinit(argv[0]); @@ -161,6 +170,57 @@ if (!(flags & WHOIS_QUICK)) flags |= WHOIS_INIC_FALLBACK | WHOIS_RECURSE; } + if(strcmp(host, "whois.dk-hostmaster.dk") == 0){ + memset((char *) &dkh_addr, 0, sizeof(dkh_addr)); + memcpy(hostname, "www.dk-hostmaster.dk",sizeof("www.dk-hostmaster.dk")); + getreq = (char *)malloc(sizeof(argv[0])+sizeof("GET /script/whois.php?query=&lang=eng HTTP/1.0.\nHost: www.dk-hostmaster.dk.\n\n")); + foutput = (char *)malloc(65536); + sprintf(getreq,"GET /script/whois.php?query=%s&lang=eng HTTP/1.0.\nHost: www.dk-hostmaster.dk.\n\n", argv[0]); + + dkh_addr.sin_family=AF_INET; + dkh_addr.sin_port=htons(80); + dkh_hst = gethostbyname(hostname); + dkh_addr.sin_addr=*(struct in_addr *)(dkh_hst->h_addr_list[0]); + + dkh_fd = socket(PF_INET, SOCK_STREAM, 0); + connect(dkh_fd, (struct sockaddr *)&dkh_addr, sizeof(dkh_addr)); + if(dkh_fd > -1){ + dkhfi = fdopen(dkh_fd, "r"); + dkhfo = fdopen(dkh_fd, "w"); + fprintf(dkhfo,"%s",getreq); + fflush(dkhfo); + while ((ibuf = fgetln(dkhfi, &ilen)) != NULL) { + ibuf[--ilen] = '\0'; + snprintf(foutput,65536,"%s%s\n",foutput,ibuf); + } + } + close(dkh_fd); + + regcomp(®X_first, ".*
", REG_EXTENDED); + regcomp(®X_last, "
.*", REG_EXTENDED); + regcomp(®X_tr, "", REG_EXTENDED); + regcomp(®X_newline, "\n", REG_EXTENDED); + regcomp(®X_tags, "<[^>]*>", REG_EXTENDED); + + if(regexec((regex_t *)®X_first, foutput, matches, REGM, NULL) == 0){ + bcopy((char *)&foutput[REGM[0].rm_eo], (char *)&foutput[REGM[0].rm_so], strlen(foutput)-REGM[0].rm_so); + } + if(regexec((regex_t *)®X_last, foutput, matches, REGM, NULL) == 0){ + bcopy((char *)&foutput[REGM[0].rm_eo], (char *)&foutput[REGM[0].rm_so], strlen(foutput)-REGM[0].rm_so); + } + while(regexec((regex_t *)®X_newline, foutput, matches, REGM, NULL) == 0){ + bcopy((char *)&foutput[REGM[0].rm_eo], (char *)&foutput[REGM[0].rm_so], strlen(foutput)-REGM[0].rm_so); + } + while(regexec((regex_t *)®X_tr, foutput, matches, REGM, NULL) == 0){ + bcopy("\n",(char *)&foutput[REGM[0].rm_so],1); + bcopy((char *)&foutput[REGM[0].rm_eo], (char *)&foutput[REGM[0].rm_so+1], strlen(foutput)-REGM[0].rm_so+1); + } + while(regexec((regex_t *)®X_tags, foutput, matches, REGM, NULL) == 0){ + bcopy((char *)&foutput[REGM[0].rm_eo], (char *)&foutput[REGM[0].rm_so], strlen(foutput)-REGM[0].rm_so); + } + printf("%s\n", foutput ); + exit(0); + } while (argc--) { if (use_qnichost) if ((qnichost = choose_server(*argv)) != NULL) @@ -175,6 +235,7 @@ } exit(0); } + /* * This function will remove any trailing periods from domain, after which it