发新话题
打印

[转载]一个简单的可以抓Banner的端口扫描器代码

[转载]一个简单的可以抓Banner的端口扫描器代码

信息来源:http://king.uid0.net/

Scan.cpp
复制内容到剪贴板
代码:
#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&#39;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;
}
曾几何时,有人对我说:装B遭雷劈。我说:去你妈的。于是,这个人又对我说:如果再说脏话,上帝会惩罚你的。我说:我操上帝。结论:彪悍的人生不需要上帝。

TOP

刚学vc,正在找这方面的源码,谢楼主

TOP

发新话题