CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

为什么我写的端口扫描器扫描所有端口都是打开的呢

楼主ggg82(我喜欢...)2005-04-04 20:29:46 在 VC/MFC / 网络编程 提问

最近刚开始学习网络编程,自己写了一个扫描器,使用connect连接测试,可是,我发现,除了我自己的机器,其他的机器所有端口都是打开的,为什么呢 问题点数:20、回复次数:7Top

1 楼keikey_xi(小溪)回复于 2005-04-04 20:40:38 得分 0

不会吧,你的程序一定是写错了,贴出来看看.Top

2 楼ggg82(我喜欢...)回复于 2005-04-04 20:45:53 得分 0

/********************************************/  
  /*   端口扫描器   源代码   */  
  /*   PortScanner.c   */  
  /********************************************/  
   
  #include   <stdio.h>  
  #include   <string.h>  
  #include   <conio.h>  
  #include   <winsock2.h>  
  #include   <windows.h>  
  #include   <commctrl.h>  
  /*功能定义:对某个IP段进行端口扫描  
    *参数定义:共4个参数  
    *     开始地址,结束地址,开始端口,结束端口  
    *     无开始地址,默认开始地址==0.0.0.0  
    *     无结束地址,默认结束地址==开始地址  
    *     无开始端口,默认开始端口==0  
    *     无结束端口,默认结束端口==开始端口  
    *参数形式:Scan   /h   <开始地址>   [结束地址]   /p   <开始端口>   [结束端口]  
    */  
  extern   int   OutCode_PortScan(FILE   *fpout);  
  void   Help(char   *app)  
  {  
      fprintf(stderr,"This   program   will   scan   host   port!\n");  
      fprintf(stderr,"Usage:   %s   /h   <start   host   [end   host]>   /p   <start   port   [end   port]  
  >\n",   app);  
      fprintf(stderr,"Press   any   key   to   show   itself\'s   C   source   and   exit   this   program  
  !\n");  
      getch();  
      OutCode_PortScan(NULL);  
  }  
  #define   HOST_PARAM         1  
  #define   PORT_PARAM         2  
  #define   BAD_PARAM           0  
  #define   IPTOLONG(addr)         MAKEIPADDRESS(FOURTH_IPADDRESS(addr),THIRD_IPADDRESS(a  
  ddr),SECOND_IPADDRESS(addr),FIRST_IPADDRESS(addr))  
  #define   LONGTOIP(addr)         MAKEIPADDRESS(FOURTH_IPADDRESS(addr),THIRD_IPADDRESS(a  
  ddr),SECOND_IPADDRESS(addr),FIRST_IPADDRESS(addr))  
  FILE   *fp=NULL;  
  void   closefile()  
  {  
      if(fp)  
          fclose(fp);  
  }  
  int   main(int   argc,   char   *argv[])  
  {  
      WSADATA   wsaData;  
      WORD   wVersionRequested=MAKEWORD(1,1);  
      int   startHost,endHost;  
      int   startPort,endPort;  
      char   *p;  
      int   i,n=BAD_PARAM;  
   
      int   mysocket=0;  
      int   pcount   =   0;  
      struct   sockaddr_in   my_addr;  
      struct   in_addr     inaddr;  
      if(argc   <   5)   //至少5个参数,最多7个  
      {  
          Help(argv[0]);  
          exit(1);  
      }  
      //分析参数  
      i=1;  
      while(i<argc)  
      {  
          p=argv[i++];  
          if(*p=='/')  
          {  
   
              switch(*++p)  
              {  
              case   'h':  
              case   'H':  
                  n=HOST_PARAM;  
                  startHost=inet_addr(argv[i++]);  
                  endHost=startHost=IPTOLONG(startHost);  
                  continue;  
              case   'p':  
              case   'P':  
                  n=PORT_PARAM;  
                  endPort=startPort=atoi(argv[i++]);  
                  continue;  
              default:  
                  n=BAD_PARAM;  
                  break;  
              }//end   switch   p  
          }//end   if   *p  
          //根据状态复制数据  
          switch(n)  
          {  
          case   HOST_PARAM:  
              endHost=inet_addr(p);  
              endHost=IPTOLONG(endHost);  
              break;  
          case   PORT_PARAM:  
              endPort=atoi(p);  
              break;  
          default://出现错误  
              Help(argv[0]);  
              exit(1);  
          }//end   switch   n  
      }//end   while  
      //参数正确,开始调试数据  
      //调整顺序  
      if(startHost>endHost)  
      {  
          n=endHost;  
          endHost=startHost;  
          startHost=n;  
      }  
      if(startPort>endPort)  
      {  
          n=endPort;  
          endPort=startPort;  
          startPort=n;  
      }  
      if   (WSAStartup(wVersionRequested   ,   &wsaData))  
      {  
          printf("Winsock   Initialization   failed.\n");  
          exit(1);  
      }  
      //打开记录文件  
      fp=fopen("PortScan.txt","w");  
      atexit(closefile);  
      //循环主机  
      for(n=startHost;n<=endHost;n++)  
      {  
          inaddr.S_un.S_addr=LONGTOIP(n);  
          printf("\rScaning   host   [%s]\n",inet_ntoa(inaddr));  
          if(fp)  
              fprintf(fp,"Scaning   host   [%s]\n",inet_ntoa(inaddr));  
          pcount=0;  
          //循环端口  
          for(i=startPort;   i   <=endPort;   i++)  
          {  
              int   timeout=100;  
              if((mysocket   =   socket(AF_INET,   SOCK_STREAM,0))   ==   INVALID_SOCKET)  
              {  
                  printf("\rCannot   Open   Host   [%s]\n",inet_ntoa(inaddr));  
                  if(fp)  
                      fprintf(fp,"Cannot   Open   Host   [%s]\n",inet_ntoa(inaddr));  
                  break;//跳出循环,进行下一次扫描  
              }  
              my_addr.sin_family   =   AF_INET;  
              my_addr.sin_port   =   htons((unsigned   short)i);  
              my_addr.sin_addr   =   inaddr;  
              //setsockopt(mysocket,SOL_SOCKET,TCP_NODELAY,(char*)&timeout,sizeof(timeou  
  t));  
              printf("\rScaning   %d",i);  
              if(connect(mysocket,   (struct   sockaddr   *)&my_addr,   sizeof(struct   sockaddr))  
    ==   SOCKET_ERROR)  
              {  
                  closesocket(mysocket);  
              }  
              else  
              {  
                  pcount++;  
                  printf("\rPort   %d   -   open\n",   i);  
                  if(fp)  
                      fprintf(fp,"Port   %d   -   open\n",   i);  
              }  
          }  
          if(INVALID_SOCKET!=mysocket)  
          {  
              //printf("\x0d%d   ports   opened   on   host   [%s]\n",pcount,inet_ntoa(inaddr));  
              closesocket(mysocket);  
          }  
      }  
   
      WSACleanup();  
      return   0;  
  }Top

3 楼ggg82(我喜欢...)回复于 2005-04-04 20:46:34 得分 0

大虾看看,为什么呢Top

4 楼wjf666()回复于 2005-04-04 20:49:41 得分 0

UPTop

5 楼cryptonym(想裸睡)回复于 2005-04-04 21:42:46 得分 0

概念型错误啊。  
   
   
  对tcp的编程过程还认识不清楚。你看看tcp的简单例子吧。Top

6 楼ggg82(我喜欢...)回复于 2005-04-10 20:22:21 得分 0

可是,我对自己机器(127.0.0.1)扫描,结果正确呀,而且,我暂时还看不出错误之处,大虾指点呀!!Top

7 楼newman0708(nch)回复于 2005-04-10 20:49:10 得分 20

 
  if(connect(mysocket,   (struct   sockaddr   *)&my_addr,   sizeof(struct   sockaddr))  
    ==   SOCKET_ERROR){  
  连接不能,端口为关  
  }  
  else{  
  连接成功,端口为开  
  }  
   
  closesocket  
  Top

相关问题

  • 关于端口扫描器的设计问题
  • 重分(500分)求助:谁有portscan.exe(端口扫描器)的源代码?
  • 条形码扫描器如何使用?
  • 如何使用条形码扫描器
  • 谁用过条型码扫描器呀(。。。)
  • 条形码扫描器 读不进?
  • 条码扫描器的选择
  • 关于扫描器的问题??
  • 一个有关于ftp扫描器的问题……………………
  • 串口编程(扫描器 symbol ls4000p)的问题(50分)

关键词

  • 端口
  • 扫描器
  • endhost
  • starthost
  • ipaddress
  • endport
  • startport
  • 地址
  • portscan
  • 默认

得分解答快速导航

  • 帖主:ggg82
  • newman0708

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo