首页 网络安全 安全学院 查看内容

SSH指纹收集代码实现

2009-8-21 14:26 684 0

摘要: /* sshscan.c - scans port 22 for server type and version */ /* ...
关键词: char include sshscan usage target host int void serv sock

/* sshscan.c - scans port 22 for server type and version */ /* */ /* compile: host:~$ gcc sshscan.c -o sshscan */ /* usage: host:~$ ./sshscan infile > outfile */ /* */ /* based on wscan.c */ /* CHANGES: */ /* -aesthetics */ /* -modified serv function */ /* */ /* 2.18.01 [email protected] */ #include <stdio.h> #include <netdb.h> #include <stdlib.h> #include <unistd.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #define ERROR -1 int sock; char buffer[1024]; void usage(char *s); void scan(char *i); int serv(char *host); unsigned long int res(char *p); void usage(char *s) { printf("Usage: %s <inputfile>\n", s); exit(ERROR); } int main(int argc, char **argv) { printf("sshscan - a ssh server information grabber, by [email protected]\n"); if (argc != 2) usage(argv[0]); printf("\n-Getting version information-\n\n"); scan(argv[1]); } void scan(char *i) { FILE *iff; char buf[512]; if((iff = fopen(i, "r")) == NULL) return; while(fgets(buf, 512, iff) != NULL) { buf[strlen(buf) - 1] = 0; serv(buf); } fclose(iff); } int serv(char *host) { struct sockaddr_in target; target.sin_addr.s_addr = res(host); target.sin_family = AF_INET; target.sin_port = htons(22); sock=socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { printf("error in creating socket\n"); exit(-1); } if (!connect(sock, (struct sockaddr *) &target, sizeof(target))) { recv(sock, buffer, sizeof(buffer), 0); printf("Host %s\n", host); printf("Version:\n%s\n", buffer); } else printf("could not connect to %s port 22\n\n", host); close(sock); } /* generic DNS resolving function */ unsigned long int res(char *p) { struct hostent *h; unsigned long int rv; h=gethostbyname(p); if(h!=NULL) memcpy(&rv, h->h_addr, h->h_length); else rv=inet_addr(p); return rv; }
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部