计算机网络课程设计报告 解析ARP数据包含C 源码
- 格式:pdf
- 大小:178.43 KB
- 文档页数:11
c语⾔Winpcap编程构造并接收解析arp包/*程序功能:1、构造arp包,并发送。
程序参数顺序:源IP、⽬的IP、mac地址、flag2、获取⽹络中的ARP数据包,解析数据包的内容。
程序参数:⽇志⽂件名*/⼀、构造arp包在构造之前先了解⼀下arp包的结构,先从⽹上找了张图从图中可以看出以太⽹⾸部占14字节,以太⽹ARP字段占28字节。
其中op字段为操作类型,1表⽰ARP请求、2表⽰ARP应答再介绍⼏个要⽤到的pcap函数1. int pcap_findalldevs ( pcap_if_t ** alldevsp, char * errbuf)函数功能:列出当前所有可⽤的⽹络设备(⽹卡),将设备信息存⼊pcap_if_t结构列表中参数:1、alldevsp 指向pcap_if_t结构列表的指针的地址(注意这⾥是pcap_if_t指针的地址,⽽不是pcap_if_t结构的地址) 有些地⽅这⾥可能会写pcap_if结构,其实pcap_if和pcap_if_t就是同⼀个东西,我们来看看在pcap.h中是怎么定义的 pcap_if结构体成员:Struct pcap_if {struct pcap_if *next; //指向下⼀个链表成员char *name; //⽹卡名称chat *description; //⽹卡描述信息struct pcap_addr address;u_int flags; //接⼝标志} 2、errbuf 错误缓冲区,要求长度⾄少为PCAP_ERRBUF_SIZE 字节,那么PCAP_ERRBUF_SIZE是多⼤呢 这在pcap.h中宏定义的,如下图 这个错误缓冲区⽤来做什么呢?在函数错误返回时(返回值为-1)会向错误缓冲中填充错误信息,错误信息为可打印ASCII码 函数正确时返回0 2、pcap_t * pcap_open_live ( char * device, int snaplen, int promisc,int to_ms, char * errbuf )函数功能:在⽹络中打开⼀个活动的捕获<这是winpcap技术⽂档给出的说明,也就是指定从⼀个⽹络设备捕获数据包,我是这么理解的> 函数的返回值为⼀个结构体指针pcap_t即为struct pcap。
课程设计(报告)课程名称:计算机网络课程设计学生姓名:学号:150106学部(系):信息科学与技术学部专业年级:计算机科学与技术1503指导教师:鲁丽惠雅位磊2017年9月21日目录第一部分:数据包的分析 (6)一、捕获ARP请求,ARP应答数据包,分析其组成特征。
总结ARP协议运行的基本过程 (6)二、捕获ICMP数据包,对其进行分析研究。
(icmp请求数据包,icmp应答数据包) . 7三、捕获TCP“三次握手”建立连接的数据包并分析;捕获TCP“2次两次握手”释放连接的数据包并分析 (9)a) tcp连接的建立 (9)b) tcp连接的释放 (11)四、捕获HTTP,DNS,DHCP数据包,分析其构成 (12)a)http数据包的捕获与分析 (13)b)DNS数据包的捕获与分析 (14)c)DHCP数据包的捕获与分析 (15)五、通过捕捉smtp协议包捕捉密码 (16)第二部分:完成下列程序 (17)一、编写一个程序,能够根据输入的原始数据,及所选择的多项式,自动生成CRC校验码 (17)第三部分 (19)一、以文华学院为背景,了解文华学院现有校园网络的构成。
主要从网速提高,网络安全,无线网络构建等几个方面进行分析,并提出合理的改进意见 (19)第四部分:参考文献 (40)评语第一部分:数据包的分析一、捕获ARP请求,ARP应答数据包,分析其组成特征。
总结ARP协议运行的基本过程Frame Number(帧的编号):31Frame Length(帧的大小):60字节。
Arrival Time(帧被捕获的日期和时间):sep 7, 2017 15:21:03.795047000Time delta from previous captured frame(帧距离前一个帧的捕获时间差):0.068504000 secondsTime since reference or first frame:2.945039000 secondsDestination(目的地址):(ff:ff:ff:ff:ff:ff)ARP协议运行过程:ARP进程在本局域网上发送ARP请求,目的主机在ARP请求分组里看到自己的IP,就发送一个响应分组,写入自己的硬件地址。
计算机⽹络课设报告解析ARP数据包含C++源码课程设计任务书⽬录1.课程设计⽬的 (2)2.课程设计要求 (2)3.相关知识 (2)1)ARP数据报的消息格式 (3)2)ARP协议的⼯作流程 (4)4.课程设计分析 (5)1)课程设计中的重点及难点 (5)2)参考算法 (6)3)核⼼代码 (7)5.相关扩展 (8)6.⼼得体会 (10)7.参考⽂献 (11)⼀、课程设计⽬的:本课程设计的⽬的是对⽹络上的ARP数据包进⾏解析,从⽽熟悉ARP数据包的结构,对ARP协议有更好的理解和认识。
⼆、课程设计要求:通过编制程序,获取⽹络中的ARP数据包,解析数据包的内容,将结果显⽰在标准输出上,并同时写⼊⽇志⽂件。
程序的具体要求如下所⽰:1,以命令⾏的形式运⾏,如下所⽰:arpparse logfile其中,arpparse为程序名;logfile为⽇志⽂件名。
2,程序输出内容如下所⽰:源IP地址源MAC地址⽬的IP地址操作时间各部分的说明如下所⽰:源IP地址:输出ARP消息格式中的源IP地址字段源MAC地址:输出ARP消息格式中的源物理地址字段⽬的IP地址:输出ARP消息格式中的⽬的IP地址字段。
⽬的MAC地址:输出ARP消息格式中的⽬的物理地址字段操作:输出ARP消息格式中的操作字段,若为ARP请求,则为1,若为ARP应答,则为2,时间:该ARP包产⽣的时间3,当程序接收到键盘输⼊Ctrl+C时字段三、相关知识a)ARP数据报的消息格式⽹络上的每台主机或设备都有⼀个或多个IP地址。
IP地址是⽹络层的地址,在⽹络层,数据被组装成IP包。
但是发送IP包需要物理设备的⽀持(通常是Ethernet设备,在本课程设计中我们指定为Ethernet设备),即发送端必须知道⽬的物理地址才能将IP包发送出去,所以需要⼀种将IP地址映射为物理地址的机制。
ARP协议就是⽤来完成这个任务的。
ARP协议能够在同⼀个物理⽹络中,在给定⽬的主机或设备的IP地址的条件下,得到⽬的主机或设备的物理地址。
信息安全原理——ARP攻击班级:07计算机1班姓名:胡益铭学号:E07620112ARP原理:ARP,即地址解析协议,实现通过IP地址得知其物理地址。
在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。
为了让报文在物理网路上传送,必须知道对方目的主机的物理地址。
这样就存在把IP 地址变换成物理地址的地址转换问题。
以以太网环境为例,为了正确地向目的主机传送报文,必须把目的主机的32位IP地址转换成为48位以太网的地址。
这就需要在互连层有一组服务将IP地址转换为相应物理地址,这组协议就是ARP协议。
ARP数据报格式如下:什么是ARP欺骗:其实,此起彼伏的瞬间掉线或大面积的断网大都是ARP欺骗在作怪。
ARP欺骗攻击已经成了破坏网吧经营的罪魁祸首,是网吧老板和网管员的心腹大患。
从影响网络连接通畅的方式来看,ARP欺骗分为二种,一种是对路由器ARP表的欺骗;另一种是对内网PC的网关欺骗。
第一种ARP欺骗的原理是——截获网关数据。
它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常PC无法收到信息。
第二种ARP欺骗的原理是——伪造网关。
它的原理是建立假网关,让被它欺骗的PC向假网关发数据,而不是通过正常的路由器途径上网。
在PC看来,就是上不了网了,“网络掉线了”。
本程序基于C语言,利用winpacp实现往局域网内发自定义的包,以达到ARP欺骗的目的。
首先从/archive/下载4.0beta1-WpdPack和4.0beta1-WinPcap.exe,版本很多,不过最新版本需要64位的系统,本人32位系统用不了。
直接点击4.0beta1-WinPcap.exe安装,然后在C:\Program Files\WinPcap下打开rpcapd.exe 服务。
arp数据包课程设计一、课程目标知识目标:1. 学生能理解ARP协议的基本原理和ARP数据包的结构;2. 学生能掌握ARP数据包在网络通信中的作用和重要性;3. 学生能了解ARP欺骗和防护措施。
技能目标:1. 学生能够使用抓包工具捕获和分析ARP数据包;2. 学生能够配置网络设备以防止ARP欺骗;3. 学生能够运用所学知识解决简单的网络通信故障。
情感态度价值观目标:1. 培养学生对计算机网络通信的兴趣和好奇心;2. 增强学生的网络安全意识,使其养成良好的网络行为习惯;3. 培养学生合作学习、积极探索的精神。
课程性质:本课程为计算机网络通信领域的实践性课程,旨在帮助学生掌握ARP数据包的相关知识,提高实际操作能力。
学生特点:本课程针对的是高年级学生,他们已经具备一定的计算机网络知识基础,对实际操作和案例分析有较高的兴趣。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和实际操作,使学生更好地理解和掌握ARP数据包的相关知识。
在教学过程中,注重培养学生的实际操作能力和网络安全意识。
课程目标分解为具体的学习成果,以便后续的教学设计和评估。
二、教学内容1. 引言:回顾计算机网络基础知识,引出ARP协议的作用和重要性。
教材章节:第一章 计算机网络基础2. ARP协议原理:- ARP数据包的结构与工作流程;- ARP缓存的更新机制。
教材章节:第二章 网络层协议3. ARP数据包分析:- 使用抓包工具捕获ARP数据包;- 分析ARP请求和应答数据包。
教材章节:第三章 网络协议分析4. ARP欺骗与防护:- ARP欺骗原理及常见攻击方式;- 防护措施及配置方法。
教材章节:第四章 网络安全5. 实际操作与案例分析:- 配置网络设备防止ARP欺骗;- 分析实际网络通信故障案例。
教材章节:第五章 网络设备配置与案例分析6. 总结与拓展:- 总结ARP数据包相关知识;- 探讨ARP协议在物联网等新兴领域的应用。
解析A R P数据包软件设计与实现IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】JISHOU UNIVERSITY专业课课程论文题目:解析ARP数据包作者:学号:所属学院:信息科学与工程学院专业年级:总评分:完成时间:吉首大学信息科学与工程学院解析ARP数据包软件的设计和实现(吉首大学信息科学与工程学院,湖南吉首 416000)摘要本文首先介绍了地址解析协议ARP的概念,详细说明了ARP的工作原理,ARP攻击的基本原理,详细分解了ARP数据包的各个字段含义,ARP协议工作的流程和这次课程设计的意义与目的;接着描述了此实验的总体设计;然后是详细设计,分析讲解了实现代码的主要部分;最后还讲了做这次课程设计的个人总结,谈了一些个人观点。
关键字:ARP数据包、工作原理、ARP攻击、解析、截获、功能目录第一章引言1.1ARP背景首先,我们来了解一下什么是ARP,ARP的工作原理以及ARP攻击所带来的危害。
什么是ARP地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP 地址时确定其物理地址的一种协议。
因IPv4和以太网的广泛应用,其主要用作将IP地址翻译为以太网的MAC地址,但其也能在ATM和FDDIIP网络中使用。
从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。
ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。
而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。
这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。
于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。
数据包的结构,对课程设计的内容和要求通过编制程序显示在标准输出上计算机网络课程设计——机械工业出版社第6章:解析ARP数据包课程设计目的:本课程设计的主要目的是对网络上的ARP数据包进行解析,从而熟悉ARPARP协议有更好的理解和认识。
获取网络中的ARP数据包解析数据包的内容将结果并同时写入日志文件。
程序的具体要求如下所示1、以命令行的形式运行arp arp.log其中arp为程序名arp.log为日志文件名。
2、程序输出内容如下所示源IP地址源MAC地址目的IP地址操作时间各部分的说明如下所示源IP地址输出ARP消息格式中的源IP地址字段源MAC地址输出ARP消息格式中的源物理地址字段目的IP地址输出ARP消息格式中的目的IP地址字段。
目的MAC地址输出ARP消息格式中的目的物理地址字段操作输出ARP消息格式中的操作字段若为ARP请求则为1若为ARP应答则为2时间该ARP包产生的时间3、当程序接收到键盘输入Ctrl+C时字段完整程序代码:#in cludevc oni o.h>#in clude<fstream.h> #i ncludevioma nip.h>#in clude "pcap.h"#i ncludevwi nsock2.h> #pragma comme nt(lib,"ws2_32 .l ib")#pragma comme nt(lib,"wpcap.lib") struct arppkt{un sig ned short hdtyp; un sig ned short protyp; unsigned char hdsize;unsigned char prosize;unsigned short op;u_char smac[6];u_char sip[4];u_char dmac[6];u_char dip[4];};void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream &out) {arppkt* arph=(arppkt*)(pkt_data+14);for(int i=0;i<3;i++)out<<int(arph->sip[i])<<'.';out.setf(ios::left);out<<setw(3)<<int(arph->sip[3])<<" ";out.unsetf(ios::left);char oldfillchar=out.fill('0');out.setf(ios::uppercase);for(i=0;i<5;i++)out<<hex<<setw(2)<<int(arph->smac[i])<<'-';out<<hex<<setw(2)<<int(arph->smac[5])<<" "; out.fill(oldfillchar);out.unsetf(ios::hex|ios::uppercase);for(i=0;i<3;i++)out<<int(arph->dip[i])<<'.';out.setf(ios::left);out<<setw(3)<<int(arph->dip[3])<<" ";out.unsetf(ios::left);out.fill('0');out.setf(ios::uppercase);for(i=0;i<5;i++)out<<hex<<setw(2)<<int(arph->dmac[i])<<'-';out<<hex<<setw(2)<<int(arph->dmac[5])<<" "; out.fill(oldfillchar);out.unsetf(ios::hex|ios::uppercase);out<<ntohs(arph->op)<<" "; struct tm *ltime; ltime=localtime(&header->_sec); out.fill('0');out<<ltime->tm_hour<<':'<<setw(2)<<ltime- >tm_min<<':'<<setw(2)<<ltime->tm_sec;out.fill(oldfillchar); out<<endl;}void main(int argc,char *argv[]){if(argc!=2) { cout<<"please input command: parsearp output_file"<<endl;return;}pcap_if_t *alldevs;pcap_if_t *d; pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; u_intnetmask;char packet_filter[]="ether proto \\arp"; struct bpf_program fcode; struct pcap_pkthdr *header; u_char *pkt_data;// 获取网络设备列表if (pcap_findalldevs(&alldevs,errbuf)==-1){cout<<"error in pcap_find all devs:"<<errbuf;return;}// 选择一个ethernet 网卡for(d=alldevs;d;d=d->next){ if((adhandle=pcap_open_live(d->name,1000,1,300,errbuf))==NULL) { cout<<"Unable to open ther adapter."; pcap_freealldevs(alldevs); return;} if(pcap_datalink(adhandle)==DLT_EN10MB&&d->addresses!=NULL) break;} if(d==NULL){cout<<"No interface found!Make sure WinPcap is installed."; return;}netmask=((sockaddr_in*)(d->addresses->netmask))->sin_addr.S_un.S_addr;if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0){cout<<"Unable to compile the packet filter.Check the syntax.";pcap_freealldevs(alldevs);return;} if(pcap_setfilter(adhandle,&fcode)<0){cout<<"Error setting the filter."; pcap_freealldevs(alldevs); return;} cout<<"Listening on"<<d->description<<"..."<<endl;ofstream fout(argv[1],ios::app); time_t t;time(&t); fout.seekp(0,ios::end);if(fout.tellp()!=0)fout<<endl; fout<<"\t\tAPP requst(1)/reply(2) on "<<ctime(&t); cout<<"Sour IP Addr"<<" "<<"Sour MAC Address"<<" "<<"Des IP Addr"<<" "<<"Des MAC Address"<<" "<<"OP"<<" "<<"Time"<<endl;fout«"Sour IP Addr"v<" "<v"Sour MAC Address"<<" "<<"Des IP Addr"vv" "vv"Des MAC Address"<<" "<<"OP"<<" "<<"Time"<<e ndl;pcap_freealldevs(alldevs);int result;while((result=pcap_ next_ex(adha ndle,&header,&pkt_data))>=0){if(result==0)con ti nue;packet_ha ndler(header,pkt_data,cout);packet_ha ndler(header,pkt_data,fout);}}XT 2 8主 H 8 陽统找丁到指迄的竝径OF T jLn 右 D : X6 xDebug >6 . e xe 6 . txt韵礙理鐸严或外部也不^运磺程序 '■tLsten :iog onlute 丄扈 oxI*』起》? Sour MAC林 魯严-.Pgs IF点皿也卩Du 吞 MAC5^.76-结果截图。
计算机网络课程设计——机械工业出版社第5章:发送ARP数据包课程设计目的:ARP协议用于完成IP地址与MAC 地址之间的转换。
熟悉ARP协议对于IP数据包的传送过程具有重要意义。
本课程设计的主要目的是通过封装与发送ARP帧,了解ARP协议的工作原理与ARP帧的结构。
完整程序代码:#include<iostream.h>#include<pcap.h>#pragma comment(lib,"wpcap.lib")#pragma comment(lib,"ws2_32.lib")typedef struct PhyFrame{unsigned char DstMAC[6];unsigned char SrcMAC[6];unsigned short FrameType;}PHYFRAME;typedef struct ArpFrame{unsigned short HardwareType;unsigned short ProtocolType;unsigned char MACLen;unsigned char IPLen;unsigned short Flag;unsigned char SrcMAC[6];unsigned char SrcIP[4];unsigned char DstMAC[6];unsigned char DstIP[4];unsigned char Padding[18];}ARPFRAME;typedef struct ArpPacket{PHYFRAME phyFrame;ARPFRAME arpFrame;}*ARPPACKET;ArpPacket arpPacket;int CheckMAC(char *argv,unsigned char *mac_addr){char mac[18];int i=0,j=0,k=0;strcpy(mac,argv);int m=strlen(argv);for(i=0;i<m;i++){if(mac[i]<'-'||(mac[i]>'-'&&mac[i]<'0')||(mac[i]>'9'&&mac[i]<'A')||(mac[i]>'Z'&&mac[i]<'a')||mac[i]>'z') {cout<<"mac address error"<<endl;return 0;}else{if(mac[i]!='-')j++;else{k++;if(j>2){cout<<"mac address errot"<<endl;return 0;}elsej=0;if(k>5){cout<<"mac address error"<<endl;return 0;}}}}for(i=0;i<6;i++){while(*(mac+j)=='-')j++;if(*(mac+j)>='0'&&*(mac+j)<='9')mac_addr[i]=(unsigned char)(*(mac+j)-'0');if(*(mac+j)>='a'&&*(mac+j)<='z')mac_addr[i]=(unsigned char)(*(mac+j)-'a'+10); if(*(mac+j)>='A'&&*(mac+j)<='Z')mac_addr[i]=(unsigned char)(*(mac+j)-'A'+10);j++;mac_addr[i]*=16;if(*(mac+j)>='0'&&*(mac+j)<='9')mac_addr[i]+=(unsigned char)(*(mac+j)-'0');if(*(mac+j)>='a'&&*(mac+j)<='z')mac_addr[i]+=(unsigned char)(*(mac+j)-'a'+10); if(*(mac+j)>='A'&&*(mac+j)<='Z')mac_addr[i]+=(unsigned char)(*(mac+j)-'A'+10);j++;}return 1;}int CheckIP(char *argv,unsigned char *ip_addr){char ip[16];int i=0,j=0,k=0;strcpy(ip,argv);int m=strlen(argv);for(i=0;i<m;i++){if(ip[i]<'.'||(ip[i]>'.'&&ip[i]<'0')||ip[i]>'9'){cout<<"IP address error!"<<endl;return 0;}else{if(ip[i]!='.')j++;else{k++;if(j>3){cout<<"IP address error!"<<endl;return 0;}elsej=0;if(k>3){cout<<"IP address error!"<<endl;return 0;}}}}for(i=0;i<4;i++){while(*(ip+j)=='.')j++;ip_addr[i]=(unsigned char)atoi(ip+j);}return 1;}void main(int argc,char *argv[]){if(argc!=5){cout<<"please input command: SendArp source_ip source_mac dest_ip dest_mac"<<endl;return;}int i=0;memset(&arpPacket,0,sizeof(arpPacket));if(!CheckMAC(argv[4],arpPacket.phyFrame.DstMAC))return;if(!CheckMAC(argv[2],arpPacket.phyFrame.SrcMAC))return;arpPacket.phyFrame.FrameType=htons((unsigned short)0x0608);arpPacket.arpFrame.HardwareType=(unsigned short)0x0100;arpPacket.arpFrame.ProtocolType=(unsigned short)0x0008;arpPacket.arpFrame.MACLen=(unsigned char)6;arpPacket.arpFrame.IPLen=(unsigned char)4;if(!CheckMAC(argv[2],arpPacket.arpFrame.SrcMAC))return;if(!CheckIP(argv[1],arpPacket.arpFrame.SrcIP))return;if(!CheckMAC(argv[4],arpPacket.arpFrame.DstMAC))return;if(!CheckIP(argv[3],arpPacket.arpFrame.DstIP))return;for(i=0;i<18;i++)arpPacket.arpFrame.Padding[i]=0;pcap_if_t *alldevs;pcap_if_t *d,*head=NULL;pcap_t *fp;char errbuf[PCAP_ERRBUF_SIZE];if(pcap_findalldevs(&alldevs,errbuf)==-1){cout<<"Unable to create adapter list!"<<endl;return;}i=0;for(d=alldevs;d;d=d->next){cout<<++i<<": "<<d->name;if(d->description)cout<<" "<<d->description<<endl;}if(i==0){cout<<"No adapter found!"<<endl;return;}cout<<"Enter the interface number (1-"<<i<<")";int k;cin>>k;if(k<1||k>i){cout<<"Out of range!"<<endl;return;}for(d=alldevs,i=1;i<k;d=d->next,i++);head=d;if((fp=pcap_open_live(head->name,1000,1,1000,errbuf))==NULL) {cout<<"Unable to open the adapter!"<<endl;pcap_freealldevs(alldevs);return;}if(pcap_sendpacket(fp,(unsigned char*)&arpPacket,sizeof((unsigned char*)&arpPacket))==-1){cout<<"ARP packet send error!"<<endl;return;}cout<<"Source MAC: "<<argv[1]<<endl;cout<<"Source IP: "<<argv[2]<<endl;cout<<"Dest MAC: "<<argv[3]<<endl;cout<<"Dest MAC: "<<argv[4]<<endl;cout<<"ARP packet send success!"<<endl; }结果截图。
解析ARP数据包(二)——说明书(2007-04-16 19:59:51)转载▼标签:计算机网络课程设计分类:IT技术一.课程设计要求通过编制程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下所示:1)以命令行的形式运行,如下所示:arpparse logfile其中,arpparse为程序名;logfile为日志文件名。
2)程序输出内容如下所示:源IP地址源MAC地址目的IP地址目的MAC地址操作时间各部分的说明如下所示:?源IP地址:输出ARP消息格式中的源IP地址字段。
?源MAC地址:输出ARP消息格式中的源物理地址字段?目的IP地址:输出ARP消息格式中的目的IP地址字段。
?目的MAC地址:输出ARP消息格式中的目的物理地址字段。
?操作:输出ARP消息格式中的操作字段,若为ARP请求,则为1,若为ARP应答,则为2。
?时间:该ARP包产生的时间。
3)当程序接收到键盘输入Ctrl十C时退出。
三.ARP协议工作原理我们都知道以太网设备比如网卡都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数据包的,但是它们却识别不了我们IP包中的IP地址,所以我们在以太网中进行IP通信的时候就需要一个协议来建立IP地址与MAC地址的对应关系,以使IP数据包能发到一个确定的地方去。
这就是ARP(Address Resolution Protocol,地址解析协议)。
四.ARP包的格式?/P>帧头部帧数据ARP消息14BARP数据包封装成一个帧物理帧头格式ARP数据包格式五.ARP协议工作流程1. 首先,每台主机都会在自己的ARP缓冲区(ARP Cache)中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。
2. 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP列表中是否存在该IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。
实验报告实验名称:计算机网络课程设计学生姓名: xxxxxxxxxxxxxxx专业: xxxxxxxxxxxxxxx班级: xxxxxxxxxxxxxxx学号: xxxxxxxxxxxxxxx指导教师: xxxxxxxxxxxxxxx实验成绩:实验地点:实验时间: 2016 年 5 月 6 日一、实验目的与实验要求1、实验目的将书本上抽象的概念与具体实现技术结合,通过网络软件编程的实践,深入理解理论课上学习到的ARP、IP、TCP等重要网络协议的原理,通过自己动手编程封装与发送这些数据包,加深对网络协议的理解,掌握协议帧的结构和工作原理及其对协议栈的贡献。
2、实验要求网络课程设计包含两个部分的内容:题目一是数据包的封装发送和解析(ARP/IP/TCP),要求使用Winpcap技术和Socket技术,根据ARP/IP/TCP帧的结构,封装数据包发送到局域网中。
另外要捕获网络中的TCP/IP/ARP数据包,解析数据包的内容,并将结果显示,并同时写入日志文件。
题目二是从可选题目中选择一个,可选题目均是网络应用小程序,要求小组使用网络编程技术设计并实现一个网络应用程序,加深对网络协议协的理解,并锻炼网络编程能力。
二、实验设备(环境)及要求1、实验硬件设备:计算机型号:联想ThinkPad T430u处理器型号:Intel i5 主频:1.8Hz网卡型号:(1)Realtek PCIe GBE (2)Broadcom 802.11n2、实验软件要求:操作系统:Windows10应用软件:Visual Studio 2015 Pro3、小组成员及分工:三、实验内容与步骤1、实验1:数据包的封装发送和解析(ARP/IP/TCP)(1)实验内容1)程序目标:根据IP帧的结构,封装IP数据包发送到局域网中。
并捕获网络中的IP数据包,解析数据包的内容,并将结果显示,并同时写入日志文件。
2)程序功能:以命令行形式运行在标准输出中显示捕获的IP报文的首部字段的内容。
ARP探测C语言实现ARP(Address Resolution Protocol,地址解析协议)是用于将IP 地址转换为物理地址(MAC地址)的协议。
在网络中,ARP请求和应答消息的交互可以帮助主机发现目标主机的物理地址。
下面是一个基于C语言的简单ARP探测实现。
ARP请求阶段:1.创建原始套接字,用于发送和接收网络数据包。
```cint sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);if (sockfd < 0)perror("Failed to create socket.");return -1;```2.设置套接字选项,允许发送与接收IP首部。
```cif (setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &enable, sizeof(enable)) < 0)perror("Failed to set socket options.");return -1;}```3.设置目标主机的IP地址。
```cstruct in_addr dest_ip;if (inet_aton(target_ip, &dest_ip) == 0)printf("Invalid IP address specified.");return -1;```4.构造ARP请求包。
```cstruct arphdr arp_header;memset(&arp_header, 0, sizeof(arp_header));arp_header.ar_hrd = htons(ARPHRD_ETHER); // 以太网地址类型arp_header.ar_pro = htons(ETH_P_IP); // IP地址类型arp_header.ar_hln = ETH_ALEN; // MAC地址长度arp_header.ar_pln = sizeof(in_addr_t); // IP地址长度arp_header.ar_op = htons(ARPOP_REQUEST); // ARP请求操作码struct ether_arp ether_arp_pkt;memset(ðer_arp_pkt, 0, sizeof(ether_arp_pkt));//设置以太网帧的源地址和目标地址memcpy(ether_arp_pkt.arp_sha, mac_addr, ETH_ALEN); memset(ether_arp_pkt.arp_tha, 0xff, ETH_ALEN);//设置以太网帧的协议类型ether_arp_pkt.ea_hdr.ar_hrd = arp_header.ar_hrd;ether_arp_pkt.ea_hdr.ar_pro = arp_header.ar_pro;ether_arp_pkt.ea_hdr.ar_hln = arp_header.ar_hln;ether_arp_pkt.ea_hdr.ar_pln = arp_header.ar_pln;ether_arp_pkt.ea_hdr.ar_op = arp_header.ar_op;//设置ARP请求的源IP地址和目标IP地址ether_arp_pkt.arp_spa = inet_addr(sender_ip);ether_arp_pkt.arp_tpa = dest_ip.s_addr;//构造完成的ARP请求数据包memcpy(buffer, ðer_arp_pkt, sizeof(ether_arp_pkt)); ```5.设置套接字的目标地址。
计算机网络课程设计——机械工业出版社第7章:解析IP数据包课程设计目的:本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP 数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
完整程序代码:#include<stdio.h>#include<winsock2.h>#include<ws2tcpip.h>#pragma comment(lib,"ws2_32.lib")typedef struct _IP_HEADER{union{BYTE Version;BYTE HdrLen;};BYTE ServiceType;WORD TotalLen;WORD ID;union{WORD Flags;WORD FragOff;};BYTE TimeToLive;BYTE Protocol;WORD HdrChksum;DWORD SrcAddr;DWORD DstAddr;BYTE Options;} IP_HEADER;#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)#define BUFFER_SIZE 65535void getVersion(BYTE b,BYTE &version){version=b>>4;}void getIHL(BYTE b,BYTE &length){length=(b&0x0f)*4;}char* parseServiceType_getProcedence(BYTE b) {switch(b>>5){case 7:return "Network Control";break;case 6:return "internet work Control";break;case 5:return "CRITIC/ECP";break;case 4:return "Flash Override";break;case 3:return "Flash";break;case 2:return "Immediate";break;case 1:return "Priority";break;case 0:return "Routine";break;default:return "Unknown";}}char* parseServiceType_getTOS(BYTE b) {b=(b>>1)&0x0f;switch(b){case 0:return "Normal Service";break;case 1:return "Minimize monetary cost";break;case 2:return "Maximize reliability";break;case 4:return "Maximize throughput";break;case 8:return "Minimize delay";break;case 15:return "Maximize security";break;default:return "Unknown";}}void getFlags(WORD w,BYTE &DF,BYTE &MF) {DF=(w>>14)&0x01;MF=(w>>13)&0x01;}void getFragOff(WORD w,WORD &fragOff) {fragOff=w&0x1fff;}char* getProtocol(BYTE Protocol){switch (Protocol){case 1:return "ICMP";case 2:return "IGMP";case 4:return "IP in IP";case 6:return "TCP";case 8:return "EGP";case 17:return "UDP";case 41:return "IPv6";case 46:return "RSVP";case 89:return "OSPF";default:return "UNKNOWN";}}void ipparse(FILE* file,char* buffer){IP_HEADER ip=*(IP_HEADER*)buffer;fseek(file,0,SEEK_END);fprintf(file,"----------------------------------\n");BYTE version;getVersion(ip.Version,version);fprintf(file,"Version:%d\n",version);BYTE headerLen;getIHL(ip.HdrLen,headerLen);fprintf(file,"HdrLen:%d(Bytes)\n",headerLen);fprintf(file,"ServiceType: %s,%s\n",parseServiceType_getProcedence(ip.ServiceType),parseServiceType_getTOS(ip.ServiceType));fprintf(file,"TotalLen: %d(Bytes)\n",ip.TotalLen);fprintf(file,"ID: %d\n",ip.ID);BYTE DF,MF;getFlags(ip.Flags,DF,MF);fprintf(file,"Flags:DF=%d,MF=%d\n",DF,MF);WORD fragOff;getFragOff(ip.FragOff,fragOff);fprintf(file,"FragOff: %d\n",fragOff);fprintf(file,"FragOff: %d\n",fragOff);fprintf(file,"TimeToLive: %d(Hops)\n",ip.TimeToLive);fprintf(file,"Protocol: %s\n",getProtocol(ip.Protocol));fprintf(file,"HdrChksum: 0x%0x\n",ip.HdrChksum);fprintf(file,"SrcAddr: %s\n",inet_ntoa(*(in_addr*)&ip.SrcAddr));fprintf(file,"DstAddr: %s\n",inet_ntoa(*(in_addr*)&ip.DstAddr)); }void main(int argc,char*argv[]){if(argc!=2){printf("Please input command: ParseArp output_file");return;}FILE* file;if((file=fopen(argv[1],"wb+"))==NULL){printf("Fail to open file %s",argv[1]);return;}WSADATA wsData;if(WSAStartup(MAKEWORD(2,2),&wsData)!=0){printf("WSAStartup failed!");return;}SOCKET sock;if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCK ET){printf("Creat socket failed");return;}BOOL flag=true;if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag)) ==SOCKET_ERROR){printf("Setsockopt failed!");return;}char hostName[128];if(gethostname(hostName,100)==SOCKET_ERROR){printf("Gethostname failed!");return;}hostent* pHostIP;if((pHostIP=gethostbyname(hostName))==NULL){printf("Gethostbyname failed!");return;}sockaddr_in addr_in;addr_in.sin_addr=*(in_addr*)pHostIP->h_addr_list[0];addr_in.sin_family=AF_INET;addr_in.sin_port=htons(6000);if(bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in))==SOCKET_ERRO R){printf("Bind failed!");return;}DWORD dwValue=1;DWORD dwBufferLen[10];DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;if(WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),& dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)==SOCKET_ ERROR){printf("Ioctlsocket failed!");return;}char buffer[BUFFER_SIZE];printf("Listening on local host...\n");while(true){int size=recv(sock,buffer,BUFFER_SIZE,0);if(size>0){ipparse(stdout,buffer);ipparse(file,buffer);}}fclose(file);return;}结果截图。
计算机⽹络ARP地址协议解析实验报告计算机⽹络实验报告⼀、实验⽬的:1. 掌握ARP协议的报⽂格式2. 掌握ARP协议的⼯作原理3. 理解ARP⾼速缓存的作⽤4. 掌握ARP请求和应答的实现⽅法5. 掌握ARP缓存表的维护过程⼆、实验步骤:⼀,完成⽹络环境的配置,并进⾏拓扑验证。
预期问题:拓扑验证出现错误。
必须严格按照附录中的拓扑图进⾏⽹络环境的配置,如有错误不能向下进⾏实验。
因为在错误的⽹络配置环境下做的实验结果也是⽆意义的。
⼆,完成采集⽹络传输数据前的准备⼯作。
⽹关的设定;开通静态路由;主机 A ping 主机 E成功;清空ARP ⾼速缓存;设置协议分析器的过滤条件;预期问题:⽹关设定错误,没有在主机 B 开启静态路由都会造成主机 A Ping 主机E 不成功。
三,开始实验,启动协议分析器,开始捕获数据。
预期问题:必须先开启数据捕获,再执⾏主机 A ping 主机 E 操作,否则获取不到数据。
四,查看采集到的ARP 报⽂,对实验结果进⾏截图、记录。
五,关闭实验平台,将实验系统恢复原状,完成实验。
1.IP配置完毕,进⾏拓扑验证:图⽰为A⾓⾊捕获到的ARP-request图⽰说明:⽅向:172.16.1.42(主机 A)→⼦⽹内的所有主机内容:ARP‐request协议解析树: Ethernet 802.3⽬的 MAC 地址= FFFFFF‐FFFFFF :向⼦⽹内所有主机发送源 MAC 地址=6C626D‐707DCE:主机 A 的 MAC 地址协议类型或数据长度=0806(ARP 协议):ARP 协议ARP(地址解析议)硬件类型=1协议类型=0800硬件地址长度=6协议地址长度=4操作码=1(请求)发送端硬件地址=6C626D‐707DCE (主机A发送端逻辑地址=172.16.1.41 (主机A)⽬的端硬件地址=000000‐000000 (未知,请求的硬件地址)⽬的端逻辑地址=172.16.1.42 (主机 B 左⽹卡)过程描述:主机 A→⼦⽹内的所有主机,发送 ARP‐request,请求 IP 地址是 172.16.1.42 (主机B的左⽹卡)主机 Aping 主机 E,由于 A 发现 E 与其不是在同⼀⼦⽹,所以主机 A 把发送的数据转发到⽹关:主机 B 左⽹卡。
实验报告实验中心(室):计算机工程实验教学中心实验分室:计算机网络基础实验课程:计算机网络与互联网实验项目名称:地址解析协议(ARP)专业:计算机科学与技术(网络工程)年级:2014级姓名:刘成学号:20140657031105 日期:2016年11月10日一.实验目的1. 掌握ARP 协议的报文格式2. 掌握ARP 协议的工作原理3. 理解ARP 高速缓存的作用4. 掌握ARP 请求和应答的实现方法5. 掌握ARP 缓存表的维护过程二.实验环境三.实验内容练习 1 领略真实的ARP(同一子网)各主机打开工具区的“拓扑验证工具”,选择相应的网络结构,配置网卡后,进行拓扑验证,如果通过拓扑验证,关闭工具继续进行实验,如果没有通过,请检查网络连接。
本练习将主机A、B、C、D、E、F 作为一组进行实验。
1.主机A、B、C、D、E、F 启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(提取ARP、ICMP)。
2.主机A、B、C、D、E、F 在命令行下运行“arp -d”命令,清空ARP 高速缓存。
3.主机A ping 主机D(172.16.1.4)。
主机B ping 主机C(172.16.1.3)。
主机E ping 主机F(172.16.0.3)。
4. 主机A、B、C、D、E、F 停止捕获数据,并立即在命令行下运行“arp -a”命令察看ARP 高速缓存。
●ARP 高速缓存表由哪几项组成?●结合协议分析器上采集到的ARP报文和ARP高速缓存表中新增加的条目,简述ARP 协议的报文交互过程以及ARP 高速缓存表的更新过程。
练习 2 编辑并发送ARP 报文(同一子网)本练习将主机A、B、C、D、E、F 作为一组进行实验。
1.在主机E 上启动协议编辑器,并编辑一个ARP 请求报文。
其中:MAC 层:目的MAC 地址:设置为FFFFFF-FFFFFF 源MAC 地址:设置为主机 E 的MAC 地址协议类型或数据长度:0806 ARP 层:发送端硬件地址:设置为主机 E 的MAC 地址发送端逻辑地址:设置为主机 E 的IP 地址(172.16.0.2)目的端硬件地址:设置为000000-000000 目的端逻辑地址:设置为主机 F 的IP 地址(172.16.0.3)2.主机A、B、C、D、F 启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(提取ARP 协议)。
华南农业大学信息学院课程设计课程设计题目:解析ARP数据包计划学时:2周所属课程名称:计算机网络课程设计开设时间: 2010学年第一学期授课班级: 07软件R3指导教师:**学生姓名:***学号:*************信息学院解析ARP数据包摘要:本文首先介绍了地址解析协议ARP的概念,详细说明了ARP的工作原理,ARP攻击的基本原理,详细分解了ARP数据包的各个字段含义,ARP协议工作的流程和这次课程设计的意义与目的;接着描述了此实验的总体设计;然后是详细设计,分析讲解了实现代码的主要部分;最后还讲了做这次课程设计的个人总结,谈了一些个人观点。
关键字:ARP数据包、工作原理、ARP攻击、解析、截获、功能1 引言1.1背景首先,我们来了解一下什么是ARP,ARP的工作原理以及ARP攻击所带来的危害。
1.1.1什么是ARP地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确定其物理地址的一种协议。
因IPv4和以太网的广泛应用,其主要用作将IP地址翻译为以太网的MAC地址,但其也能在A TM和FDDIIP网络中使用。
从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。
ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC 层,也就是相当于OSI的第二层)的MAC地址。
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。
而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。
这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。
于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。
这就是ARP协议要做的事情。
所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
解析arp课程设计一、课程目标知识目标:1. 让学生掌握ARP(地址解析协议)的基本概念,理解其工作原理;2. 学会使用ARP命令进行网络通信测试,了解ARP缓存的作用;3. 掌握ARP欺骗的原理和防范方法。
技能目标:1. 培养学生运用所学知识解决实际网络问题的能力;2. 提高学生在网络环境中进行故障排查和问题解决的能力;3. 培养学生团队合作和沟通交流的能力。
情感态度价值观目标:1. 培养学生对计算机网络知识的兴趣,激发学习热情;2. 增强学生的网络安全意识,树立正确的网络道德观念;3. 培养学生勇于探索、积极进取的精神风貌。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程为计算机网络基础课程,以实践操作为主,理论讲解为辅;2. 学生特点:学生具备一定的计算机网络基础知识,对实际操作有较高的兴趣;3. 教学要求:注重理论与实践相结合,以学生为主体,充分调动学生的积极性和主动性。
1. 熟练掌握ARP相关理论知识,具备实际操作能力;2. 独立完成网络故障排查,提高问题解决能力;3. 树立正确的网络安全意识,为今后的学习和工作打下坚实基础。
二、教学内容1. ARP基础知识:- 地址解析协议的概念与作用;- ARP缓存的作用及维护;- ARP工作原理及报文格式。
2. ARP命令操作:- 使用ARP命令查看、添加和删除ARP缓存记录;- 通过ARP命令进行网络通信测试;- 分析ARP命令在实际应用中的问题及解决方法。
3. ARP欺骗与防范:- ARP欺骗的原理及类型;- ARP欺骗的检测方法;- 防范ARP欺骗的措施及配置。
4. 教学内容安排与进度:- 第一课时:ARP基础知识学习;- 第二课时:ARP命令操作练习;- 第三课时:ARP欺骗与防范措施学习。
5. 教材关联:- 教学内容与《计算机网络》教材中第四章第二节“地址解析协议”相关;- 结合教材内容,对ARP协议进行深入剖析和实际操作。
6. 教学大纲:- 理论知识:ARP基本概念、工作原理、命令操作;- 实践操作:ARP缓存维护、通信测试、欺骗防范;- 教学进度:三个课时,逐步深入学习ARP相关知识。