



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(完整)udp端口扫描 报告(完整)udp端口扫描 报告 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)udp端口扫描 报告)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整)udp端口扫描 报告的全部内容。第21页 共24页 网络协议分析利用udp进行主机端口扫描专 业: 班 级: 姓 名: 学 号: 日
2、期: 目 录1. 任务题目及要求11。1 任务简介11.2 任务要求12。 课题成员及分工13. 相关知识简介23。1 课题的背景及意义23.2 关键技术23.3 关键api函数33。3。1。 wsastarup函数33。3。2. wsacleanup函数33.3.3。 socket函数33.3。4。 closesocket函数43.3.5。 sendto函数43.3。6. recvfrom函数43.3.7。 bind函数44. 系统设计64.1 主要目标64。2 开发环境及工具64。3 功能模块与系统结构65。 udp扫描的实现85。 1 基本原理85。2 计算效验和95.3 发送udp数据
3、包95。4 接收icmp数据包106. udp扫描检测137. 心得体会14参 考 文 献151。 任务题目及要求1。1 任务简介 udp是tcp/ip协议族伟传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的,不可靠的协议。udp在一个较低的水平上完成进程之间的通信,在收到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比较高的局域网.由于udp采用无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。本次课程设计的目的主要是了解udp协议的网络传输过程中的一些原理。1.2 任务要求编写一个简单的主机端口扫描程序,要求能够探测目的主机
4、的端口状态。具体要求:(1)要求用户可以在参数中输入需要扫描的目的主机的ip地址与端口,输出端口的状态信息.(2)要求使用udp协议进行端口的扫描过程。(3)有良好的编程规范与注释信息。2. 课题成员及分工本课题组员:周均负责全部工作.3. 相关知识简介3。1 课题的背景及意义网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。入侵者们是如何找到,并打开它们的城门呢?这些城门究竟通向何处?在网络中,把这些城堡的“城门”称之为计算机的“端口”。端口扫描是入侵者搜索信息的几种常用方法之一,也正是这一种方法最容易暴露入侵者的身份和意图。一般说来,扫描端口有以下目的:判
5、断目标主机上开放了哪些服务判断目标主机的操作系统如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能使用相应的手段实现入侵。而如果管理员先掌握了这些端口服务的安全漏洞,就能采取有效的安全措施,防范相应的入侵。计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。端口扫描技术是发现安全问题的重要手段之一。一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。扫描器通过选用远程tcp/ip不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主
6、机的各种有用的信息,从而发现目标机的某些内在的弱点。3。2 关键技术udp 是user datagram protocol的简称, 中文名是用户数据包协议,是 osi 参考模型中一种无连接的传输协议,提供面向事务的简单不可靠信息传送服务,ietf rfc 768是udp的正式规范。在大多数情况下,当向一个未开放的udp 端口发送数据时,其主机就会返回一个icmp不可到达(icmp port unreachable)的错误,因此大多数udp 端口扫描的方法就是向各个被扫描的udp 端口发送零字节的udp 数据包,如果收到一个icmp 不可到达的回应,那么则认为这个端口是关闭的,对于没有回应的端口
7、则认为是开放的.可是由于大部分系统都限制了icmp 差错报文的产生速度,所以针对特定主机的udp 大量端口扫描速度缓慢,此外由于udp 协议和icmp 协议都是不可靠协议,所以未收到回应可能由于数据包未送达造成,所以扫描程序需要针对同一端口多次尝试后才能确定其状态。3。3 关键api函数3.3.1. wsastarup函数wsastarup函数的格式如下:int wsastarup(word wversionrequested, lpwsadata lpwsadata ); 程序在使用socket之前必须使用wsastarup函数。该函数的第一个参数wversionrequested:一个wo
8、rd(双字节)型数值,指定了应用程序需要使用的winsock规范的最高版本 ;第二个参数lpwsadata: 指向wsadata数据结构的指针,用来接收windows sockets实现的细节。函数执行成功后返回0.3。3.2。 wsacleanup函数wsacleanup函数的格式如下:int wsacleanup(void);程序在完成对请求的socket库的使用后,要调用wsacleanup函树来解除与socket库的绑定并且释放socket库所占用的系统资源.3。3.3。 socket函数socket函数格式为:socket(int af,int type,int protocol)第
9、一个参数指定应用程序使用的通信协议的协议族,对于tcp/ip协议族,该参数置af_inet; 第二个参数指定要创建的套接字类型,流套接字类型为sock_stream、数据报套接字类型为sock_dgram、原始套接字sock_raw(winsock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部); 第三个参数指定应用程序所使用的通信协议,此参数可以指定单个协议系列中的不同传输协议,在internet通讯域中,此参数一般取值为0,系统会根据套接字的类型决定应使用的传输层协议。3。3.4. closesocket函数 closesocket函数的格式为:closesock
10、et( socket s); closesocket函数用来关闭一个描述符为s的套接字。如果发生错误,则closesocket()返回0;否则的话,返回socket_error错误 。3。3。5. sendto函数sendto函数的格式为:sendto( socket s, const char far* buf, int len, int flags,const struct sockaddr far* to, int tolen); sendto函数用来向某个端口发送数据。s:一个标识套接口的描述字;buf:包含待发送数据的缓冲区;len:buf缓冲区中数据的长度;flags:调用方式标志
11、位;to:(可选)指针,指向目的套接口的地址;tolen:to所指地址的长度 。3。3。6. recvfrom函数recvfrom函数的格式为:recvfrom(int s,void buf,int len,unsigned int flags, struct sockaddr from,socket_t fromlen) recvfrom函数用来接收返回的icmp包。s:标识一个已连接套接口的描述字;buf:接收数据缓冲区;len:缓冲区长度;flags:调用操作方式;from:(可选)指针,指向装有源地址的缓冲区;fromlen:(可选)指针,指向from缓冲区长度值。3。3。7. bin
12、d函数bind函数的格式为:int bind( socket s, const struct sockaddr far name,int namelen) bind函数用来给socket绑定一个ip地址和一个特定的端口号。s:标识一未捆绑套接口的描述字;name:赋予套接口的地址;sockaddr结构定义如下: struct sockaddr u_short sa_family; char sa_data14; ; namelen:name名字的长度。4. 系统设计4。1 主要目标本程序主要实现了:udp扫描功能;能对单个指定的主机进行扫描或扫描指定网段内的主机;能扫描特定的部分端口号或对指定
13、的端口段内的端口进行逐个扫描;4。2 开发环境及工具测试平台:windows xp professional使用软件:visual c+ 6。0开发语言:c语言4.3 功能模块与系统结构作为端口扫描程序,首先需要完成的功能就是对于系统操作系统的服务端口进行扫描,返回扫描结果。对于端口的扫描,包括对于本机系统服务端口,局域网内目标机系统,以及远程ip的系统服务端口进行扫描。有些时候,用户并不需要去扫描整个系统的所有端口,因为这样的话不仅会浪费大量的时间,而且可能导致难以找到自己需要了解的端口的扫描结果。所以,对于选择性地对端口进行扫描也非常重要。这当然也是扫描程序需要实现的功能之一。用户在等待扫
14、描的时候,往往希望知道它的工作进度。这样用户可以更好地控制自己的操作。站在用户的角度思考,设置进度是程序需要完成的,这样就能知道程序扫描的进度。系统必须提供的服务是功能需求的基本,本着站在用户角度思考的原则,做出如上叙述需求,从简列举如下:扫描功能;地址选择功能;端口选择功能;端口扫描程序功能模块如下图所示:图1 系统功能模块图图2 程序执行流程图5. udp扫描的实现这种方法由于使用的是udp协议.由于这个协议很简单,所以扫描变得相对比较困难.这是由于打开的端口对扫描探测并不发送一个确认,关闭的端口也并不需要发送一个错误数据包.幸运的是,许多主机在你向一个未打开的udp端口发送一个数据包时,
15、会返回一个icmp_port_unreach错误.这样就能发现哪个端口是关闭的。udp和icmp错误都不保证能到达,因此这种扫描就不那么可靠。而且这种扫描方法是很慢的,因为rfc对icmp错误消息的产生速率做了规定,而且本程序的udp扫描只支持单线程。5. 1 基本原理首先使用socket()函数创建套接字,再用bind()函数绑定套接字,然后向扫描的目的主机的目的端口发送udp数据包,再等待目的主机的目的端口是否返回icmp_port_unreach错误数据报,若收到返回的错误数据包,则说明该端口是关闭着的,否则该端口是打开的,再将打开的端口保存进静态数组中,以方便显示结果。doscanpo
16、rt_udp(lpvoid lp) / udp port to scan sockfd = socket(af_inet, sock_raw, ipproto_icmp); if(bind(sockfd,(sockaddr )&source_addr,sizeof(source_addr) = socket_error)if(retval = dlg.send_udpinfo(s_address, inet_addr(d_address), source_port, porttoscan) = send_fault) else if(retval = send_set_error)else i
17、f(retval = send_ok)if(retval=dlg。get_icmpinfo(sockfd,&dest_addr)=1)str。format(%d”,porttoscan);showout_udp+=str+|”;closesocket(sockfd);return 0;5.2 计算效验和首先通过while循环,将各位相加求和,若为奇数个字节,则最后通过if循环将最后一个字节加完,再移位做位运算,最后取反得到效验和,再返回给调用函数./计算校验和ushort checksum(ushort buffer, int size) unsigned long cksum = 0; wh
18、ile (size 1) cksum += *buffer+; size -= sizeof(ushort); if (size) cksum += (uchar)buffer; cksum = (cksum 16) + (cksum 0xffff); cksum += (cksum 16); return (ushort)(cksum);5。3 发送udp数据包先调用wsasocket()函数创建sock套接字,再调用setsockopt()函数设置套接字选项,再将udp、ip头部填充好,最后调用sendto()函数将构造的数据包发送到目的ip地址的扫描的端口。/发送tcp协议数据/为了独立
19、性 协议的数据结构全部定义在内部int sendudppacket(int port, char destip) if (sock=wsasocket(af_inet,sock_raw,ipproto_ip,null,0,wsa_flag_overlapped))=invalid_socket) if (check_ret = setsockopt(sock,ipproto_ip, ip_hdrincl,(char )&flag,sizeof(flag)) 0) 填充udp、ip头部 send_info = sendto(sock,packet_buf,ipheadertotal_len,0,
20、(struct sockaddr )&dest_addr,sizeof(dest_addr);closesocket(sock);return 0;5。4 接收icmp数据包首先定义一个套接字集合,并将其清空,再把读数据的套节字加入到套接字集合中,再通过select()函数检查套节字是否可读:1.如果没有则返回1给主调函数,表示没有收到返回的icmp_port_unreach错误数据报,则说明该端口是打开的。2。如果有可读的套接字,就再通过fd_isset()函数检查需要读取的套接字是否在可读的套接字集合中:(1)如果可读的套接字中没有需要读取的套接字,则返回1给主调函数,表示没有收到返回的i
21、cmp_port_unreach错误数据报,则说明该端口是打开的。(2)如果可读的套接字中有需要读取的套接字,则调用recvfrom()函数从套接口上接收数据,如果没有数据,则说明该套接口不是用来传送数据的,则可以判断为返回的icmp_port_unreach错误数据报,则说明该端口是关闭的./数据包解析/数据包解析int packetudpicmpanalyzer(int port, char *packetbuffer) ip_header pipheader; int iprotocol, ittl; char protocolstr100 = ”0”; char szsourceip1
22、6, szdestip16; sockaddr_in sasource, sadest; pipheader = (ip_header)packetbuffer; handle hcon = getstdhandle(std_output_handle);/窗口缓冲区信息 console_screen_buffer_info binfo;/获取窗口缓冲区信息 getconsolescreenbufferinfo(hcon, binfo); iprotocol = pipheader-protocol;/check source ip sasource。sin_addr。s_addr = pip
23、header-sourceaddr; :strcpy(szsourceip, inet_ntoa(sasource.sin_addr);/check dest ip sadest。sin_addr.s_addr = pipheaderdestinationaddr; ::strcpy(szdestip, inet_ntoa(sadest.sin_addr);/ttl ittl = pipheader-ttl;/计算ip长度 int iiphlen = sizeof(unsigned long)(pipheaderversion_hlen &0x0f);/判断是否是正确的返回数据包 if (pi
24、pheader-sourceaddr = inet_addr(destipaddr)) /判断是否是icmp协议数据 if (iprotocol = ipproto_icmp) /icmp头部 icmp_header *icmp;/读取icmp数据 icmp = (icmp_header)(packetbuffer + sizeof(ip_header));/判断是否是应答 if ((icmpi_type = 3) & (icmp-i_code = 3)) /确定端口是关闭的 fprintf(output,port d closen”, port);/返回1表示成功 return 1; els
25、e /端口开放状态未知 fprintf(output,”port d unknownn, port); return 1; else if (iprotocol = ipproto_udp) /如果返回的是udp报文,则端口是开放的 fprintf(output,”port d openn”, port);/能够正确判断 成功返回 return 1; else /既不是icmp数据包又不是udp数据 则表示不是想要的数据/返回错误 return 0; else /不是正确的返回数据包 return 0; /恢复原来的属性 setconsoletextattribute(hcon, binfo。
26、wattributes); return 1;6. udp扫描检测图3 扫描结果图由于udp协议是非面向连接的,对udp端口的探测也就不可能像tcp端口的探测那样依赖于连接建立过程(不能使用telnet这种tcp协议类型命令),这也使得udp端口扫描的可靠性不高。所以虽然udp协议较之tcp协议显得简单,但是对udp端口的扫描却是相当困难的。下面具体介绍一下udp扫描方案: 优点:可以完成对udp端口的探测。 缺点:需要系统管理员的权限.扫描结果的可靠性不高.因为当发出一个udp数据报而没有收到任何的应答时,有可能因为这个udp端口是开放的,也有可能是因为这个数据报在传输过程中丢失了。另外,扫描的速度很慢。原因是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版全国性猎头公司战略合作合同下载
- 2025版保姆与老人长期护理服务合同-温馨相伴每一天
- 2025年会议中心场地租赁合同模板
- 2025版外贸出口货物风险评估与控制合同
- 2025导游劳动合同范本:含导游行为规范与奖惩措施的导游服务合同
- 2025版新能源汽车售后服务专项委托代理合同
- 基于物联网的2025年城市轨道交通智慧运维系统创新实践报告
- 咖啡连锁品牌在2025年市场布局中的社区商业饮品品牌市场潜力分析报告
- 生物信息学育种应用-洞察及研究
- 2025版通勤车辆安全驾驶培训服务合同
- 代理记账风险管理制度
- DBJ04-T487-2025 高大模板支撑体系监测技术标准
- T/CGAS 026.1-2023瓶装液化石油气管理规范第1部分:安全管理
- PEP人教版六年级上册英语课后辅导计划
- 餐饮劳务合同协议书样本
- 中医护理灸疗技术操作规范:督灸
- 泌尿外科手术分级管理制度
- 阿尔茨海默病药物治疗指南(2025)解读
- 《贵阳市公共交通场站设计导则》
- 新时代中小学教师职业行为十项准则
- 职业指导师考试题库及答案(含各题型)
评论
0/150
提交评论