| 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. 110. 111. 112. 113. 114. 115. 116. 117. | /* napscan.c - quick portscanner written by napster. */
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
char *ipaddy;
int portlow, porthigh;
unsigned int resolved_host;
/* prototypes... */
void reseed(void);
void usage(char *progname);
unsigned int resolve(char *host);
void usage(char *progname)
{
system("clear");
printf("napscan v1.0 by napster.\n");
printf ("usage: %s <address> <portlow> <porthigh> \n",progname); exit(1);
}
main(int argc, char *argv[])
{
struct sockaddr_in sin;
int sockdesc, x;
if (argc<4) usage(argv[0]);
ipaddy = argv[1];
portlow = atoi(argv[2]);
porthigh = atoi(argv[3]);
resolved_host = resolve(ipaddy);
if (porthigh > 65535)
{
printf("Uh, dood... highest possible high port is 65535.. \n");
exit(0);
}
if (portlow < 0)
{
printf("Uh, dood... negative ports? get some help... \n");
exit(0);
}
system("clear");
printf(" napscan.c by napster.\n");
printf(" [1.28.97]\n\n");
printf("Portscanning: %s.\n", ipaddy);
printf("Portlow: %d\n", portlow);
printf("Porthigh: %d\n\n", porthigh);
printf("Ports open:");
reseed();
for (x=portlow;x<=porthigh;x++)
{
fflush(stdout);
sockdesc = socket(AF_INET, SOCK_STREAM, 0);
if (sockdesc < 0) {
perror("socket");
exit(-1);
}
sin.sin_family = AF_INET;
sin.sin_port = htons(x);
sin.sin_addr.s_addr = resolved_host;
if (connect(sockdesc, (struct sockaddr *)&sin, sizeof(sin)) == 0) printf(" %d", x);
fflush(stdout);
close(sockdesc);
}
printf("\n");
exit(0);
}
void reseed(void)
{
srand(time(NULL));
}
unsigned int resolve(char *host)
{
/* resolve routine written by Aut0psy. */
struct hostent *he;
struct sockaddr_in tmp;
/* Lookup host. */
he = gethostbyname(host);
if (he)
{
/* Copy host into a temporary endpoint. */
memcpy((caddr_t)&tmp.sin_addr.s_addr, he->h_addr, he->h_length);
} else {
perror("resolving");
exit(-1);
}
/* Return address in network byte order. */
return(tmp.sin_addr.s_addr);
}
|