找回密码
 注册
查看: 564|回复: 1

scan.c 请大家提议见!!!

[复制链接]
发表于 2005-10-14 08:46:52 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>

int list_mode=1;
int a;

main (argc,argv)
     int argc;
     char *argv[];
{
  unsigned long w_addr, w1_addr;
  struct hostent *h;

print_banner ();

if (argc > 1) {
  a=strcmp (*(argv+1),"-f");
         if (a==0) {
             argc--;
             list_mode=0;
             argv++; }
}

if ((argc!=2) && (argc!=3)) {
         printf ("Usage: tcpscan [-f] [hostname || IP_address]\n");
         printf ("       tcpscan [-f] [first_IP_address] [last_IP_address]\n");
              exit (1); }

w_addr=inet_addr ( *++argv);
if (argc==3) w1_addr=inet_addr (*++argv);

if ( argc==3) {

if ((w_addr==-1) || (w1_addr==-1)) {
      printf ("\nBoth args must be IP addresses\n");
      exit (1); }
  
if  ( (w_addr & 0xffffff)!=(w1_addr & 0xffffff) ) {
      printf ("\nBoth addresses must be within one `C` network\n");
      exit (0); }

for (;;) {
     open_tcp_array (w_addr);
     printf ("\n**************************************");
     if (w_addr==w1_addr) { break; } ;
     w_addr=w_addr+256*256*256; }
     printf ("\n");
exit (0);
}

if ( w_addr!=-1) {

  open_tcp_array (w_addr);

           exit (0);
}

h=gethostbyname (*argv);

if (h==NULL) {
  printf ("Failed to resolve hostname: `%s`\n",*argv);
  exit (1);
}
printf ("%s -> %s \n",*argv,inet_ntoa(*((struct in_addr *)h->h_addr_list[0])));

open_tcp_array (*((struct in_addr *)h->h_addr_list[0]));
exit (0);
}

open_tcp_array (host_addr) {

  char *ports_descr[]={
"tcpmux","echo","discard","systat","daytime",
"netstat","qotd","chargen","ftp-data","ftp",
"ssh",
"telnet","smtp","time","whois","tacacs",
"domain",
"mtp","gopher","rje","finger","http/www",
"link","kerberos","supdup","hostnames","iso-tsap",
"x400","x400-snd","csnet-ns","pop-2","pop-3/pop",
"sunrpc","auth","sftp","uucp-path","nntp",
"ntp","netbios-ns","netbios-dgm","netbios-ssn","imap",
"NeWS","https/SSL","exec","login","shell","printer",
"efs","tempo","courier","conference","netnews",
"uucp","klogin","kshell","remotefs","pcserver",
"kerberos-adm","kerberos-sec","kerberos-master","krb5_prop","Socks/WinGate",
"listen",
"nterm","kpop","ingreslock","tnet","cfinger",
"eklogin","squid-proxy","krb524","irc","irc","irc",
"dos","X-font-server","realauduo"," "};  

  unsigned int ports_array [] = {
1,7,9,11,13,
15,17,19,20,21,
22,
23,25,27,43,49,
53,
57,70,77,79,80,
87,88,95,101,102,
103,104,105,109,110,
111,113,115,117,119,
123,137,138,139,143,
144,443,512,513,514,515,
520,526,530,531,532,
540,543,544,556,600,
749,750,751,754,1080,
1025,
1026,1109,1524,1600,2003,
2105,3128,4444,6666,6667,6668,
7000,7100,7070,0};

int i=0, res;

    printf ("\n");

  while (ports_array!=0) {
    res=open_tcp_sock (host_addr,ports_array );

     if ( (res!=-1) || (list_mode==0) ) {   
         printf ("(%s",ports_descr);
         printf (")");
                        }
     i++;
  }
    printf ("\n");
}

open_tcp_sock (some_addr,some_port) {

  struct in_addr {
    unsigned long s_addr;
  };
  struct sockaddr_in {
    short int            sin_family;      // Adress family
    unsigned short int   sin_port;        // Port number
    struct in_addr       sin_addr;        // Internet address
    unsigned char        sin_zero[8];     // Same size ...
  };
int sockfd, result;

struct sockaddr_in my_addr;

   sockfd = socket (AF_INET, SOCK_STREAM, 0);

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons (some_port);
my_addr.sin_addr.s_addr = some_addr;
bzero ( &(my_addr.sin_zero), ;

result=connect (sockfd,(struct sockaddr *) &my_addr, sizeof(struct sockaddr) );

close (sockfd);

if ( (list_mode==0) || ( (list_mode==1) && (result!=-1) ) ) {
  printf ("\nhost %s",inet_ntoa(some_addr));
  printf ("  port %d",some_port);
  printf (" ");
        if (result==-1)  printf ("fail  ");
        else printf ("done  ");
}

return (result) ;
}

     print_banner() {

printf ("\n--------------------------------------------------------");
printf ("\nTCP port scan");
printf ("\n--------------------------------------------------------\n");
return ;
}
发表于 2005-10-14 10:15:07 | 显示全部楼层
很老的程序了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-7 20:01 , Processed in 0.024776 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表