实验三端口扫描.docx

上传人:b****5 文档编号:11857626 上传时间:2023-04-06 格式:DOCX 页数:10 大小:132.06KB
下载 相关 举报
实验三端口扫描.docx_第1页
第1页 / 共10页
实验三端口扫描.docx_第2页
第2页 / 共10页
实验三端口扫描.docx_第3页
第3页 / 共10页
实验三端口扫描.docx_第4页
第4页 / 共10页
实验三端口扫描.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验三端口扫描.docx

《实验三端口扫描.docx》由会员分享,可在线阅读,更多相关《实验三端口扫描.docx(10页珍藏版)》请在冰豆网上搜索。

实验三端口扫描.docx

实验三端口扫描

实验三、端口扫描

1、实验目的与要求

◆掌握网络编程模式。

◆理解并能应用socket来扫描端口号

2、实验设备与环境

连网PC机(至少一台)。

计算机硬件要求:

英特尔酷睿i53代系列处理器、256MB以上内存,Ethernet网卡,网线若干。

计算机软件要求:

Windows7操作系统,Visualc++6.0/.net系统。

3、实验要求

能够以可视化的形式显示主机面

能够实现TCP端口的扫描

能够实现UDP端口的扫描

4、实验内容与步骤:

步骤1:

使用VC++的应用程序生成向导(MFCAppWizard[exe])创建一个基于对话框的工程,该工程的名称为201200824302PortScan

步骤2:

设计主界面:

同时在类向导里面添加需要的变量:

步骤3:

添加事件

3.1添加响应“TCP扫描”按钮的事件:

voidCMy201200824302PortScanDlg:

:

OnTcp()

{

UpdateData(true);

WSADATAWSAData;

CStringstr;

if(WSAStartup(0x0202,&WSAData)!

=0)

{

MessageBox("初始化Winsock失败!

");

}

soc=socket(AF_INET,SOCK_STREAM,0);

if(soc==INVALID_SOCKET)

{

MessageBox("创建socket失败!

");

WSACleanup();

return;

}

intIpAddress;

inti=0;

CStrings;

m_ip.GetWindowText(s);

IpAddress=inet_addr(s);

if(IpAddress==INADDR_NONE)

{

hostent*pHostent=gethostbyname(str);

if(pHostent)

IpAddress=(*(in_addr*)pHostent->h_addr).s_addr;

}

if(m_port1>m_port2)

{

MessageBox("请确保起始端口号不大于终止端口号!

");

WSACleanup();

return;

}

structsockaddr_indesthost;

memset(&desthost,0,sizeof(desthost));

desthost.sin_family=AF_INET;

desthost.sin_addr.s_addr=IpAddress;

for(unsignedinta=m_port1;a

{

desthost.sin_port=htons(a);

char*SendBuf;

SendBuf=newchar[2];

memset(SendBuf,0,2);

intnConnect=connect(soc,(sockaddr*)&desthost,sizeof(desthost));

if(nConnect==SOCKET_ERROR)

{

str.Format("%d",a);

m_static+="TCPPort";

m_static+=str;

m_static+=":

Close\r";

m_static+="\n";

}

else

{str.Format("%d",a);

m_static+="TCPPort";

m_static+=str;

m_static+=":

Open\r\n";

m_static+="\n";

}

}

UpdateData(false);

closesocket(soc);

WSACleanup();

}

3.2添加响应“UDP扫描”按钮的事件:

voidCMy201200824302PortScanDlg:

:

OnUdp()

{

UpdateData(true);

WSADATAWSAData;

CStringstr;

if(WSAStartup(0x0202,&WSAData)!

=0)

{

MessageBox("初始化Winsock失败!

");

}

soc=socket(AF_INET,SOCK_STREAM,0);

if(soc==INVALID_SOCKET)

{

MessageBox("创建socket失败!

");

WSACleanup();

return;

}

intnIotr1;//设置阻塞模式

unsignedlongflag=1;

nIotr1=ioctlsocket(soc,FIONBIO,&flag);

if(nIotr1==SOCKET_ERROR)

{

MessageBox("创建socketM模式失败!

");

closesocket(soc);

WSACleanup();

return;

}

intIpAddress;//判断域名或IP地址

inti=0;

CStrings;

m_ip.GetWindowText(s);

IpAddress=inet_addr(s);

if(IpAddress==INADDR_NONE)

{

hostent*pHostent=gethostbyname(str);

if(pHostent)

IpAddress=(*(in_addr*)pHostent->h_addr).s_addr;

}

structsockaddr_indesthost;

memset(&desthost,0,sizeof(desthost));

desthost.sin_family=AF_INET;

desthost.sin_addr.s_addr=IpAddress;

for(unsignedinta=m_port1;a

{

desthost.sin_port=htons(a);

char*SendBuf;

SendBuf=newchar[2];

memset(SendBuf,0,2);

intnsend=sendto(soc,SendBuf,1,0,(structsockaddr*)&desthost,sizeof(desthost));

if(nsend==SOCKET_ERROR)

{

MessageBox("UDP包发送失败!

");

closesocket(soc);

WSACleanup();

return;

}

Sleep(500);

sockaddr_inSourceHost;//定义源主机地址

intSourceSize;

SourceSize=sizeof(SourceHost);

memset(&SourceHost,0,SourceSize);

char*RecvBuf;

RecvBuf=newchar[2];

memset(RecvBuf,0,2);

intnRecv;

nRecv=recvfrom(soc,RecvBuf,1,0,(structsockaddr*)&SourceHost,&SourceSize);

if(nRecv==SOCKET_ERROR)

{

intErrorCode=GetLastError();

if(ErrorCode==10054)

{

str.Format("%d",a);

m_static+="UDPPort";

m_static+="str";

m_static+=":

Close\r\n";

}

else

{

m_static+="UDPPort";

m_static+=a;

m_static+=":

Open\r\n";

}

}

}

UpdateData(false);

closesocket(soc);

WSACleanup();

}

5、实验结果

主界面显示:

测试1:

验证起始端口不可以大于终止端口

测试2:

TCP端口扫描

测试3:

UDP端口扫描失败

测试3:

UDP端口扫描

验证运行结果:

6、实验总结

通过本次试验我了解了使用Socket套接字对端口进行的扫描。

进一步对TCP和UDP协议进行了学习。

让我对网络编程产生了浓厚的兴趣!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1