| 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. | /* 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; } |