实验三端口扫描.docx
- 文档编号:11857626
- 上传时间:2023-04-06
- 格式:DOCX
- 页数:10
- 大小:132.06KB
实验三端口扫描.docx
《实验三端口扫描.docx》由会员分享,可在线阅读,更多相关《实验三端口扫描.docx(10页珍藏版)》请在冰豆网上搜索。
实验三端口扫描
实验三、端口扫描
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协议进行了学习。 让我对网络编程产生了浓厚的兴趣!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 端口扫描