| 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. | /* get ftpd banner - kafar */
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <signal.h>
#include <errno.h>
struct hostent *hp;
struct sockaddr_in addr;
struct sigaction handler;
char *buffer;
int sock, i;
FILE *fd;
void OnAlarm(int signum) {
fprintf(stderr, "Timeout.\n");
exit(0); }
main(int argc, char **argv) {
if (argc != 3) {
fprintf(stderr, "usage: %s <hostname> <port>\n", argv[0]);
return 1; }
hp = gethostbyname(argv[1]);
if (hp == NULL) {
fprintf(stderr, "Unknown host.\n");
return 1; }
memset((char *)&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[2]));
handler.sa_handler = OnAlarm;
sigaction(SIGALRM, &handler, NULL);
sock = socket(AF_INET, SOCK_STREAM, 0);
bcopy(hp->h_addr, (char *)&addr.sin_addr, hp->h_length);
alarm(10);
if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
fprintf(stderr, "Connection refused.\n");
return 1; }
fd = fdopen(sock, "r");
alarm(30);
buffer = (char *)malloc(128);
i = recv(sock, buffer, 128, 0);
buffer[i] == '\0';
fprintf(stdout, "%s", buffer);
close(sock);
return 0; }
|