端口扫描实验报告.docx
《端口扫描实验报告.docx》由会员分享,可在线阅读,更多相关《端口扫描实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
![端口扫描实验报告.docx](https://file1.bdocx.com/fileroot1/2022-10/13/7c144fb4-31e9-417c-b8be-bc9db5ef9af6/7c144fb4-31e9-417c-b8be-bc9db5ef9af61.gif)
端口扫描实验报告
端口扫描实验报告
网络端口扫描实验报告
姓名:
刘俊峰
学号:
11054114
班级:
11052411
课程:
网络攻防技术
老师:
张旻
{
WSADATAwsadata;
system("cls.exe");
printf("\r\n==============命令行端口扫描器PortScannerV1.0==============");
if((argc<3)||(argc>4))
{
usage(argv[0]);
return-1;
}
if(!
(stricmp(strlwr(argv[1]),"-p")==0))
{
usage(argv[0]);
return-1;
}
if(WSAStartup(MAKEWORD(1,1),&wsadata)!
=0)
{
printf("\r\nWsatartuperror");
return-1;
}
if(argc==3)
{
setip2(argv[2]);
}
else
if(argc==4)
{
customport(argv[0],argv[2],argv[3]);
}
else
{
usage(argv[0]);
return-1;
}
portscannow(argc);
WSACleanup();
return0;
}
voidusage(char*prog)
{
printf("Usage:
%s
printf("\r\n\n
");
printf("\r\n-p[Port|StartPort-EndPort]");
printf("\r\n\nExample:
");
printf("\r\n%s-p192.168.0.1",prog);
printf("\r\n%s-p192.168.0.1-192.168.0.254",prog);
printf("\r\n%s-p21-80192.168.0.1",prog);
printf("\r\n%s-p21-80192.168.0.1-192.168.0.254\r\n",prog);
return;
}
voidplayx(intplay=0)
{
char*plays[12]=
{
"|","/","-","\\","|","/","-","\\","|","/","-","\\",
};
if(searchnum!
=0)
{
for(inti=0;i<=3;i++)
{
printf("=%s=%d%sCompleted.\r",plays,searched*100/(searchnum+1),"%");
Sleep(5);
}
}
else
{
printf("=%s=\r",plays[play]);
Sleep(10);
}
}
voidsetip2(char*cp)
{
inthost;
structhostent*testhost;
char*startip="",*endip="";
if(strstr(cp,"-")&&strlen(cp)>15&&strlen(cp)<32)
{
endip=strchr(cp,'-')+1;
strncpy(startip,cp,strlen(cp)-strlen(strchr(cp,'-')));
hoststart=ntohl(inet_addr(startip));
hoststop=ntohl(inet_addr(endip));
}
else
{
testhost=gethostbyname(startip);
if(!
testhost)
{
WSACleanup();
printf("\r\nCan'tgetipof:
%s",cp);
exit(-1);
}
memcpy(&host,testhost->h_addr,4);
hoststop=hoststart=ntohl(host);
}
}
voidTestThread(intthread=200)
{
for(;;)
{
playx();
if(maxth>thread)
Sleep(100);
elsebreak;
}
return;
}
voidWaitThreadEnd()
{
Sleep(6000);
printf("\r\r\n");
printf("Wait(%d)Threadend...\r\n",maxth);
for(;;)
{
if(maxth>0)
{
Sleep(100);
playx();
continue;
}
elsebreak;
}
printf("\r\n");
return;
}
voidcustomport(char*cp,char*cp2,char*cp3)
{
intintport;
char*checker;
startport=atoi(cp2);
endport=atoi(cp2);
if(strstr(cp2,"-"))
{
intport=atoi(checker=strchr(cp2,'-')+1);
if(intport>0&&intport<65536)
endport=intport;
}
if(startport<0||startport>65536||endport<0||endport>65535)
{
usage(cp);
exit(-1);
}
setip2(cp3);
}
UINTportscan(LPVOIDport)
{
intaddr=portip;
intsock;
structfd_setmask;
structtimevaltimeout;
structsockaddr_inserver;
unsignedlongflag=1;
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock==INVALID_SOCKET)
{
printf("\r\nSockError:
%s",WSAGetLastError());
maxth--;
return-1;
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=htonl(addr);
server.sin_port=htons(short(port));
playx();
if(ioctlsocket(sock,FIONBIO,&flag)!
=0)
{
printf("\r\nSockError:
%s",WSAGetLastError());
closesocket(sock);
maxth--;
return-1;
}
connect(sock,(structsockaddr*)&server,sizeof(server));
timeout.tv_sec=18;
timeout.tv_usec=0;
FD_ZERO(&mask);
FD_SET(sock,&mask);
switch(select(sock+1,ZERO,&mask,ZERO,&timeout))
{
case-1:
{
printf("\r\nSelect()error");
maxth--;
return-1;
}
case0:
{
maxth--;
closesocket(sock);
return-1;
}
default:
if(FD_ISSET(sock,&mask))
{
shutdown(sock,0);
printf("[Found:
]%sPort:
%dopen.\r\n",inet_ntoa(server.sin_addr),ntohs(server.sin_port));
closesocket(sock);
scanok++;
maxth--;
return1;
}
}
return0;
}
voidportscannow(intxp)
{
intsport;
char*timenow,timebuf[32];
char*ports[32]={
"21","22","23","25","53","79","80","110","111","113","123","135","139","143","443","512",
"513","514","515","540","1080","1433","1521","1524","3306","3389","5631","6000","6112",
"8000","8080","12345"
};
timenow=_strtime(timebuf);
printf("\r\nPortScanStartTime:
%s\r\n\n",timenow);
maxth=0;
scanok=0;
scannum=0;
searched=0;
searchnum=hoststop-hoststart+1;
if(xp==3)
searchnum=searchnum*32;
if(xp==4)
searchnum=searchnum*(endport-startport+1);
for(portip=hoststart;portip<=hoststop;portip++,scannum++)
{
if((portip%256)==0||(portip%256)==255)
{
if(xp==3)
searchnum=searchnum-32;
if(xp==4)
searchnum=searchnum-(endport-startport+1);
scannum--;
playx();
continue;
}
if(xp==3)
{
for(sport=0;sport<32;sport++,maxth++,searched++)
{
TestThread(180);
CWinThread*pthread=AfxBeginThread(portscan,LPVOID(atoi((char*)ports[sport])));
Sleep(120);
}
}
if(xp==4)
{
sport=endport-startport;
if(sport>50