标题:请各位高手帮帮忙 关于一个简单端口扫描器
只看楼主
Hollie
Rank: 1
等 级:新手上路
帖 子:19
专家分:1
注 册:2009-9-29
结帖率:0
 问题点数:0 回复次数:0 
请各位高手帮帮忙 关于一个简单端口扫描器

这几天要做网络课设,但是自己又不会编程  网上下了个代码 自己研究了半天 看不懂

不明白为什么这程序只输出前面的部分,后面的都没执行

#include <winsock.h>  这个也没看懂

课设的题目是:

简单的端口扫描器
实现一个端口扫描程序,判断指定的主机有哪些端口可以提供服务, 并把扫描得知的结果记录下来


下面是代码   各位热心的帮忙看看 改改

#include <stdio.h>
#include <winsock.h>

#pragma comment(lib,"ws2_32")
//加载必须的头文件和库文件
void usage(char *prog)
{
  printf("Usage:Scan.exe 127.0.0.1 1 65535\n");
  printf(" Scan.exe IP Startport Endport\n");
}
//自定义帮助函数
int main (int argc,char *argv[])
{
  if (argc != 4)
  {
   usage(argv[0]);
   return -1;
  }//如果参数不是4个,显示帮助
  WSADATA wsa;
  if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
  {
   printf("Winsock Dll load Failed!\n");
   return -1;
  }//初始化Socket版本
  int nowport,count;
  //定义当前端口和计数器
  struct sockaddr_in sa;
  int startport=atoi(argv[2]);
  int endport=atoi(argv[3]);
  //设置开始端口和结束端口
  if (endport < startport)
  {
   printf("don't doing ,endport < startport\n");
   return -1;
  }
  //判断端口的有效性
  nowport=startport;
  //设置当前端口=开始端口
  printf("Start Scan......\n");
  for (nowport;nowport < endport;nowport++)
  {
   sa.sin_family=AF_INET;
   sa.sin_addr.S_un.S_addr=inet_addr(argv[1]);
   sa.sin_port=htons(nowport);
   //设置目标主机信息
   SOCKET sockFD=socket(AF_INET,SOCK_STREAM,0);
   if (sockFD == INVALID_SOCKET)
   {
    printf("Socket create Error!\n");
    return -1;
   }//建立socket套接自
   int iTimeOut = 5000; //设置超时
   setsockopt(sockFD, SOL_SOCKET, SO_RCVTIMEO, (char*)&iTimeOut, sizeof(iTimeOut));
   if (connect(sockFD,(const sockaddr*)&sa,sizeof(sa)) == SOCKET_ERROR)
   {
    closesocket(sockFD);
   }//如果连接错误
   else
   {
    count=count+1;//连接成功,计数器加1
    printf("%s Find %d Port is Opend!\n",argv[1],nowport);
    if (nowport == 21)
    {
      char buff[2048]={0};
      char hello[5]={"test"};
      send(sockFD,hello,sizeof(hello),0);
      recv(sockFD,buff,sizeof(buff),0);
      printf("FTP Banner: %s\n",buff);
      //这里可以加入send(sockFD,"ftp",3,0)
      //....来判断ftp是否可以匿名登陆和写权限等等
      /*
      {
      send(client,"ftp",3,0);
      ……通过发送用户名和密码,然后接受返回判断是否可以登陆
      }
      */
      //这些代码可以由读者来完成
    }//如果是21端口,显示端口banner
    else
      if(nowport == 80)
      {
       char buff[2048]={0};
       char get[30]={"GET HTTP 1.0/1.1\n\n\r\r\r"};
       send(sockFD,get,sizeof(get),0);
       recv(sockFD,buff,sizeof(buff),0);
       printf("The Server is %s\n",buff);
      }//如果是80端口,显示bannner
      //else if (nowport == %d xx)
      //这里可以加入更多的banner判断
      //这些代码可以由读者来完成
      closesocket(sockFD);
   }
  }
  printf("Scan End.....\n Find %d Port is Opend!\n",count);
  //显示结束
  WSACleanup();
  //释放socket资源
  return 0;
}
搜索更多相关主题的帖子: 扫描器 端口 
2009-09-29 19:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-287274-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014632 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved