ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:551.14KB ,
资源ID:8160136      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8160136.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络嗅探器.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

网络嗅探器.docx

1、网络嗅探器四 川 大 学 计 算 机 学 院、软 件 学 院实 验 报 告 课程名称 信息安全产品开发实践 实验课时5实验项目网络嗅探器 实验时间2011年11月11号实验目的 1)继续了解Linux下C语言程序开发的过程2)了解嗅探器3)了解Libpcap简介、安装与程序编译4)掌握Libpcap进行网络嗅探的工作流程 5)了解Libpcap 的主要函数 6)完成一个简单的网络嗅探器的编写实验环境 VMware5.0,RedHat Linux 9.0实验内容(算法、程序、步骤和方法) 试验题目使用Libpcap库捕获局域网中的IP包,要求: 1.打印数据包的源与目的物理地址; 2.打印源与目

2、的地址; 3.打印出上层协议类型; 4.如果上层协议为TCP或UDP协议,打印目的与源端口信息; 5.如果上层协议为TCP或UDP协议,将数据以16进制与ASCII的两种方式同时打印出来,不可打印字符以.代替; 00000 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1. 实验:一:嗅探器概述定义与作用定义:网络嗅探也叫网络侦听,指的是使用特定的网络协议来分解捕获到的数据包,并根据对应的网络协议识别对应数据片断。 作用:1.管理员可以用来监听网络的流量情况2.开发网络应用的程序员可以监视程序的网络情况3.黑客可以用来

3、刺探网络情报数据包的处理流程实现机制二:使用Libpcap编写程序流程三:打印数据流程图四:具体实现1.打开虚拟机,利用gedit编辑器编写服务器端mysniffer.c程序2.保存mysniffer.c,使用命令gcc o mysniffer mysniffer.c l pcap命令编译程序。3.执行./mysniffer命令,程序运行,输出结果从输出的结果来看,程序打印出了设备的名字,网络的网关地址,子网掩码等信息,在捕获一个数据报后,计算出了它的长度并且打印出了捕获它的时间,然后打印出了它的源物理地,目的物理地址,源IP地址,目的IP地址;经过程序分析之后,这个数据报的上层协议是UDP协

4、议,然后打印出它的源端口号和目的端口号,并且将它的数据按照16进制以及ASCII码两种形式打印出来。其他捕获的数据报的输出格式类似。附试验源代码(附部分注释):#include #include #include #include #include #include #include #include #include #include #include #include /处理劫获的数据包的函数void my_callback(u_char *useless, const struct pcap_pkthdr* pkthdr,const u_char* packet); /主函数int ma

5、in(int argc, char *argv) char *dev; /设备名 char errbufPCAP_ERRBUF_SIZE;/错误缓冲区 bpf_u_int32 mask; / BPF(伯克利包过滤器)格式的网络掩码 bpf_u_int32 net; /BPF格式的网络地址 struct in_addr addr; /用来表示一个32位的IPv4地址 char *net_c; /字符串形式网络地址,用于打印输出 char *mask_c; /字符串形式的网络掩码地址 struct pcap_pkthdr header; /libpcap包头结构,包含捕获时间,捕获长度与数据包实际

6、长度 const u_char *packet;/捕获到的实际数据包内容 pcap_t *handle;/libpcap设备描述符号 struct tm *now_tm; /时间结构体 time_t now; struct bpf_program fp;/过滤器 char filter_exp = ip;/设置过滤规则为ip /*获取活动的网络设备名,通常为eth0*/ dev = pcap_lookupdev(errbuf); if (dev = NULL) fprintf(stderr, Couldnt find default device: %sn, errbuf); return(2

7、); printf(Device: %sn, dev); /*获取设备的网络地址与网络掩码地址,并将其打印出来*/ if (pcap_lookupnet(dev, &net, &mask, errbuf) = -1) fprintf(stderr, Cant get netmask for device %sn, dev); net_c = 0; mask_c = 0; return(2); addr.s_addr = net; net_c = inet_ntoa(addr); printf(Net: %sn, net_c); addr.s_addr = mask; mask_c = inet

8、_ntoa(addr); printf(Mask: %sn,mask_c); printf(=n); /*获取Libpcap bpf过滤设备*/ /*设备最大捕获包的字节数为1518(针对以太网)*/ /*将NIC设为混在模式,可以侦听局域网的所有内容*/ handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf); if (handle = NULL) fprintf(stderr, Couldnt open device %s: %sn, dev, errbuf); return(2); /*将过滤规则添加到过滤器上*/ if (pcap_comp

9、ile(handle, &fp, filter_exp, 0, net) = -1) fprintf(stderr, Couldnt parse filter %s: %sn, filter_exp, pcap_geterr(handle); return(2); /*在BPF过滤器上启动数据过滤*/ if (pcap_setfilter(handle, &fp) = -1) fprintf(stderr, Couldnt install filter %s: %sn, filter_exp, pcap_geterr(handle); return(2); /*捕获一个数据包*/ packet

10、 = pcap_next(handle, &header); printf(Jacked one packet at %sn, filter_exp); /* * Each packet in the dump file is prepended with this generic header. * This gets around the problem of different headers for different * packet interfaces. * struct pcap_pkthdr * struct timeval ts; * time stamp * * bpf_

11、u_int32 caplen; * length of portion present * * bpf_u_int32 len; * length this packet (off wire) * * ; */ /*打印数据包的长度*/ printf(Length of this packet is %d bytesn, header.len); now = header.ts.tv_sec; now_tm = localtime(&now); printf(Time Stamp of this packet is %d/%2d/%2d %2d:%2d:%2dn, now_tm-tm_year

12、+1900, now_tm-tm_mon+1, now_tm-tm_mday, now_tm-tm_hour, now_tm-tm_min, now_tm-tm_sec); /*打印数据包的捕获时间*/ printf(Recieved at . %sn,ctime(const time_t*)&header.ts.tv_sec); /调用my_callback函数 if (pcap_loop(handle ,-1 , my_callback,NULL) = -1) fprintf(stderr, errorn); return(2); /*关闭bpf过滤器*/ pcap_close(handl

13、e); return(0);void my_callback(u_char *useless, const struct pcap_pkthdr* pkthdr,const u_char* packet) int count = 0; /计数 int otherPart_len; /数据报的其他信息的长度 int IPlength; /IP数据报的长度 int n; /临时变量 struct ether_header *frame; /以太网地址结构 struct iphdr *IPpacket; /ip头部 struct tcphdr *TCPpacket; /tcp头部 struct ud

14、phdr *UDPpacket; /udp头部 struct in_addr srcIP, destIP; /用来表示一个32位的IPv4地址 /转换成帧数据报 frame = (struct ether_header *)packet; /转换为IP数据报 IPpacket = (struct iphdr *)(packet + sizeof(struct ether_header); /转换为TCP数据报 TCPpacket = (struct tcphdr *)(packet + sizeof(struct ether_header) + sizeof(struct iphdr); /转

15、换为UDP数据报 UDPpacket = (struct udphdr *)(packet + sizeof(struct ether_header) + sizeof(struct iphdr); /打印源物理地址和目的物理地址,每个物理地址占6个字节 printf(the DestMac is : %02X:%02X:%02X:%02X:%02X:%02X the SrcMac is : %02X:%02X:%02X:%02X:%02X:%02Xn, frame-ether_dhost0,frame-ether_dhost1,frame-ether_dhost2,frame-ether_d

16、host3, frame-ether_dhost4,frame-ether_dhost5,frame-ether_shost0,frame-ether_shost1, frame-ether_shost2,frame-ether_shost3,frame-ether_shost4,frame-ether_shost5); /打印源IP地址和目的IP地址 memcpy(&srcIP, &IPpacket-saddr, sizeof(IPpacket-saddr); memcpy(&destIP, &IPpacket-daddr, sizeof(IPpacket-daddr); IPlength

17、= ntohs(IPpacket-tot_len); printf(the srcIP is : %s the destIP is : %sn,inet_ntoa(srcIP),inet_ntoa(destIP); /打印协议类型(TCP) if(IPpacket-protocol = IPPROTO_TCP) printf(the protocol of the packet is TCP:n); printf(srcport: %d destport: %dn, ntohs(TCPpacket-source), ntohs(TCPpacket-dest); otherPart_len =

18、IPlength - sizeof(struct iphdr) - sizeof(struct tcphdr); const u_char *data = packet + sizeof(struct ether_header) + sizeof(struct iphdr) + sizeof(struct tcphdr); /打印数据信息(以16进制和ASCII码两种形式) while(otherPart_len 0) if(otherPart_len 16) printf(%5d ,count); for(n=0; n otherPart_len; n+) printf(%02X , dat

19、acount+n); if(n+1) % 8 = 0) printf( ); printf( ); for(n=0; n otherPart_len; n+) if(isprint(datacount+n) printf(%c, datacount+n); else printf(.,datacount+n); printf(n); otherPart_len = 0; else printf(%5d ,count); for(n = 0; n 16; n+) printf(%02X ,datacount+n); if(n+1) % 8 = 0) printf( ); printf( ); f

20、or(n = 0; n protocol = IPPROTO_UDP) printf(the protocol of the packet is UDP:n); printf(srcport: %d destport: %dn,ntohs(UDPpacket-source), ntohs(UDPpacket-dest); otherPart_len = IPlength - sizeof(struct iphdr) - sizeof(struct udphdr); const u_char *data = packet + sizeof(struct ether_header) + sizeo

21、f(struct iphdr) + sizeof(struct udphdr); /打印数据信息(以16进制和ASCII码两种形式) while(otherPart_len 0) if(otherPart_len 16) printf(%5d ,count); for(n = 0; n otherPart_len; n+) printf(%02X ,datacount+n); if(n+1) % 8 = 0) printf( ); printf( ); for(n = 0; n otherPart_len; n+) if(isprint(datacount+n) printf(%c,datac

22、ount+n); else printf(., datacount+n); printf(n); otherPart_len = 0; else printf(%5d ,count); for(n = 0; n 16; n+) printf(%02X ,datacount+n); if(n+1) % 8 = 0) printf( ); printf( ); for(n = 0; n 16; n+) if(isprint(datacount+n) printf(%c,datacount+n); else printf(.,datacount+n); printf(n); otherPart_le

23、n = otherPart_len - 16; count = count + 16; else printf(the protocol of the packet is others :n); (接上)实验内容(算法、程序、步骤和方法)数据记录和计算 详细见上面结 论(结 果) 利用Libpcap函数库能很好的实现一个网络嗅探器,从而能对网络中的数据报进行捕获,然后进行分析,方便我们掌握网络中的流量等一些信息,更好的控制网络行为。小 结 通过本实验,我掌握了:1)进一步熟悉了Linux下C语言程序开发的过程;2)继续了解Linux下C语言程序开发的过程3)了解了什么是嗅探器4)掌握了Libp

24、cap安装与程序编译5)了解了Libpcap进行网络嗅探的工作流程 6)了解Libpcap 的一些主要函数 目前我存在的问题有:对一些Libpcap函数掌握的不是很熟练。指导老师评 议 成绩评定: 指导教师签名:实验报告说明 专业实验中心 实验名称 要用最简练的语言反映实验的内容。如验证某程序、定律、算法,可写成“验证”;分析。实验目的 目的要明确,要抓住重点,可以从理论和实践两个方面考虑。在理论上,验证定理、公式、算法,并使实验者获得深刻和系统的理解,在实践上,掌握使用实验设备的技能技巧和程序的调试方法。一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。实验环境 实验用的软硬件环境(配置)。实验内容(算法、程序、步骤和方法) 这是实验报告极其重要的内容。这部分要写明依据何种原理、定律算法、或操作方法进行实验,要写明经过哪几个步骤。还应该画出流程图(实验装置的结构示意图),再配以相应的文字说明,这样既可以节省许多文字说明,又能使实验报告简明扼要,清楚明白。数据记录和计算 指从实验中测出的数据以及计算结果。结论(结果) 即根据实验过程中所见到的现象和测得的数据,作出结论。小结 对本次实验的体会、思考和建议。备注或说明 可写上实验成功或失败的原因,实验后的心得体会、建议等。 注意:实验报告将记入实验成绩; 每次实验开始时,交上一次的实验报告,否则将扣除此次实验成绩。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1