009_端口信息工具
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
总体设计
3.1模块划分
3.1.1功能模块图
图6 功能模块图
3.1.2主要功能模块介绍
本设计主要包含Ping和Scan两大功能。
(1)Ping模块
能够检测目标主机的状态,看目标主机是否可达。由用户输入一个目标主机的IP地址,点击ping 按钮后,能够进行测试,连接成功或不成功都回返回信息到软件的列表框。
(2)Scan
完成对指定IP主机的端口信息的扫描,能够测试哪些端口开放,哪些端口关闭。并把结果输出到列表框。在Ping测试完成后,这个模块方可使用。
3.2设计实现流程图
【买计算机毕业论文就到计算机毕业论文网】 copyright think58
[资料来源:THINK58.com]
think58.com
图7 设计实现流程图
4 端口信息探测工具的详细设计与实现
4.1 软件界面
本软件编译通过,界面如下图:
图8 界面
4.2 PING按钮实现
4.2.1 ping按钮实现流程图
copyright think58
[来源:http://think58.com]
[资料来源:http://think58.com]图9 PING按钮实现流程
本文来自think58
4.2.2 ping按钮总体实现过程
(1)调用UPDATEDATE(TRUE)函数,更新成员变量。
(2)然后用GetAddress()函数来获取输入的IP地址,并且判断输入的IP地址是否合法,合法的话,把输入的IP地址转换成标准的IP地址格式,并存入字符串RouteIP中。
(3) NewPing(),带入参数目标IP地址,跳跃数,往返时间,完成一个测试连接。
(4)调用GetRTTAndHopCount()函数,是一个WIN32API标准函数,能够在规定的时间内检查网络是否畅通。它包含四个参数,分别为:目标IP地址,到目的地的跳跃数,最大跳数和到目的地的往返时间。如果返回1,则说明网络畅通,这时输出某某IP地址测试成功;如果返回0,就说明网络不畅通。
(5) GetDlgItem(IDC_BTN_SCAN)->EnableWindow(TRUE),使得扫描按钮有效。如果前面某某IP地址测试不通过,扫描按钮不起效。
PING按钮主要源程序如下:
this->UpdateData(TRUE);
DWORD dwip=0;
m_EditScanIP.GetAddress(dwip);
if(dwip<=0)
{
AfxMessageBox("输入的IP地址不存在!");
return ;
}
int rc;
IPAddr ia;
CString RouteIP;
LONG m_hops_count,m_rtt;
RouteIP.Format("%d.%d.%d.%d",(dwip>>24)&0xff,(dwip>>16)&0xff,(dwip>>8)&0xff,(dwip)&0xff); think58好,好think58
[来源:http://think58.com]
ia = inet_addr(RouteIP);
rc = NewPing(ia,(ULONG*)&m_hops_count,(ULONG*)&m_rtt);
m_destip=RouteIP;
if (rc == 1)
{
CString info;
info.Format("IP地址:%d.%d.%d.%d 连接测试通过!",
(dwip>>24)&0xff,(dwip>>16)&0xff,(dwip>>8)&0xff,dwip&0xff);
m_ListRichEdit.AddString(info);
GetDlgItem(IDC_BTN_SCAN)->EnableWindow(TRUE);
}
else
{
CString info;
info.Format("IP地址:%d.%d.%d.%d 测试未通过!",
(dwip>>24)&0xff,(dwip>>16)&0xff,(dwip>>8)&0xff,dwip&0xff);
m_ListRichEdit.AddString(info);
AfxMessageBox("输入的IP地址不存在");
GetDlgItem(IDC_BTN_SCAN)->EnableWindow(FALSE);
}
}
int NewPing(IPAddr ia, ULONG *hops_count, ULONG *rtt)
{
boolean IsOk;
IsOk = GetRTTAndHopCount(ia, hops_count,128, rtt);
if (IsOk == TRUE)
return 1;
return 0;
}
4.3 scan按钮实现
本文来自think58
4.3.1 scan按钮实现流程图
图10 SCAN按钮实现流程 think58好,好think58
4.3.2 scan按钮总体实现过程
(1)依旧调用UPDATEDATE(TRUE)函数,更新成员变量。
(2)接着判断输入的断口值,输入端口范围是0-65530,不符合或者开始端口大于结束端口,都回弹出错误信息。
(3)如果符合标准,则开始调用WIN32API的标准创建线程函数AfxBeginThread(),创建一个线程。
(4)然后创建一个定时器SetTimeOut()。
(5)调用AfxSocketInit(),初始化WINSOCKET
(6)初始化成功以后,调用Create元函数,之后后会构造一个socket对象来创建WINDOWS socket ,然后Create会自动调用Bind,把socket和指定的地址绑定,然后socket就会提供SOCK_STREAM和SOCK_GDREAM两种模式。本设计用的是基于TCP的STREAM模式。
(7)成功以后调用Connect(),将套接字S与目标主机建立连接。如果连接成功,则在LIST中输出某某端口已开启。
(8)调用KillTimeOut(),关闭连接,销毁记时器。
(9)delete sock
(10)端口地址自加1。
SCAN按钮主要源程序如下:
this->UpdateData(TRUE);
if(m_EditEndPort>65530)
m_EditEndPort=65530;
else if(m_EditEndPort<1)
m_EditEndPort=1;
if(m_EditStartPort>65530)
内容来自think58 [版权所有:http://think58.com]
m_EditStartPort=65530;
else if(m_EditStartPort<1)
m_EditStartPort=1;
if(m_EditStartPort>m_EditEndPort)
{
AfxMessageBox("开始端口大于结束端口,请重新输入扫描端口段!");
return ;
}
this->UpdateData(FALSE);
scanthread = AfxBeginThread(PortScanThreadProc, this);
UINT PortScanThreadProc(LPVOID pParam)
{
CPortScanView *sview=(CPortScanView *)pParam;
DWORD beginport=sview->m_EditStartPort;
DWORD endport=sview->m_EditEndPort;
CString info;
CString RouteIP;
RouteIP=sview->m_destip;
CTimeOutSocket* sock=NULL;
AfxSocketInit();
while (1)
{
sock = new CTimeOutSocket();
sock->SetTimeOut(5000);
if (!sock->Create())
{
return 1;
}
if (sock->Connect(RouteIP,beginport))
{
info.Format("IP地址:%s 端口%d已开启!",RouteIP,beginport);
sview->m_ListRichEdit.AddString(info);
}
else { think58 [来源:http://www.think58.com]
info.Format("IP地址:%s 端口%d未开启!",RouteIP,beginport);
sview->m_ListRichEdit.AddString(info);
}
sock->KillTimeOut();
delete sock;
sock=NULL;
beginport+=1;
if(beginport>endport)
return 0;
}
} 本文来自think58 [资料来源:http://www.THINK58.com]
BOOL CTimeOutSocket::SetTimeOut(UINT uTimeOut)
{
m_nTimerID = SetTimer(NULL, 0, uTimeOut, NULL);
return m_nTimerID;
} think58好,好think58 [资料来源:http://think58.com]
BOOL CTimeOutSocket::KillTimeOut()
{
return KillTimer(NULL, m_nTimerID);
}
5软件测试
5.1测试的目的和定义
5.1.1测试的目的
经过软件分折与设计后。就可以根据现有的设计在具体的环境中实现,生成系统的源代码、可执行程序。然后需要对软件进行测试和排错,保证软件符合预定的要求。获得一个无错的实现,调试的结果将确认所完成的软件可以真正使用。最后,软件测试的任务是在真实的使用运行环境中配置,调试软件,解决软件正式使用前,可能存在的任何问题。
5.1.2测试的定义
主要方法有审阅,检查。对软件进行静态测试。因为本软件是自己设计的,自己参与了其全部的设计过程,对软件的逻辑结构,编程思想,代码编写都熟悉。从ping按钮开始,逐步查看各功能模块的设计及完成功能的技巧和编程思路,代码实现
[资料来源:http://think58.com]
上一篇:动态升级模块的设计
下一篇:002图书馆管理系统++C