欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    计算机网络课程设计报告-- 简单的端口扫描器.docx

    • 资源ID:6724960       资源大小:109.47KB        全文页数:20页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机网络课程设计报告-- 简单的端口扫描器.docx

    课程设计报告20142015学年第一学期课程名称计算机网络设计题目简单的端口扫描器1引言31.1 课题的背景及意义31.2 端口扫描现状32 系统设计32.1 系统主要目标32.2 开发环境及工具32.3 功能模块与系统结构43 系统功能程序设计53.1 获取本机IP53.2 分割字符串函数的实现53.3 获取待扫描的IP地址63.4 4获取待扫描的端口号61.1.1 指定端口号的初始化81.1.2 指定端口号的保存83.5 TCPconnect()扫描93.5.1 基本原理93.5.2 扫描多个主机多端口多线程的实现103.5.3 扫描结果的显示103.6 UDP扫描113.6.1 基本原理113.6.2 计算效验和123.6.3 发送UDP数据包123.6.4 接收ICMP数据包134测试报告144.1 TCP扫描检测144.1.1 扫描本机144.1.2 扫描网络中其他主机144.1.3 扫描IP段154.2 UDP扫描检测164.2.1 扫描本机164.1.2扫描网络中其他主机174.3TCP、UDP一起扫描18结论18参考文献191引言1.1 课题的背景及意义网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。入侵者们是如何找到,并打开它们的城门呢?这些城门究竟通向何处?在网络中,把这些城堡的“城门”称之为计算机的“端口端口扫描是入侵者搜索信息的几种常用方法之一,也正是这一种方法最容易暴露入侵者的身份和意图。一般说来,扫描端口有以下目的:判断目标主机上开放了哪些服务判断目标主机的操作系统如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能使用相应的手段实现入侵。而如果管理员先掌握了这些端口服务的安全漏洞,就能采取有效的安全措施,防范相应的入侵。1.2 端口扫描现状计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。端口扫描技术是发现安全问题的重要手段之一。一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息,从而发现目标机的某些内在的弱点。2系统设计2.1 系统主要目标本程序主要实现了:简易的TCPCOrmeCt()扫描,支持多线程;UDP扫描功能;能对单个指定的主机进行扫描或扫描指定网段内的主机;能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描;2.2 开发环境及工具测试平台:WindoWSXPProfessional使用软件:VisualC+6.0开发语言:C语言2.3 功能模块与系统结构作为端口扫描程序,首先需要完成的功能就是对于系统操作系统的服务端口进行扫描,返回扫描结果。对于端口的扫描,包括对于本机系统服务端口,局域网内目标机系统,以及远程IP的系统服务端口进行扫描。有些时候,用户并不需要去扫描整个系统的所有端口,因为这样的话不仅会浪费大量的时间,而且可能导致难以找到自己需要了解的端口的扫描结果。所以,对于选择性地对端口进行扫描也非常重要。这当然也是扫描程序需要实现的功能之一。用户在等待扫描的时候,往往希望知道它的工作进度。这样用户可以更好地控制自己的操作。站在用户的角度思考,设置进度是程序需要完成的,这样就能知道程序扫描的进度。系统必须提供的服务是功能需求的基本,本着站在用户角度思考的原则,做出如上叙述需求,从简列举如下:扫描功能;地址选择功能;端口选择功能;进度显示功能;端口扫描程序功能模块如下图所示:3系统功能程序设计本程序主要实现了简易的TCPConnCCt()扫描和UDP扫描功能,对TCP扫描支持多线程扫描,UDP扫描仅支持单线程。3.1 获取本机IP首先使用winsock中的gethostname()函数获取本地主机的标准主机名,再使用函数gethostbyname()主机名字和地址信息的hostent结构指针,最后通过inet_ntoa()函数将地址转化为字符形式返回给主调函数。if(gethostname(szHostName,128)=0)(pHost=gethostbyname(szIlostName);for(i=0;pHost!=NULL&&pHost->h_addr_listi!=NULL;i+)*对每一个IP地址进行处理*/pszAddr=inet_ntoa(*(structin_addr*)pHost->h_addr_listi);break;3.2 分割字符串函数的实现由于扫描结果是使用静态字符串保存的,所以最后显示的时候,需要用到分割字符串函数,来将字符串中扫描出的端口号分离出来显示。本函数主要是通过Find()函数来查找用作分隔符的字符串在待查找的字符串中的位置,然后通过Add()函数将分隔符之间的字符保存进数组中,来达到分割字符的目的。while(-1!=pos)if(-1=pre_pos)pos=source.Find(division,pos);elsepos=source.Find(division,(pos+l);if(-1=pre_pos)iFirst=0;if(-1=pos)nCount=source.GetLengthO;elsenCount=pos;elseiFirst=pre_pos+len;if(-1!=pos)nCount=pos-pre_pos-Ien;elsenCount=source.GetLength()-pre_pos_len;dest.Add(source.Mid(iFirst,nCount);pre_pos=pos;)3.3 获取待扫描的IP地址通过判断选择的哪个RadioButton的值,来选择从对应的IPAddress控件中读入用户输入的值,若是单个的IP则将开始地址StartAddr和结束地址EndAddr都赋值为IPAddress控件的值;若是IP范围,则第一个IP地址赋值给StartAddr,最后一个IP地址赋值给EndAddr0voidCPortScanDlg:setAddr(DWORD&StartAddr,DWORD&EndAddr)(switch(m_conf_IP.m_IP)(case0:m_conf_IP.m_IP_Self.GetAddress(StartAddr);m_conf_IP.m_IP_Self.GetAddress(EndAddr);break;case 1:m_conf_IP.m_IP_Design.GetAddress(StartAddr);m_conf_IP.m_IP_Design.GetAddress(EndAddr);break;case 2:m_conf_IP.m_IP_Start.GetAddress(StartAddr);m_conf_IP.m_IP_End.GetAddress(EndAddr);break;default:break;3.4获取待扫描的端口号首先读入用户设置的允许的最大线程数。再通过判断选择的哪个RadioBUttOrI的值,来选择从对应的EditBOX控件中读入用户输入的值。若是指定的端口号,则循环读入EditBoX中的端口号(一个端口号占用一行,一次读入一行),每行的字符不超过9字符,再在读入的每行字符的末尾添加字符串结束标记''0',再通过atoi()函数把字符型转换为整型,存放在定义的数组结构中,并保存端口号的总个数。若是端口范围,则第一个端口号的值和最后一个端口号的值分别读入存放在定义的结构体中。voidCPortScanDlg:setPort(tag_PORTS*pScanParam,int&ThreadNum)(ThreadNum=m_conf_Port.m_ThreadNum;switch(m_conf_Port.m_Port)(case0:(shortnCount=0;charbuff10;for(inti=0;i<m_conf_Port.m_DesignPort.GetLineCountO;i+)(intIen=m_conf_Port.m_DesignPort.GetLine(i,buff,9);if(len!=0)(bufflen='0'pScanParam->nArrOfPortsnCount+=atoi(buff);pScanParam->nCount=nCount;pScanParam->bSepecifiedPort=0;break;case1:pScanParam->bSepecifiedPort=l;pScanParam->iStartPort=m_conf_Port.m_StartPort;pScanParam->iEndPort=m_conf_Port.m_EndPort;break;default:break;3.4.1指定端口号的初始化首先试着读取DefaultPorts.txt文件中保存的端口号,若读入成功,则显示该文本文档中保存的值;若该文件不存在或读入异常,则显示默认设置的值。voidconf_Port:IReadDefaultPortsO(try(CStdioFilef(zzDefaultPorts.txtzz,CFile:ImodeReadCFile:typeText);CStrings,ss;while(f.ReadString(ss)(S+=SS;S+二,rn,)GetDlgItemdDC_EDIT_DeSignPort)->SetWindowText(s);f.Close();catch(.)(CStrings=zz13rn37rnl23rnl35rnl39rn489rnl002zz;GetDlgItem(IDC_EDIT_DesignPort)->SetWindowText(s);)3.4.2指定端口号的保存在运行端口扫描时会将指定端口保存进文本文档DefaultPorts.Ixt中,若此文件不存在,则创建此文件。voidconf_Port:SaveDefaultPortsOCStdioFilef(zzDefaultPorts.txt”,CFile:ImodeCreateCFile:ImodeWritelCFile:ItypeText);charbuff10;for(inti-0;i<m_DesignPort.GetLineCountO;i÷+)intIen=m_DesignPort.GetLine(i,buff,9);if(len!=O)(bufflen=,O,;f.WriteString(buff);f.WriteString(z,rn,z);)f.Close();3.5TCPconnect()扫描这是最基本的TCP扫描。操作系统提供的ConneCt()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度。如果对每个目标端口以线性的方式,使用单独的COnneCt()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被发觉,并且被过滤掉。目标计算机的IogS文件会显示一连串的连接和连接是出错的服务消息,并且能很快的使它关闭。3.5.1基本原理调用ConnCCt()函数,根据返回值来判断端口是否打开的,ConnCCt()函数返回O说明建立连接成功,说明该端口是打开的,就将该端口保存进静态字符串变量中,然后关闭连接,则线程数减一。RunThreadNum是用来控制最大线程数量的。UINTCPortScanDlg:DoScanPort_TCP(LPVOIDIp)ret=connect(sock,(structSOCkaddr*)&sin,SiZeof(Sin);if(ret=O)(str.Format("%d”,ntohs(sin.sin_port);ShoWOUt_tcp+=str+“I;)closesocket(sock);RunThreadNum一;3.5.2扫描多个主机多端口多线程的实现扫描多个主机是使用for循环来实现逐个扫描的,多端口也是使用for循环来实现逐个扫描的。最大线程数量是通过变量RUnThreadNUm的值来控制的,当其值大于允许的最大线程数Oiaxthread时,便SleeP等待,直到存活的线程数小于maxthread,经过测试最大线程数InaXthread设置为150效果较好,不宜大于200O多线程的创建是通过调用AfXBeginThread()函数来实现的。for(nowAddr-StartAddr;nowAddr<=EndAddr;nowAddr+)for(inti=0;i<totalPort;i+)while(RunThreadNum>maxthread)Sleep(20);hThreadTcp=AfXBeginThread(DoScanPort_TCP,&inforabout,0,0,0,NULL);CloseHandle(HThreadTcp);Sleep(IO);3.5.3扫描结果的显示首先判断静态字符串变量showout_tcp是否为空,若为空说明没有端口是打开的。若存在打开的端口,则调用分割字符串函数将打开的端口号提取出来存放到AITay数组中,再分别显示出来。if(ShOWOUt_tcp!=)ArrayNum=SPlit/String(ShoWoUt_tcp,Array,);temp=O;while(temp<ArrayNum-1)m_result.Insertitems(intRow,strld,strip,strPort,ProtocolTCP,strpen);temp+;intRow+;1)3.6UDP扫描这种方法由于使用的是UDP协议。由于这个协议很简单,所以扫描变得相对比较困难。这是由于打开的端口对扫描探测并不发送一个确认,关闭的端口也并不需要发送一个错误数据包。幸运的是,许多主机在你向一个未打开的UDP端口发送一个数据包时,会返回一个ICMP_PORT_UNREACH错误。这样就能发现哪个端口是关闭的。UDP和ICMP错误都不保证能到达,因此这种扫描就不那么可靠。而且这种扫描方法是很慢的,因为RFC对ICMP错误消息的产生速率做了规定,而且本程序的UDP扫描只支持单线程。3.6.1基本原理首先使用SoCket()函数创建套接字,再用bind()函数绑定套接字,然后向扫描的目的主机的目的端口发送UDP数据包,再等待目的主机的目的端口是否返回ICMP_PORT_UNREACH错误数据报,若收到返回的错误数据包,则说明该端口是关闭着的,否则该端口是打开的,再将打开的端口保存进静态数组中,以方便显示结果。UINTCPortScanDlg:DoScanPortJDP(LPVOIDlp)/UDPporttoscansockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);if(bind(sockfd,(sockaddr*)&SOURCE_ADDR,sizeof(SOURCE_ADDR)=SOCKET_ERROR)if(retval=dig.SendJDPinfo(S_ADDRESS,inet,addr(D_ADDRESS),Source_Port,PortToScan)=SEND_FAULT)elseif(retval=SEND_SET_ERROR)elseif(retval=SEND_OK)if(retval=dlg.Get_ICMPinfo(sockfd,&DEST_ADDR)=1)str.Format(,z%dz,PortToScan);showout_udp+=str+z,;)closesocket(sockfd);returnO;3.6.2计算效验和首先通过while循环,将各位相加求和,若为奇数个字节,则最后通过if循环将最后一个字节加完,再移位做位运算,最后取反得到效验和,再返回给调用函数。USHORTCPortScanDlg:!checksum(USHORT*buffer,intsize)unsignedlongcksum-0;while(size>1)cksum+=*buffer÷+;size-二Sizeof(USHORT);)if(size)cksum+=*(UCHAR*)buffer;cksum二(cksum»16)+(cksum&Oxffff);cksum+=(cksum»16);return(USHORT)("cksum);)3.6.3发送UDP数据包先调用WSASOCket()函数创建sock套接字,再调用sets。CkOPt()函数设置套接字选项,再将UDP、IP头部填充好,最后调用SendtO()函数将构造的数据包发送到目的IP地址的扫描的端口。USHORTCPortScanDlg:SendJDPinfo(UINTS_ADR,UINTD_ADR,USHORTDF_SPT,USHORTSCAN_DPT)if(sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED)=INVALID_SOCKET)if(Check_Ret=SetSOCkoPt(SOCk,IPPROT0P,IP_HDRINCL,(char*)FLAG,Sizeof(FLAG)<0)填充UDP、IP头部Send_info-sendto(sock,Packet_Buf,ipheader->total_len,O,(structsockaddr*)&DEST_ADDR,sizeof(DEST_ADDR);closesocket(sock);returnO;)3. 6.4接收ICMP数据包首先定义一个套接字集合,并将其清空,再把读数据的套节字加入到套接字集合中,再通过SeleCt()函数检查套节字是否可读:1 .如果没有则返回1给主调函数,表示没有收到返回的IeMP_PORT_lJNREACH错误数据报,则说明该端口是打开的。2 .如果有可读的套接字,就再通过FDSSET()函数检查需要读取的套接字是否在可读的套接字集合中:(1)如果可读的套接字中没有需要读取的套接字,则返回1给主调函数,表示没有收到返回的ICMP_PORT_UNREACH错误数据报,则说明该端口是打开的。(2)如果可读的套接字中有需要读取的套接字,则调用recvfrom()函数从套接口上接收数据,如果没有数据,则说明该套接口不是用来传送数据的,则可以判断为返回的ICMP_PORT_UNREACH错误数据报,则说明该端口是关闭的。USHORTCPOrtSCanDlg:GetCMPinfo(UlNTICMP_SOCK,LPSOCKADDR_INSOURCE.ADDRESS)FD_ZERO(&rset);FD_SET(ICMP_SOCK,&rset);if(RECVJfSG=select(ICMP_SOCK,&rset,NULL,NULL,&tv)>0)if(FD_ISSET(ICMP_SOCK,&rset)RECVJfSG=recvfrom(ICMP_SOCK,(char*)icmpheader,sizeof(I_IPDATA),0,(LPSOCKADDR)&SOURCE_ADDRESS,&Recv_Slen);if(RECVJfSG<=0)returnO;)return1;14测试报告4.1 TCP扫描检测4.1.1扫描本机LIP设置(1) IP设置为本地IP(10.15.66.158):扫描本称ilpI1。1566.138(2) IP设置为127.0.0.1:扫描指定主独指定主机IP:I127.0.0.12 .端口设置为0T024,最大线程数设置为100,协议选择TCP3 .扫描结果(1) IP设置为本地IP(10.15.66.158)的扫描结果:扫描结果IBl工PI端口号协议状态0 12 335394512扫描结果ID IP端口号协议I状态0127.0.0.11351127.0.0,14452127.0.0.1912TCP openTCP openTCP open10. 15.66. 13810. 15.66. 13810.15.66.13810.15.66, 138open open open openTCP TCP TCP TCP(2) IP设置为127. 0. 0. 1的扫描结果:设置为扫描本地IP和设置为扫描127.0.0.1时扫描结果会有差别:扫描127.0.0.1时扫描不出端口139,具体原因还不清楚。4.1.2扫描网络中其他主机1.设置IP(经过ping命令发现IP为10.15.66.44的主机能Ping通)佝扫描指定主机指定主机IP:I1015.66.44|2.端口设置为OTO24,最大线程数设置为100,协议选择TCP。扫描结果如扫描结果IDif端口号I协议状态010.15.66.44135TCPopen由扫描结果可知能正常扫描,能正确扫描出能进行TCP连接的端口4.1.3扫描IP段L设置IP扫描指定IP段起始工F:结束IP:2.端口设置为扫描指定端口,最大线程数设置为100,协议选择TCP最大线程数:IOo«=200)扫描端口段起始端口 :扫描指定端口指定端口号:(256个)结束端口 :133780 123135 137138 139445 489912 10023.扫描结果PortScan设置IP设置端口I设置协议扫描结果m描结果IDIIP端口号I协议I状态4010.15.66.280TCPopen110.15.66.2135TCPopen210.15.66.4912TCPopen310.15.66.5135TCPopen410.15.66.12135TCPopen510.15.66.15135TCPopen610.15.66.16135TCPopen710.15.66.18912TCPopen810.15.66.21135TCPopen910.15.66.22135TCPopen1010.15.66.23135TCPopen1110.15.66.29135TCPopen1210.15.66.3880TCPopen1310.15.66.38135TCPop«n1410.15.66.40135TCPopen1510.15.66.41135TCPopen1610.15.66.43135TCPopen171JRAft>1ZQETrP八<三三S退出程序由扫描结果可知能正常扫描,但由于没有先判断主机是否在线,所以对不在线的主机也发送了连接请求,导致扫描速度较慢。4.2UDP扫描检测4.2.1 扫描本机LlP设置(1) IP设置为本地IP(10.15.66.158):罚IP;po1.66,138(2) IP设置为127.0.0.1:t三lf三l三指定主机IP:127.0.0.12 .由于是单线程,扫描速度较慢,端口设置为扫描指定端口,协议选择UDP扫描指定端口指定端口号:(256个)2 357895920 370233334810 1381111144913 .扫描结果:IP设置为本地IP(10.15.66.138)的扫描结果和IP设置为127.0.0.1的扫描结果相同:三描结果11)IIPT端口号协议OZJ0123456789101110. 15.66. 13810. 15.66.13810. 15.66. 13810. 15.66. 13810. 15.66.13810. 15.66.13810. 15.66. 13810. 15.66.13810. 15.66.13810. 15.66. 13810. 15.66. 13810. 15.66. 1382 35U89592O 3702334810 138111114491UDUDUDUDUDUDUIIUDUDlmUDUIIFpppppppppppopen open open open open open OPen open open open open open用UDP协议扫描本机的端口,由于收不到发送的ICMP_PORT_lJNREACH错误数据报,导致结果误判为所有端口都是打开的。4 .L2扫描网络中其他主机1 .设置IP(经过Ping命令发现IP为10.15.66.44的主机能ping通)扫描指定主机指定主机IP :2 .由于单线程,扫描速度较慢,端口设置为扫描指定端口,同扫描本机的设置。协议选择UDP3 .扫描结果如下m描结果IDIP端口号协议状态O10. 15.66.44123110.15.66.44137210.15.66.44138310. 15.66.44445PpppUDUDUDUD由扫描结果可知能正常扫描。4.3TCP、UDP一起扫描IP设置为10.15.66.44,端口设置为指定端口,协议选择TCP和UDP,扫描结果如下:三描结果IDIP端口号协议I状态010.15.66.44135TCPopen110.15.66.44123UDPopen210.15.66.44137UDPopen310.15.66.44138UDPopen410.15.66.44445UDPopen由扫描结果可知能正常扫描,但由于TCP扫描使用多线程速度较快,而UDP扫描则是单线程,所以速度较慢,若同时进行两种协议的扫描,会使整体速度下降很大进行扫描。,所以不建议选择两种协议同时结论本设计经过近1个多月的努力,基本满足了一个端口扫描程序的基本要求。完成后的程序实现了TCPConneCt()扫描和UDP扫描功能,TCP扫描支持多线程,能大大加快扫描速度。能对单个指定的主机进行扫描或扫描指定网段内的主机。能对指定的端口段内的端口进行逐个扫描,或扫描特定的部分端口号,以避免在不需要了解的端口号上浪费时间。进度条显示,能方便用户随时知道扫描的进度。系统设计期间,学习到很多课堂上没有的知识,还积累了很多实践经验,增强了动手能力和解决实际问题的能力。通过这次的课程设计,对网络编程有了更深入的了解,进一步熟悉了TCP和UDP协议的内容,掌握了TCP、UDP扫描端口的基本原理,学会了运用sock套接字构造UDP数据包并发送,以及如何接收ICMP数据包。对编程思想有了进一步的体会,养成了一些良好的编程习惯。系统虽然完成,但还有很多不足之处,希望自己能不断学习和实践,争取以后做得更好。虽然此软件实现了支持多线程的TCPCOnneCt()扫描功能,和单线程的UDP扫描功能。但也还有很多不足之处,如扫描功能单一:不支持TCPSYN扫描、TCPFIN扫描以及IP段扫描等功能,对UDP扫描不支持多线程功能,而且在扫描主机前没有发送ICMP报文去判断主机是否在线,还需要进一步完善。限于作者知识水平和经验有限,此程序还有许多有待完善和改正的地方,恳请各位老师和读者批评指正。参考文献11廿刚、闫丽丽、盛志伟、冼进.LinUX/UNIX网络编程.中国水利水电出版社.2008年第1版。2范建华、胥光辉、张涛等译.TCP/IP详解卷1:协议.机械工业出版社.2009年第1版。3黄维通.ViSUalC+面向对象与可视化程序设计(第2版).清华大学出版社.2007年第2版14郑莉、董渊、张瑞丰.C+语言程序设计(第3版).清华大学出版社.2004年第3版

    注意事项

    本文(计算机网络课程设计报告-- 简单的端口扫描器.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开