端口扫描报告

合集下载

安全扫描报告范文

安全扫描报告范文

安全扫描报告范文一、报告背景本次安全扫描是为了评估公司的网络安全状况,以及发现潜在的安全风险和漏洞。

扫描涵盖了公司的网络架构、主机设备、应用程序和数据库等相关系统。

二、扫描方法为了全面评估公司的网络安全状况,本次扫描采用了多种扫描方法。

其中包括:主机扫描、端口扫描、漏洞扫描和Web应用程序扫描等。

1.主机扫描:通过对公司内部网络中的主机设备进行扫描,检测潜在的安全漏洞和配置问题。

2.端口扫描:通过对主机设备的开放端口进行扫描,发现可能存在的安全隐患和服务漏洞。

3.漏洞扫描:通过利用已知的漏洞库对系统进行扫描,以发现系统中可能存在的漏洞和未修复的安全问题。

4. Web应用程序扫描:通过对公司的网站和Web应用程序进行扫描,发现可能存在的Web漏洞和安全配置问题。

三、扫描结果分析1.主机扫描结果:主机扫描显示了公司内部网络中存在一些潜在的安全风险和配置问题。

其中包括未更新的操作系统、未安装补丁、弱密码、未启用防火墙等。

建议立即修复这些问题,以提高网络的安全性。

2.端口扫描结果:端口扫描显示了主机设备中存在一些开放的端口和服务漏洞。

其中包括未关闭的远程桌面端口、未加密的FTP服务、未受限制的SSH访问等。

建议限制这些服务的访问权限,并加强对开放端口的监控和防护。

3.漏洞扫描结果:漏洞扫描显示了系统中存在一些已知的漏洞和安全问题。

其中包括未修复的操作系统漏洞、未更新的应用程序、弱密码策略等。

建议及时修补这些漏洞,并对系统进行定期的漏洞扫描和更新。

4. Web应用程序扫描结果:Web应用程序扫描显示了公司网站和Web应用程序中存在一些潜在的Web漏洞和安全漏洞。

其中包括跨站脚本攻击、SQL注入漏洞、弱会话管理等。

建议对这些漏洞进行修复,并加强Web应用程序的安全配置和开发规范。

四、安全风险评估和建议根据以上的扫描结果,我们对公司的安全风险进行了评估,并提供了相应的建议。

1.风险评估:公司的网络安全状况存在一定的风险,主要体现在操作系统和应用程序的漏洞、弱密码、开放端口和Web漏洞等方面。

端口扫描实验实验报告

端口扫描实验实验报告

网络攻防对抗实验报告实验名称:端口扫描实验(实验三)指导教师:专业班级:姓名:学号:_____电子邮件: ___ 实验地点:实验日期:实验成绩:____________________一、实验目的通过练习使用网络端口扫描器,了解目标主机开放的端口和服务程序,从而获得系统的有用信息,发现网络系统的安全漏洞。

在实验中,我们将在Windows操作系统下使用端口扫描工具Xscan,Nmap和流光Fluxay5.0进行网络端口综合扫描实验,并给出安全性评估报告,加深对各种网络和系统漏洞的理解。

同时,通过系统漏洞的入侵练习增强网络安全防护意识。

二、实验原理TCP/IP协议在网络层是无连接的,而“端口”,就已经到了传输层。

端口便是计算机与外部通信的途径。

一个端口就是一个潜在的通信通道,也就是一个入侵通道。

对目标计算机进行端口扫描,能得到许多有用的信息。

进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。

在手工进行扫描时,需要熟悉各种命令,对命令执行后的输析出进行分,效率较低。

用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能。

通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。

扫描工具根据作用的环境不同可分为:网络漏洞扫描工具和主机漏洞扫描工具。

前者指通过网络检测远程目标网络和主机系统所存在漏洞的扫描工具。

后者指在本机运行的检测本地系统安全漏洞的扫描工具。

三、实验内容和步骤Xscan的应用1.Xscan的使用X-scan v3.3 采用多线程方式对指定IP 地址段进行扫描,扫描内容包括:SNMP 信息,CGI 漏洞,IIS 漏洞,RPC 漏洞,SSL 漏洞,SQL-SERVER、SMTP-SERVER、弱口令用户等。

扫描结果保存在/log/目录中。

其主界面为下图所示。

2.开始扫描(1)配置扫描参数,先点击扫描参数,在下面红框内输入你要扫描主机的ip 地址(或是一个范围),本说明中我们设置为靶机服务器的IP 地址, 192.168.20.245(2)选择需要扫描的项目,点击扫描模块可以选择扫描的项目(3)开始扫描,该扫描过程会比较长,请大家耐心等待,并思考各种漏洞的含义。

网络端口扫描

网络端口扫描

电子信息工程学系实验报告 ——适用于计算机课程课程名称:信息安全技术实验项目名称:网络端口扫描 实验时间:2011-9-26班级: 姓名: 学号:实 验 目 的:1.通过练习使用网络端口扫描器,了解目标主机开放的端口和服务程序,从而获得系统有用的信息,发现网络系统的安全漏洞。

2.在Windows 操作系统下使用Superscan 工具进行网络端口扫描实验。

3.通过端口扫描实验,可以增强学生在网络安全方面的防护意识。

实 验 环 境:Windows 操作系统、虚拟机、Superscan 工具实 验 内 容 及 过 程:1、使用SuperScan 扫描工具对同一网段内所有主机进行端口扫描,完成后,任选2台主机(其中一台为本机),分析其端口开放情况,要求注明开放的各端口含义,以及可能带来的危害。

安装Superscan 工具后,打开该软件,在“Port list file ”中选择“hensss.lst ”,如下图:在“IP ”一栏中选择要扫描的IP 网段范围,然后单击“start ”开始扫描。

成 绩:指导教师(签名):虚拟机的IP地址设置为:选择如下两台主机进行分析:危害。

135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地执行远程计算机上的代码;使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。

端口漏洞:有的病毒就是利用RPC漏洞来攻击计算机的。

RPC本身在处理通过TCP/IP的消息交换部分有一个漏洞,该漏洞是由于错误地处理格式不正确的消息造成的。

该漏洞会影响到RPC与DCOM之间的一个接口,该接口侦听的端口就是135。

而139端口是为“NetBIOS Session Service”提供的,主要用于提供Windows文件和打印机共享以及Unix 中的Samba服务。

实验五 端口扫描器实验报告(付代码)

实验五 端口扫描器实验报告(付代码)

实验5:端口扫描器的设计与实现姓名:学号:专业年级:(一)实验目的和内容:目的:加深对TCP的理解,学习端口扫描技术和原理,熟悉socket编程。

内容:实现一个扫描器,使用TCP connect进行端口扫描,并对扫描结果进行记录。

(二)课程设计要求:Windows或Linux环境下,程序在单机上运行;使用端口扫描器对一台主机进行扫描,并显示出结果;编程语言不限;提供友好的用户界面。

(三)端口扫描技术:“端口”是专门为计算机通信而设计的,它不是硬件,不同于计算机中的“插槽”,可以说是个“软插槽”。

“端口”是由计算机的通信协议TCP/IP协议定义的。

其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。

具体来说,就是用[IP:端口]来定位一台主机中的进程。

计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。

端口与进程是一一对应的,入侵者通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接。

(四)扫描端口的目的:端口扫描是入侵者搜集信息的几种常用手法之一,也正是这一过程最容易使入侵者暴露自己的身份和意图。

•判断目标主机上开放了哪些服务;•判断目标主机的操作系统。

如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能够使用相应的手段实现入侵。

(五)端口的分类:端口是一个16 bit的地址,用端口号进行标识不同的作用。

端口一般分为两类。

•熟知端口号(公认端口号):由因特网指派名字和号码公司ICANN负责分配给一些常用的应用层程序固定使用的熟知端口,其数值一般为0~1023。

•一般端口号:用来随时分配给请求通信的客户进程。

(六)扫描原理的基础知识:TCP/IP模型四层结构TCP与UDP协议TCP报文结构TCP连接和释放过程(七)TCP/IP模型四层结构:(八)TCP与UDP协议:Internet的网络通信大多是建立在这两个协议之上的,各个主机遵循着TCP/IP协议封装数据包进行通信。

X-scan扫描报告

X-scan扫描报告

X-scan V3.3 扫描报告一:目的:学会使用X-scan V3.3 扫描系统漏洞,并在此中学会分析问题解决问题,进一步提高我们的安全意识二:步骤:1.2.下载并安装x-scan V3.3安装好之后打开X-scan V3.3,填写扫描的IP 或IP 段3.单击设置里的扫描参数扫描参数里有全局设置,单击全局设置,并在全局设置里选择你想要扫描的参数,具体参数如下图4.设置完毕之后,确定,单击工具栏的绿色三角形开始扫描;扫描的情况如下图5.扫描完成之后查看扫描报告,扫描报告如下X-Scan 检测报告------------------扫描时间2010-4-28 14:12:05 - 2010-4-28 14:16:07 检测结果-存活主机: 10-漏洞数量: 0-警告数量: 0-提示数量: 52主机列表192.168.210.2 (发现安全提示)192.168.210.4 (发现安全提示)192.168.210.14 (发现安全提示)192.168.210.11 (发现安全提示)192.168.210.17 (发现安全提示)192.168.210.3 (发现安全提示)192.168.210.10 (发现安全提示)192.168.210.21 (发现安全提示)192.168.210.6 (发现安全提示)192.168.210.5 (发现安全提示)详细资料+ 192.168.210.2 :. 开放端口列表:o netbios-ssn (139/tcp) (发现安全提示)o http (80/tcp) (发现安全提示)o epmap (135/tcp) (发现安全提示)o netbios-ns (137/udp) (发现安全提示)o ntp (123/udp) (发现安全提示). 端口"netbios-ssn (139/tcp)"发现安全提示:"netbios-ssn"服务可能运行于该端口.BANNER 信息:83NESSUS_ID : 10330. 端口"netbios-ssn (139/tcp)"发现安全提示:远程主机开放了445 端口,没有开放139 端口。

Nmap实验报告

Nmap实验报告

本文档如对你有帮助,请帮忙下载支持!网络扫描软件Nmap的应用在网络攻击时,攻击者往往会使用网络和端口扫描软件对目标主机进行扫描,发现漏洞,为后续攻击做准备。

本实验使用网络扫描软件Nmap对北邮官网1.隐藏扫描(Stealth Scanning)-sS为TCP同步扫描,原理是源主机发送一个TCP同步包(SYN),然后等待目的主机的回应。

如果对方返回SYN|ACK包,就表示该目标端口打开。

Wireshark抓包可以看出在扫描过程中,源主机(10.8.70.224)向目标主机(10.3.9.254)最可能打开的1000个端口发送了TCP同步包,其中只有80端口和3306端口返回了SYN|ACK包,说明目标主机开放了这两个端口。

从Nmap扫描结果可以看出80端口提供的是http服务,3306提供的是mysql服务。

2.端口扫描(port scanning)-sT扫描是调用系统函数connect()用来打开一个链接,所以耗时要比-sS要多。

RTTVAR(往返延时变量)很大,应该网络拥塞引起的。

从wireshark抓包看出源主机与目的主机之间建立了完全的TCP链接,探测到端口开放后立即发送RST 断开链接。

3.UDP扫描(UDP Scanning)UDP扫描是向目标主机的每个端口发送一个0字节的UDP包,如果收到端口不可到达的ICMP消息,端口就是关闭的。

如wireshark抓包所示源主机向目标机的1031端口发送了一个0字节的UDP包。

端口1031收到了ICMP消息,说明端口是关闭的。

端口123开启的是ntp服务。

值得注意的是,此时发送的并不是0字节的UDP 包,而是内容为ntp的总长为224bit的UDP包。

4.Ping扫描(Ping Sweeping)对源主机所在网段(,Nmap是通过发送ARP包来询问IP地址上的主机是否活动的,如果收到ARP回复包,那么说明该主机在线。

如wireshark抓包所示源主机广播所扫描网段的ARP请求,没有回复的主机均视为没有在线。

实验总结报告

实验总结报告

实验总结报告实验总结报告「篇一」一、实验目的通过练习使用网络端口扫描器,可以了解目标主机开放的端口和服务程序,从而获取系统的有用信息,发现网络系统的安全漏洞。

在实验中,我们将在Windows 操作系统下使用Superscan进行网络端口扫描实验,通过端口扫描实验,可以增强学生在网络安全方面的防护意识。

利用综合扫描软件“流光”扫描系统的漏洞并给出安全性评估报告。

二、实验原理(一).端口扫描的原理一个开放的网络端口就是一条与计算机进行通信的信道,对网络端口的扫描可以得到目标计算机开放的服务程序、运行的系统版本信息,从而为下一步的入侵做好准备。

对网络端口的扫描可以通过执行手工命令实现,但效率较低;也可以通过扫描工具实现,效率较高。

扫描工具是对目标主机的安全性弱点进行扫描检测的软件。

它一般具有数据分析功能,通过对端口的扫描分析,可以发现目标主机开放的端口和所提供的服务以及相应服务软件版本和这些服务及软件的安全漏洞,从而能及时了解目标主机存在的安全隐患。

1.端口的基础知识端口是TCP协议中所定义的,TCP协议通过套接字(socket)建立起两台计算机之间的网络连接。

TCP/UDP的端口号在0~65535范围之内,其中1024以下的端口保留给常用的网络服务。

例如,21端口为FTP服务,23端口为TELNET服务,25端口为SMTP服务,80端口为HTTP服务,110端口为POP3服务等。

2.扫描的原理扫描的方式有多种,为了理解扫描原理,需要对TCP协议简要介绍一下。

一个TCP头的数据包格式如图2-1所示。

它包括6个标志位,其中:图2-1 TCP数据包格式扫描往往是入侵的前奏,所以如何有效的屏蔽计算机的端口,保护自身计算机的安全,成为计算机管理人员首要考虑的问题。

为了防止对计算机网络端口的扫描,我们可以采用端口扫描监测工具来监测对端口的扫描,防止端口信息外露。

常用的端口扫描监测工具包括ProtectX、PortSentry等。

端口扫描与安全审计实验报告参考模板

端口扫描与安全审计实验报告参考模板

端口扫描与安全审计实验报告1. 局域网主机发现列表扫描:nmap -sL 192.168.19.12. 扫描目标主机端口连续扫描目标主机端口:nmap –r 101.7.130.1853. 服务和版本检测目标主机服务和版本检测:nmap –sV 101.7.130.1314. 操作系统检测目标主机操作系统检测:nmap -O 101.7.130.1315. 端口扫描组合应用A,nmap -v -A B,nmap -v -sP 192.168.0.0/16 10.0.0.0/8实验地点指导教师网络入侵跟踪与分析实验报告根据实验结果的小组分类发现:一共生成20个目标IP地址2)扫描多个端口还是一个端口?如果扫描一个端口,是那一个RPC调用端口?Filter: ip.src == 128.153.22.191 and tcp.dstport == 135因此扫描一个端口。

3)分别计算第二组与第一组扫描、第三组与第二组扫描之间的间隔时间,扫描间隔时间有规律吗?第二组与第一组扫描间隔时间:678.770ms第三组与第二组扫描间隔时间:528.105ms即:扫描间隔时间有规律。

4)共发送了多少个试探攻击分组?Filter: ip.src == 128.153.22.191 有2006个Filter: ip.src == 128.153.22.191 and tcp.dstport == 135或tcp.flags.syn==1有2002个Filter: ip.src == 128.153.22.191 and tcp.dstport != 135有4个不是攻击分组即:共发送了2006个试探攻击分组;其中有2002个135端口,有4个不是135端口。

5)有试探攻击分组攻击成功吗?如攻击成功,请给出感染主机的IP地址。

如没有攻击成功的实例,说明为什么没有攻击成功?答:无攻击成功。

因为:Filter:tcp.flags.syn==1&&tcp.flags.ack==1实验结果:,表示被攻击主机无正确响应。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

杭州电子科技大学软件学院网络工程试验报告端口扫描报告09109146王子龙1.端口及端口扫描技术简介 (2)2.对现有端口扫描工具程序的理解 (2)主界面 (3)3.核心代码 (6)4.个人总结 (13)1.端口及端口扫描技术简介根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。

计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。

对应这两种协议的服务提供的端口,也就分为TCP 端口和UDP端口。

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。

主机不只是靠IP地址来区分网络服务,因为IP 地址与网络服务的关系是一对多的关系。

实际上是通过“IP地址+端口号”来区分不同的服务的。

一个端口就是一个潜在的通信通道,也就是一个入侵通道。

对目标计算机进行端口扫描,能得到许多有用的信息。

进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。

在手工进行扫描时,需要熟悉各种命令。

对命令执行后的输出进行分析。

用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能。

通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。

2. 对现有端口扫描工具程序的理解该程序是有C++编写的。

C++是一种使用非常广泛的计算机编程语言。

C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。

它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。

该程序能够扫描主机IP的某一个端口,或者是扫描该主机IP某一范围内的端口。

并且提供多次扫描功能。

如果要扫描的端口很多,在扫描过程中可以暂停扫描。

扫描结果在界面的下方显示。

主要显示内容有IP地址、端口号、端口状态、连接次数及备注。

主界面本机ip地址为169.254.103.168用端口扫描工具扫描135端口,135端口处于打开状态扫描处于某一范围内的端口号,比如80—90,任务进展将在界面下方显示,并且提示当前扫描哪一个端口及尝试扫描次数。

最终的扫描结果可以通过txt文本导出3.核心代码#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif//////////////////////////////////////////////////// /////////////////////////// CPortScanViewIMPLEMENT_DYNCREATE(CPortScanView,CFormView)BEGIN_MESSAGE_MAP(CPortScanView,CFormView)//{{AFX_MSG_MAP(CPortScanView)ON_WM_CTLCOLOR()ON_WM_SHOWWINDOW()ON_BN_CLICKED(IDC_RADIO_SINGLE,OnRadioSingle)ON_BN_CLICKED(IDC_RADIO_RANGE,OnRadioRange)ON_BN_CLICKED(IDC_BUTTON_SCAN,OnButtonScan)ON_BN_CLICKED(IDC_BUTTON_STOP,OnButtonStop)ON_COMMAND(ID_FILE_SAVE, OnFileSave)//}}AFX_MSG_MAPEND_MESSAGE_MAP()//////////////////////////////////////////////////// /////////////////////////// CPortScanView construction/destructionCPortScanView::CPortScanView(): CFormView(CPortScanView::IDD){//{{AFX_DATA_INIT(CPortScanView)//}}AFX_DATA_INIT// TODO: add construction code herem_pBrush = new CBrush;ASSERT(m_pBrush);//m_clrBk = RGB(0x00,0x00,0x77);m_clrText = RGB(0xff,0xff,0x00);//m_pBrush->CreateSolidBrush(m_clrBk);m_pColumns = new CStringList;ASSERT(m_pColumns);m_bSinglePort = TRUE;m_nMaxAttempts = 1; //default value, This value has been set on the windowm_pStatusList = new CPtrList;ASSERT(m_pStatusList);}CPortScanView::~CPortScanView(){if (m_pStatusList){//First Empty the port status list:POSITION p =m_pStatusList->GetHeadPosition();while (p){POSITION temp = p;DATA* pNode = (DATA*)m_pStatusList->GetNext(p);m_pStatusList->RemoveAt(temp);if (pNode)delete pNode;}//Then remove it from heap:delete m_pStatusList;}if (m_pBrush)delete m_pBrush;}void CPortScanView::DoDataExchange(CDataExchange*pDX){CFormView::DoDataExchange(pDX);//{{AFX_DATA_MAP(CPortScanView)DDX_Control(pDX, IDC_PROGRESS,m_cProgress);DDX_Control(pDX, IDC_EDIT_ATTEMPTS,m_cAttempts);DDX_Control(pDX, IDC_BUTTON_STOP,m_cBtnStop);DDX_Control(pDX, IDC_LIST_RESULT,m_cResult);DDX_Control(pDX, IDC_BUTTON_SCAN,m_cBtnScan);DDX_Control(pDX, IDC_IP_ADDRESS, m_cIP);DDX_Control(pDX, IDC_EDIT_SINGLE_PORT_TO,m_cPortTo);DDX_Control(pDX,IDC_EDIT_SINGLE_PORT_FROM, m_cPortFrom);DDX_Control(pDX, IDC_EDIT_SINGLE_PORT,m_cSinglePort);//}}AFX_DATA_MAP}BOOL CPortScanView::PreCreateWindow(CREATESTRUCT&cs){// TODO: Modify the Window class or styleshere by modifying// the CREATESTRUCT csreturn CFormView::PreCreateWindow(cs);}void CPortScanView::OnInitialUpdate(){CFormView::OnInitialUpdate();GetParentFrame()->RecalcLayout();ResizeParentToFit(FALSE);ResizeParentToFit();ShowHeaders(); CheckRadioButton(IDC_RADIO_SINGLE,IDC_RA DIO_RANGE,IDC_RADIO_SINGLE);m_cSinglePort.EnableWindow();m_cPortFrom.EnableWindow(FALSE);m_cPortTo.EnableWindow(FALSE);m_parent = (CMainFrame*)GetParent();ASSERT(m_parent);// m_cBtnStop.EnableWindow(FALSE);m_cAttempts.SetWindowText(_T("1"));}//////////////////////////////////////////////////// /////////////////////////// CPortScanView diagnostics#ifdef _DEBUGvoid CPortScanView::AssertValid() const{CFormView::AssertValid();}void CPortScanView::Dump(CDumpContext& dc)const{CFormView::Dump(dc);}CPortScanDoc* CPortScanView::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPortScanDoc)));return (CPortScanDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CPortScanView message handlersHBRUSH CPortScanView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CFormView::OnCtlColor(pDC,pWnd, nCtlColor);//break statement must be ignored:switch(nCtlColor){case CTLCOLOR_BTN:case CTLCOLOR_STATIC:pDC->SetBkColor(m_clrBk);pDC->SetTextColor(m_clrText);case CTLCOLOR_DLG:returnstatic_cast<HBRUSH>(m_pBrush->GetSafeHandle());}// TODO: Return a different brush if the defaultis not desiredreturnCFormView::OnCtlColor(pDC,pWnd,nCtlColor);}BOOL CPortScanView::AddColumn(LPCTSTR strItem,int nItem,int nSubItem,int nMask,int nFmt){LV_COLUMN lvc;lvc.mask = nMask;lvc.fmt = nFmt;lvc.pszText = (LPTSTR) strItem;lvc.cx = m_cResult.GetStringWidth(lvc.pszText)+ 25;if(nMask & LVCF_SUBITEM){if(nSubItem != -1)lvc.iSubItem = nSubItem;elselvc.iSubItem = nItem;}return m_cResult.InsertColumn(nItem,&lvc);}BOOL CPortScanView::AddItem(int nItem,int nSubItem,LPCTSTR strItem ,int nImageIndex){LV_ITEM lvItem;lvItem.mask = LVIF_TEXT;lvItem.iItem = nItem;lvItem.iSubItem = nSubItem;lvItem.pszText = (LPTSTR) strItem;if(nImageIndex != -1){lvItem.mask |= LVIF_IMAGE;lvItem.iImage |= LVIF_IMAGE;}if(nSubItem == 0)return m_cResult.InsertItem(&lvItem);return m_cResult.SetItem(&lvItem);}void CPortScanView::AddHeader(LPTSTR hdr){if (m_pColumns)m_pColumns->AddTail(hdr);}void CPortScanView::ShowHeaders(){int nIndex = 0;POSITION pos =m_pColumns->GetHeadPosition();while (pos){CString hdr = (CString)m_pColumns->GetNext(pos);AddColumn(hdr,nIndex++);}}void CPortScanView::OnShowWindow(BOOLbShow, UINT nStatus){CFormView::OnShowWindow(bShow, nStatus);AddHeader(_T("IP地址"));AddHeader(_T("端口号"));AddHeader(_T("端口状态"));AddHeader(_T("连接次数"));AddHeader(_T("备注"));}void CPortScanView::OnRadioSingle(){m_bSinglePort = TRUE;m_cSinglePort.EnableWindow();m_cPortFrom.EnableWindow(FALSE);m_cPortTo.EnableWindow(FALSE);}void CPortScanView::OnRadioRange(){m_bSinglePort = FALSE;m_cSinglePort.EnableWindow(FALSE);m_cPortFrom.EnableWindow();m_cPortTo.EnableWindow();m_cBtnStop.EnableWindow(FALSE);}//开始扫描按钮处理程序void CPortScanView::OnButtonScan(){CString btnTxt,IP;UINT nSinglePort;BYTE f1,f2,f3,f4;TCHAR temp[10] = "\0";m_cProgress.SetPos(0);m_cResult.DeleteAllItems();//清空列表框POSITION p =m_pStatusList->GetHeadPosition();while (p){POSITION temp = p;DATA* pNode = (DATA*)m_pStatusList->GetNext(p);m_pStatusList->RemoveAt(temp);//循环删除if (pNode)delete pNode;}//验证IP地址是否为空if (m_cIP.IsBlank()){MessageBox(_T("请输入IP地址."),_T("Error"),MB_OK | MB_ICONEXCLAMATION);return;}//验证IP地址是否正确if (m_cIP.GetAddress(f1,f2,f3,f4) < 4){MessageBox(_T("请确认IP地址."), _T("Invalid IP address"),MB_OK | MB_ICONEXCLAMATION);return;}//进行IP地址转化IP = _itoa(f1,temp,10);IP += _T('.');IP += _itoa(f2,temp,10);IP += _T('.');IP += _itoa(f3,temp,10);IP += _T('.');IP += _itoa(f4,temp,10);m_cBtnStop.EnableWindow();m_cBtnScan.EnableWindow(FALSE);//是否是单个端口扫描if (m_bSinglePort){CString port;m_cSinglePort.GetWindowText(port); m_minPort = m_maxPort = nSinglePort = atoi(port);}else{CString port1,port2;m_cPortFrom.GetWindowText(port1);m_cPortTo.GetWindowText(port2);m_minPort = atoi(port1);m_maxPort = atoi(port2);m_cProgress.SetRange32(0,m_maxPort-m_minPort+1);m_cProgress.SetStep(1);}if (!m_bSinglePort && m_maxPort <m_minPort){MessageBox(_T("最大端口要大于最小端口."),_T("Caution"),MB_OK | MB_ICONINFORMATION);return;}UINT m_nMaxAttempts = GetDlgItemInt(IDC_EDIT_ATTEMPTS);for (m_nCounter = m_minPort; m_nCounter <= m_maxPort; m_nCounter++){BOOL bIsOpen = FALSE;UINT nAttempt = 1;while(nAttempt <= m_nMaxAttempts&& !bIsOpen){TCHAR temp[10]="\0";CString str = _T("连接端口# ");#ifdef _UNICODEstr += _itow(m_nCounter,temp,10);#elsestr += itoa(m_nCounter,temp,10);#endifstr += _T(", IP地址=");str += IP;str += _T(", Attempt=");#ifdef _UNICODEstr += _itow(nAttempt,temp,10);#elsestr += itoa(nAttempt,temp,10);#endif//设定状态栏m_parent->SetStatusBarText(str);str.Empty();//打开连接bIsOpen =TestConnection(IP,m_nCounter);//判断是否打开if (bIsOpen){DATA* pNode = new DATA;ASSERT(pNode);strcpy(pNode->IPAddress,IP.GetBuffer(IP.GetLength()));strcpy(pNode->port,_itoa(m_nCounter,temp,10));pNode->bStatus = 1; //openpNode->nAttempts =nAttempt;m_pStatusList->AddTail(pNode);}//试图连接次数nAttempt++;}//如果还是无法扫描成功if (!bIsOpen){DATA* pNode = new DATA;ASSERT(pNode);strcpy(pNode->IPAddress,IP.GetBuffer(IP.GetLength()));strcpy(pNode->port,_itoa(m_nCounter,temp,10));pNode->bStatus = 0; //关闭状态pNode->nAttempts = nAttempt-1;m_pStatusList->AddTail(pNode);}MSG message;if(::PeekMessage(&message,NULL,0,0,PM_REMOVE)){::TranslateMessage(&message);::DispatchMessage(&message);}m_cProgress.StepIt();}//设定状态栏m_parent->SetStatusBarText((CString)_T("完毕"));m_cBtnScan.EnableWindow();m_cBtnStop.EnableWindow(FALSE);//填充报表视图UINT nIndex = 0;POSITION pos =m_pStatusList->GetHeadPosition();//循环插入扫描结果while (pos){DATA* pNode =(DATA*)m_pStatusList->GetNext(pos);AddItem(nIndex,0,pNode->IPAddress);AddItem(nIndex,1,pNode->port);if (pNode->bStatus){AddItem(nIndex,2,_T("打开"));AddItem(nIndex,4,_T("*"));}else{AddItem(nIndex,2,_T("关闭"));AddItem(nIndex,4,_T(" "));}AddItem(nIndex++,3,_itoa(pNode->nAttempts,temp,10));}}//打开连接BOOL CPortScanView::TestConnection(CString IP,UINT nPort){CTheSocket* pSocket;pSocket = new CTheSocket;ASSERT(pSocket);//创建socketif (!pSocket->Create()){//如果创建失败,则删除,返回falsedelete pSocket;pSocket = NULL;return FALSE;}//连接被连接的主机地址和指定端口while (!pSocket->Connect(IP , nPort)){//如果失败返回falsedelete pSocket;pSocket = NULL;return FALSE;}//关闭socketpSocket->Close();delete pSocket;return TRUE;}void CPortScanView::OnButtonStop(){m_nCounter = m_maxPort+1;m_cBtnStop.EnableWindow(FALSE);m_cBtnScan.EnableWindow();m_parent->SetStatusBarText((CString)_T("Ready"));}//保存成文件void CPortScanView::OnFileSave(){CFileDialog* pDlg = new CFileDialog(FALSE,_T("txt"),NULL,OFN_OVERWRITEPROMPT |OFN_EXPLORER | OFN_LONGNAMES,_T("Scanned ports files (*.txt)"),this);ASSERT(pDlg);if (pDlg->DoModal() == IDOK){int nHandle,retVal;nHandle =_open(pDlg->GetPathName(),_O_BINARY | _O_CREAT | _O_TRUNC | _O_RDWR);if (nHandle == -1){MessageBox(_T("Unable to openoutput file to write."),_T("Error"),MB_OK |MB_ICONEXCLAMATION);delete pDlg;return;}POSITION pos =m_pStatusList->GetHeadPosition();while (pos){CString buffer;DATA* pNode =(DATA*)m_pStatusList->GetNext(pos);buffer = pNode->IPAddress;buffer += _T(',');buffer += pNode->port;buffer += _T(',');if (pNode->bStatus)buffer += _T("Open");elsebuffer += _T("Close");buffer += _T("\r\n\0");retVal = _write(nHandle,(void*)buffer.GetBuffer(buffer.GetLength()),buffer.GetLength());if (retVal != buffer.GetLength()){MessageBox(_T("An error occured while writing records."),_T("Error"),MB_OK | MB_ICONEXCLAMATION);delete pDlg;return;}buffer.Empty();}_close(nHandle);}delete pDlg;}4.个人总结由于不熟悉C++语言,看这个端口扫描工具程序颇为吃力。

相关文档
最新文档