请各位高手帮帮忙 关于一个简单端口扫描器
这几天要做网络课设,但是自己又不会编程 网上下了个代码 自己研究了半天 看不懂
不明白为什么这程序只输出前面的部分,后面的都没执行
#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;
}