/* lscan.c --> listen scanner by f1ex usage: lscan [outputfile] props to: duke well this 99% of his c0de...I just did a ripped =) */ #include #include #include #include #include #include #include #include #include void usage(char *); void printheader(void); void testhost(char *); FILE *of; int main(int argc, char *argv[]) { FILE *fp; char host[1024]; int c; c = 0; printf("\npscan: port scanner for linux by f1ex\n"); printf("-------------------------------------\n\n"); if(argc < 2){ usage(argv[0]); return 0; } if(argc == 3){ of = fopen(argv[2], "w"); printheader(); } else { of = stdout; /* when using fprintf i can refer to stdout or log file without having to do conditions */ } if((fp = fopen(argv[1], "r")) == NULL){ printf("error: input file does not exist\n"); return 0; } printf("scanning..."); while(fscanf(fp, "%s", &host) != EOF){ testhost(host); } printf("end of scan\n"); return 0; } void usage(char *progname) { printf("usage: %s [outputfile]\n", progname); printf("\n\ninputfile: a list of hosts (or ip's) to scan\n"); printf("outputfile: optionally record results to a file instead of stdout\n\n\n"); } void printheader(void) { fprintf(of, "port scan results file\n"); fprintf(of, "----------------------\n\n"); } void testhost(char *target) { struct sockaddr_in server; int sockfd, i; char version[256]; struct hostent *hp; printf("%s\n", target); if((hp=(struct hostent *)gethostbyname(target)) == NULL) { fprintf(of, "%s: unknown host\n", target); return; } sockfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&server, sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons(31337); memcpy((char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length); if((connect(sockfd, (struct sockaddr *)&server, sizeof(server))) == -1){ fprintf(of, "%s: connect error\n", target); return; } else { fprintf(of, "%s: open", target); } close(sockfd); return; }