操作系统课程设计基于TCP端口扫描程序_第1页
操作系统课程设计基于TCP端口扫描程序_第2页
操作系统课程设计基于TCP端口扫描程序_第3页
操作系统课程设计基于TCP端口扫描程序_第4页
操作系统课程设计基于TCP端口扫描程序_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、仲恺农业工程学院课程设计报告课程名称:操作系统题目:基于TCP端口扫描程序院系:班级:姓名:学号:指导老师:1需求分析11.1 课题背景11.2 本课题研究意义11.3 安全扫描技术的产生及其发展趋势11.4 安全扫描技术的分类22端口扫描的相关知识35.1 网络端口扫描原理35.2 端口45.3 相关协议45.4 扫描的定义65.5 多线程技术65.6 网络套接字编程73概要设计8 整体设计框架8 流程图描述94详细设计11开法环境11界面设计11主要类说明12代码描述12基本信息检测模块12参数设计模块12端口扫描模块15结果输出模块165调试分析18编译及运行程序18系统主界面18子系统

2、功能测试186总结21参考文献221需求分析课题背景在21世纪的今天,计算机发展日新月异,伴随着网络技术的飞速更新,网络规模迅速增长和计算机系统的日益复杂,导致新的系统漏洞层出不穷,一些别有用心的人或者木马程序要想顺利的渗透一台联网的计算机,无论使用何种技术,首先必然要寻找计算机的漏洞来为自己的入侵打开大门。端口扫描器是一把双刃剑,端口扫描器的产生可以使网络中的计算机及时的发现主机的开放与未开放的端口状态。计算机的端口扫描技术是一种基于主动防御型的策略的重要技术手段。本课题通过对计算机端口扫描器的研究来提高对网络中计算机的安全的认识。本端口扫描器采用Java语言和JavaSocket编程原理开

3、发,在Ubuntu操作系统下通过测试。扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接,如果目标主机的此端口在规定时间内有回复,则说明该端口是开放的。利用多线程技术实现了对一目标IP进行设定数目的端口扫描。这种扫描器可以在输入IP的情况下,对指定的端口范围进行扫描。本课题研究意义现代社会是信息化网络化的社会,信息是社会发展的重要资源。信息安全的保障能力是一个国家的综合国力经济竞争实力和生存能力的重要组成部分,是世界各国在奋力攀登的制高点。网络安全是指网络系统的硬件软件及其系统中的数据受到保护,不会因为偶然的或者恶意的原因而遭到破坏、更改、泄漏,系统连续可靠的正常的运

4、行。网络安全包括技术领域和非技术领域两大部分:非技术领域包括一些制度政策管理安全意识是填权等方面的内容;技术领域包括:隐患扫描、防火墙、入侵检测、访问控制、虚拟专用网、CA认证、操作系统等方面的内容。这些技术的目标是保证信息的可控性、可用性、保密性、完整性和不可抵赖性。安全扫描技术的产生及其发展趋势随着Internet的不断发展,信息安全技术已经成为促进经济发展、社会进步的巨大推动了。端口扫描技术是网络安全扫描技术的一个重要的网络安全技术,与防火墙、入侵检测系统相互配合,能够有效地提高网络安全性。安全扫描是安全技术领域中的重要的一类。通过扫描能自动检测远程或者本地的主机系统的信息,包括主机的基

5、本信息(如计算机名、域名、组名、操作系统类型号等)、服务信息、用户信息以及漏洞信息,它的重要性在于能够对网络进行安全评估,及时发现安全隐患,防患于未然。任何技术的诞生都有深刻的思想基础,人们在对“安全”认识逐步深化的过程中,不断地提出新的安全理论并付诸实践。在这个认识的过程中有两次重大的飞跃:第一次飞跃式早在二十世纪八十年代,人们认为信息安全就是信息的保密性,相应的采取保障措施就是利用加密机制和基于计算机规则的访问控制。这个时期防火墙和入侵检测系统(IDS)进一步发展起来,并在保护内部网络中起到了积极作用。DanFam酢口We计seVenema出了划时代的隐患扫描思想,既然黑客可以查找系统的漏

6、洞,并且针对这些漏洞对系统进行攻击,那么隐患扫描程序就可以采取与黑客相同的方法找到系统漏洞,并且将他们加以修复,起到主动防御的作用。第二次飞跃就是在被动防护的基础上,提出了主动防御的思想。这就促进了安全扫描的技术的诞生。安全扫描的主动防御思想渗透到了许多其他的安全领域。安全扫描软件从最初的专门为UNIX系统编写的一些只具有简单的功能的小程序,发展到现在,已经成为可以用在多个系统的具有复杂的功能的商业程序。今后的发展趋势,我认为有以下几点:使用插件或者叫做功能模块技术。每个插件都封装一个或多个漏洞测试手段,主扫描程序通过代用插件的方法来执行扫描。仅仅是添加新的插件就可以使软件增加新功能,扫描更多

7、漏洞。在插件编写的规范公布的情况下,用户或者第三方公司甚至可以编写自己的插件来扩充软件的功能。同时这种技术使软件的升级维护都变得相对轻松,并且具有非常强的扩展性。由安全扫描程序到安全评估专家系统。最早的安全扫描程序只是简单的把各个扫描测试项目执行结果罗列出来,直接提供给测试者而不对信息进行任何分析处理。而当前较为成熟的扫描系统都能够将单个主机的扫描结果进行整理,形成报表能够并对具体漏洞提出一些解决方法,但对网络的状况缺乏一个整体的评估,对网络安全没有系统的解决方案。未来的安全扫描系统,应该不但能够扫描安全漏洞,还能够智能化的协助网络信息管理人员评估本网络的安全状况,给出安全建议,成为安全评估专

8、家的系统。安全扫描技术的分类安全扫描技术工具是一把双刃剑,既可以被网络管理员利用就,又可以被黑客利用。端口扫描技术和漏洞检测技术是就安全扫描技术中的关键技术。下面专门介绍本软件的侧重点端口扫描技术。端口扫描属于安全探测技术范畴,对应于网络攻击技术中的网络信息收集技术。黑客能否进入“房间”,关键在于他是否发现了打开了“门窗”。也就是说,关键是能否准确的收集系统信息。黑客要做的就是构造目标网络中的所有系统地图,包括操作系统的类型,版本号以及可以在其上运行的服务等。黑客手工收集信息一般遵循以下步骤:(1)获取主机名与IP地址:可以通过使用whois与nslookup等工具。(2)获得操作系统类型信息

9、:标识的最快方法就是试图telnet至该系统,从标识来判断。FTP信息:黑客将测试是否开放FTP服务,匿名FTP是否可用,若可用,则试图发掘更多的潜在问题。TCP/UDP扫描:对于TCP,telnet可以用来试图与某一特定端口连接,这也是手工扫描的基本方法。从返回的标识可以得到更多的信息。从中再分析系统是否开放RPC服务、FINGER,RUSERSRWHO比较危险的服务。这样,到这里为止,黑客完成了对远程系统信息的手工扫描。端口扫描软件就是要尽可能的自动地模拟黑客的扫描手段。根据端口扫描的方法的不同,端口扫描技术分为五大类:全开扫描:通过完整的TCP连接探查端口。主要有TCPconnect,反

10、向ident.半开扫描:通过不完整的TCP1接探查端口。主要有SYNflag,IPIDheaderdumbscan.隐蔽扫描(stealthscanning):利用FIN字段来探查端口。不包含标准三次握手的任一部分。主要有SMACKflag,ACKflags,NULLflags,ALLflags(XMAS).IP段扫描(sweepsscanning):同时对一个网段进行扫描。主要有TCPecho,UDPecho,TCPSYN,ICMPecho.2端口扫描的相关知识网络端口扫描原理一个端口就是一个潜在的通信信道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。进行扫描的方法很

11、多,可以使手工进行扫描,也可以是端口扫描软件进行。在手工进行扫描时,需要熟悉各种命令。命令执行后的输出进行分析。用扫描软件进行扫描时,许多扫描软件都有分析数据功能。通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。扫描器是一种自动检测远程或本地主机安全性软弱点的程序,通过使用扫描器你可以留痕迹的发现远程服务器的各种TCP端口的分配及提供的服务和他们的软件版本,这就能让我们间接的或直观的了解到远程主机所存在的安全问题。扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息(比如:是否能用匿名登陆、是否有可写的FT

12、P目录、是否能用TELNETHTTPD1用ROOTS是nobady在跑!)。扫描并不是一个直接的攻击网络漏洞的程序,它仅仅能帮助我们发现目标机的某些内在的弱点。一个好的扫描器能对它得到的数据进行分析,帮助我们查找目标主机的漏洞。但它不会提供进入一个系统的详细步骤。端口协议端口是一种抽象,其行为类似于TCP/IP连接的逻辑端点。在TCPB议中,仅仅用连接双方的IP地址来标识一条连接显然是不够的。在多任务操作系统中,系统允许多个进程同时使用TCP协议进行通信,因此必须能够区分这些不同的进程所对应的不同连接。端口可以区分这些不同的通信进程。每个端口由一个正整数识别,称为端口号。信息传送中每个信息都载

13、有一个用来接收目的端口号和回复应该发往的源端口号。”公开端口”是由InternetAssignedNumbersAuthority(IANA)分配的,并且只能被系统(或root)进程或者被授予权利的用户执行的程序使用。根据提供服务类型的不同,端口分为两种,一种是TC训口,一种是UD嘲口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后不去确认信息是否到达,这种方式大多采用UDPB议。对应这两种协议的服务提供的端口,也就分为TC训口和UD础口。当可能时,对应的TCP和UDP务被分配给相同的编号。公开端

14、口:0-1023注册端口:102449151动态或私有端口:4915265535相关协议TCP/IP协议栈是网络扫描技术的基础,最基本的扫描方式TCPConnect。就是利用了TCP议;而当前流行的端口扫描技术如SYNB描(半打开扫描)、FIN扫描和NULLS描等等,都是利用了TCP的三次握手来完成的。I.TCP数据包结构一个TCP数据包包括一个TCP头,后面是选项和数据。它的格式如图1。原端口目的端口发送序号TCP数据图1TCP报头格式n.tcp/ip遵循的原则.当一个SYNHE者FIN数据包到达一个关闭的端口,TCP丢弃数据包,同时发送一个RST&据包。.当一个RST数据包到达一个监听端口

15、,RST1丢弃。.当一个RST数据包到达一个关闭的端口,RST被丢弃。.当一个不包含ACK的数据包到达一个监听端口时,数据包被丢弃,同时发送一个RST&据包。.当一个SYNK闭的数据包到达一个监听端口时,数据包被丢弃。.当一个SYNB据包到达一个监听端口时,正常的三次握手继续,回答一个SYN|ACK数据包。.当一个FIN数据包到达一个监听端口时,数据包被丢弃。FIN行为”(关闭的端口返回RST监听端口丢弃包),所有的URGPSH?口FIN,或者没有任何标记的TCRR据包都会引起“FIN行为”m.TCP三次握手过程SYN,ACK,SEQ=Y,ACK=X+1确认ACK,SEQ=X+1,ACK=Y+

16、1确认图2TCP连接建立过程扫描的定义扫描程序(Scanner)是自动检测远端主机或者本地主机安全脆弱性的程序。通过使用扫描程序一个用户可以发现远程服务器的安全弱点。目前,绝大多数操作系统都支持TCP/IP协议簇,扫描程序查询TCP/IP端口并记录目标机器的响应。扫描程序通过确定下列项目收集目标主机的有用信息:当前主机正在进行什么服务?哪些用户拥有这些服务?是否支持匿名登录?是否有某些网络服务需要鉴别?多线程技术每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把

17、它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。(1)什么是多线程?多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。(2)使用线程的好处有以下几点:使用线程可以把占据长时间的程序中的任务放到后台去处理用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度程序的运行速度可能加快在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用

18、等等。网络套接字编程(1)套接字基本概念套接字是应用程序通信的基石,是支持TCP/IP协议的网络通信应用的基本操作单元。可以将套接字看作是不同主机间的进程进行双向通信的端点:网络中两台通信的主机各自在自己机器上建立通信的端点套接字,然后使用套接字进行数据通信。一个套接字是如下描述的一个结构:协议,本地地址,本地端口,远程地址,远程端口操作系统会为本地建立的套接字分配一个唯一的套接字标识号,应用程序按该标识号来使用套接字进行网络通信。根据网络通信的特征,套接字主要分为两类:流套接字(SOCK_STREAM数据报套接字(SOCK_DGRAM流套接字是面向连接的,它提供双向的、有序的、无差错、无重复

19、并且无记录边界的数据流服务,适用于处理大量数据,提供可靠的服务。数据报套接字是无连接的,它支持双向的数据传输,具有开销小、数据传输效率高的特点,但不保证数据传输的可靠性、有序性和无重复性,适合少量数据传输、以及时间敏感的音视频多媒体数据传输。止匕外,还有一种较少使用的套接字叫原始套接字(SOCK_RAVV可以使用它对底层协议如IP或ICMP直接访问,在通信与协议开发时有时会用到。(2)JavaSocket编程原理以J2SDK-1.3为例,Socket和ServerSocket类库位于包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产

20、生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过Socketlmpl类及其子类完成的。重要的SocketAPI:.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。Accept方法用于产生阻塞”,直到接受到一个连接,并且返回一个客户端的Socket对象实例。阻塞”是一个术语,它使程序运行暂时停留”在这个地方,直到一个会话产生,然后程序继续

21、;通常阻塞”是由循环产生的。getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。3概要设计3.1整体设计框架经过大量的分析与调研,进而设计出由以下几个模块组成的简单网络扫描器。整个端口扫描器的核心部分是扫描模块,它是由很多子模块组成的,具结构如下图所示TCP端口扫描程序3.2流程

22、图描述基本信息检测模块Ip地址是否存在?参端娄口设扫计描模模块块1F1端调口用范函围数?线程奴?结果输出模块图3扫描模块的结构图匹配过滤模块1是否在参数范围内?1图4程序流程图4详细设计开法环境本扫描器在Ubuntu操作系统下,使用系统自带的VI编辑器用Java语言编写的,并且所有测试也在此环境下进行。界面设计AWSwing的基础。AWT设计的初衷是支持开发小应用程序的简单用户界面。但是AW缺少剪贴板、打印支持、键盘导航等特性,而且原来的AWT甚至不包括弹出式菜单或滚动窗格等基本元素。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。Swing组件几乎都是轻量组件,与重量组件

23、相比,没有本地的对等组件,不像重量组件要在它们自己的本地不透明窗体中绘制,轻量组件在它们的重量组件的窗口中绘制。本次课程设计利用了AWff口swing结合起来做个简单的界面设计,其导入语句为:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;具体函数说明为:JTextAreaResult()定义输入区域的大小;JTextFieldhostname()定义IP域名JTextFieldminPort():定义最小端口JTextFieldmaxPort():定义最大端口JTextFieldmaxThread()定义最大线程数JDi

24、alogDLGError():定义错误提示标签LabelDLGINFO():定义错误提示信息Labelstatus。定义状态表示ButtonOK():定义确认按钮JButtonSubmit():定义确定按钮JButtonCancel():定义退出按钮主要类说明classTCPThreadextendsThread:利用多线程的方法来实现TC训口扫描,其中:利用调用run()方法进行多线程的运行,逐次扫描得出对应的TC训口号。还应用了网络编程套接字进行客服端和服务器端的模拟,用输入输出流进行信息的交换。classCancleimplementsActionListener:事件监听器,相应Can

25、cle按钮classSubmitimplementsActionListener:事件监听器,相应Submit按钮。主要利用java的异常处理机制进行相应信息的匹配classOKimplementsActionListener:事件监听器,相应OK按钮publicclassScan:主要进行界面化设计,调用上面的事件相应。代码描述基本信息检测模块classTCPThreadextendsThreadpublicstaticInetAddresshostAddress;publicstaticintMIN_port;publicstaticintMAX_port;privateintthread

26、num;publicTCPThread(Stringname,intthreadnum)super(name);this.threadnum=threadnum;参数设计模块classSubmitActionimplementsActionListenerpublicvoidactionPerformed(ActionEventa)intminPort;intmaxPort;intmaxThread;try(minPort=Integer.parseInt(PortScanner.minPort.getText();maxPort=Integer.parseInt(PortScanner.ma

27、xPort.getText();maxThread=Integer.parseInt(PortScanner.maxThread.getText();catch(NumberFormatExceptione)(PortScanner.DLGINFO.setText(Portnumberandthenumberofthreadsmustbeaninteger!);PortScanner.DLGError.setVisible(true);PortScanner.status.setText(ScanStatus:NotStarted);return;try(TCPThread.hostAddre

28、ss=InetAddress.getByName(PortScanner.hostname.getText();catch(UnknownHostExceptione)(PortScanner.DLGINFO.setText(IncorrectIPaddressoraddressunreachable!);PortScanner.DLGError.setVisible(true);PortScanner.status.setText(ScanStatus:NotStarted);return;if(minPort65535|minPortmaxPort)(PortScanner.DLGINFO

29、.setText(Portnumberis0-65535!);PortScanner.DLGError.setVisible(true);return;elseTCPThread.MIN_port=minPort;if(maxPort65535|maxPortminPort)(PortScanner.DLGINFO.setText(Portnumberis0-65535!);PortScanner.DLGError.setVisible(true);PortScanner.status.setText(ScanStatus:NotStarted);return;elseTCPThread.MA

30、X_port=maxPort;if(maxThread500)(PortScanner.DLGINFO.setText(Integernumberofthreadsforthe1-500!);PortScanner.DLGError.setVisible(true);PortScanner.status.setText(ScanStatus:NotStarted);return;PortScanner.Result.setText();PortScanner.Result.append(Scanning:+PortScanner.hostname.getText()+Threads:+Port

31、Scanner.maxThread.getText()+n);PortScanner.Result.append(OpenPorts:);for(inti=0;imaxThread;i+)newTCPThread(T+i,i).start();)端口扫描模块publicvoidrun()(inti;SockettheTCPsocket;+=for(i=MIN_port+threadnum;iMAX_port;iInteger.parseInt(PortScanner.maxThread.getText()(PortScanner.status.setText(ScanStatus:Scanpo

32、rt+i);try(theTCPsocket=newSocket(hostAddress,i);theTCPsocket.close();PortScanner.Result.append(i+,);)catch(IOExceptione)()if(i=MAX_port)(PortScanner.Result.append(n+Thescaniscomplete.);PortScanner.status.setText(ScanningStatus:Completed!);)结果输出模块publicclassPortScanner(publicstaticJFramemain=newJFram

33、e(PortScanner);publicstaticJTextAreaResult=newJTextArea(”,4,43);publicstaticJScrollPanescroll=newJScrollPane(Result);publicstaticJTextFieldhostname=newJTextField(localhost,8);publicstaticJTextFieldminPort=newJTextField(0,4);publicstaticJTextFieldmaxPort=newJTextField(1000,4);publicstaticJTextFieldma

34、xThread=newJTextField(100,3);publicstaticJDialogDLGError=newJDialog(main,Wrong!);publicstaticLabelDLGINFO=newLabel();publicstaticLabelstatus=newLabel(ScanStatus:NotStarted);publicstaticvoidmain(Stringargs)(main.setSize(520,230);main.setLocation(300,300);main.setResizable(false);DLGError.setSize(350,

35、100);DLGError.setLocation(400,400);JPanelmainPanel=newJPanel();LabelH=newLabel(IPAddress:);LabelP1=newLabel(PortRange:);LabelP2=newLabel();Results:Label(LabelTNUM=newLabel(Threads:);LabelRST=newLabel(Scan);Labelcon=newResult.setLineWrap(true);Result.setEditable(false);JButtonOK=newJButton(OK);JButto

36、nSubmit=newJButton(OK);JButtonCancel=newJButton(Cancle);ContainermPanel=main.getContentPane();ContainerdPanel=DLGError.getContentPane();mPanel.setLayout(newFlowLayout(FlowLayout.LEFT);dPanel.setLayout(newFlowLayout(FlowLayout.CENTER);scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_A

37、S_NEEDED);mPanel.add(H);mPanel.add(hostname);mPanel.add(P1);mPanel.add(minPort);mPanel.add(P2);mPanel.add(maxPort);mPanel.add(TNUM);mPanel.add(maxThread);mPanel.add(RST);mPanel.add(scroll);mPanel.add(con);mPanel.add(Submit);mPanel.add(Cancel);mPanel.add(status);dPanel.add(DLGINFO);dPanel.add(OK);mai

38、n.setVisible(true);Submit.addActionListener(newSubmitAction();Cancel.addActionListener(newCancleAction();OK.addActionListener(newOKAction();5调试分析编译及运行程序劭一eroDt)ubuntw:/usr/|avaFileEditViewSearchTermrnalHelproot(aubuntu:/home/iker#cd/usr/javarootubuntu:/usr/java#javacPortscanner.javarootubuntu:/usr/j

39、ava#javaPortscanner图5编译及运行程序系统主界面图6主界面利用java的awt,swing做界面,界面相对比较简单。主要显示的信息包括:程序名字,IP地址,端口范围,线程数等基本信息。输入相关的信息,就可以进入扫描系统。子系统功能测试图7输入端口错误当输入错误的端口号时,提示错误信息“端口号或线程数错误!端口号和线程数必须为整数!IPAddress:|l0/白fhost|PortRange:|F5537|Threads:|10口ScanResults:CandeScanStatusiMotStarted图8输入端口错误当输入的端口范围不在所规定的范围内,提出错误信息“端口需界于0-65535!图9输入线程错误当输入的线程数范围不在所规定的范围内,提出错误信息”线程数位1-500!的整数!图10侦测本主机IP地址通过侦测本主机的IP地址,检测得到了相应的端口,通过这些端口,我们可以适量的做安全评估和安全防御。PortScanneirIPAddress:.92.168.L222Port

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论