发送ARP数据包(共16页)_第1页
发送ARP数据包(共16页)_第2页
发送ARP数据包(共16页)_第3页
发送ARP数据包(共16页)_第4页
发送ARP数据包(共16页)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、PAGE PAGE - 19 -封 皮成 绩 评 定 表学生姓名范哲铭班级学号1204050316专 业计算机科学与技术课程设计题目发送ARP数据包评语组长签字:成绩日期 20 年 月 日课程设计任务书学 院信息科学与工程学院专 业计算机科学与技术学生姓名范哲铭班级学号1203050316课程设计题目发送ARP数据包实践教学要求与任务: 根据后面介绍的ARP包结构,编写程序封装并发送ARP包。以命令形式运行:SendArp source_ip source_mac dest_ip dest_mac其中SendArp为程序名,source_ip为源ip地址,source_mac为源mac地址,d

2、est_ip为目的ip地址,dest_mac为目的mac地址.输出内容:帧各字段值,包括源地址,源地址,目的地址,目的地址等工作计划与进度安排:第17周星期一:设计任务分析和总体设计星期二:软件算法和流程设计星期三:软件编码实现星期四:软件总体调试星期五:交课程设计报告、答辩、验收程序指导教师: 2013 年12月9 日专业负责人:2013 年12月10 日学院教学副院长:2013 年12 月 11 日摘 要计算机网络(wnglu)是多个计算机的集合,在网络中的计算机若想互相通信就需要用到Ethernet 设备(shbi)。Ethernet 设备有自己全球唯一(wi y)的MAC地址,它们以M

3、AC地址来传输Ethernet数据包,但他们却不能识别IP包的IP地址。所以,在Ethernet中进行IP通信时就需要一个协议来建立IP地址和MAC地址的对应关系。在ARP协议中对于这种情况会发送Arp数据包用来寻找目的主机并建立对应关系用于下次传输。关键字:物理帧 ARP帧 ip地址 mac地址目录一 课程设计目的(md)1二 课程设计要求(yoqi)1三 系统开发(kif)语言及环境的选择1四 相关知识 1-31ARP协议的工作原理1-22.ARP的包格式 23.ARP包的填充2-3五 课程设计过程3-111.流程图 3-42.源程序代码 4-103.程序运行结果分析10-11六 课程设计

4、小结11七 参考文献11-12一 课程设计目的 1) ARP协议用于完成IP地址与MAC地址间的转换。2) 熟悉ARP协议对于IP数据包的传输过程具有重要意义。3) 本课程设计的主要目的是通过封装与发送ARP帧,了解ARP协议的工作原理与ARP帧的结构。二 课程设计要求(yoqi)根据后面(hu mian)介绍的ARP包结构,编写程序封装并发送ARP包。以命令行形式(xngsh)运行: arpsend src_ip src_mac dst_ip dst_mac flag其中arpsend作为程序名。各参数意义:src_ip: 源IP地址。src_mac: 源MAC地址。dst_ip: 目的IP

5、地址。dst_mac: 目的MAC地址。Flag:0表示ARP请求;1表示ARP应答。例如: Arpsend FA:01:02:03:04:05 0D:E1:02:03:B4:06 1输出内容:ARP帧的各字数值,包括源IP地址,源MAC地址,目的IP地址,目的MAC地址等。三 系统开发语言及环境的选择操作系统:Windows 8运行环境:Microsoft Visual C+ 6.0开发语言:C+。四 相关知识 1.ARP协议的工作原理 Ethernet 设备(比如网卡)有自己全球唯一的MAC地址,它们以MAC地址来传输Ethernet数据包,

6、但他们却不能识别IP包的IP地址。所以,在Ethernet中进行IP通信时就需要一个协议来建立IP地址和MAC地址的对应关系,这个协议就是ARP协议。 ARP的基本运行过程是:主机A希望发行数据分组给主机B,但不知道B的物理地址。A发送广播报文,要求B主机用他的物理地址来响应。网站上所有主机都接收到这个分组。B识别出自己的IP地址,发送给应答报文,告诉A自己的物理地址。但是,所有的源节结点在发送任何一个分组或者连续向同一个目的主机发送分组时,都要通过ARP服务去获取目的物理地址,他的工作效率肯定很低。为了克服这个缺点,要对ARP做些改进。ARP改进的一个(y )重要方法是,在使用ARP的主机上

7、保留一个专用的高速缓存,用于存放最近的IP地址和物理地址的绑定,在发送(f sn)ARP请求时先看看这个高速缓存。例如,在命令(mng lng)窗口中输入:arp-a 得到: Internet Address Physical Address Type00-30-6e-07-e6-de dynamic 这就是该计算机里存储的IP地址与MAC地址的对应关系,dynamic表示临时存储在ARP缓存中的条目,过一段时间系统就会自动删除。 这样,当计算机要和另一台计算机9通信时,他会先检查ARP缓存,查找是否与9对应的ARP条目。如果没找到,他就会发送ARP

8、请求包,广播询问与9对应的MAC地址。9发现ARP请求包中的IP一样,就会发送ARP应答分组,通知自己IP地址与MAC地址的对应关系。于是,计算机的ARP缓存就会相应刷新,增加以下信息:9 00-40-05-42-84-f4 dynamic 。 2.ARP的包格式图1给了ARP分组格式的示意图。物理帧头(14B)ARP帧结构(28B)填充数据(18B)CRC(4B)图1 ARP包格式物理帧头物理帧头的结构如2图所示。目的MAC (6B)源MAC(6B) 类型(2B) ARP帧:0 x0806图2 物理帧头格式(2)ARP帧结构

9、图3给出了ARP帧格式的示意图,长度为28B。 3ARP包的填充 要注意的是,填充请求包时。因为包要在Ethernet上广播,所以,物理帧头的“目的MAC”字段要填充为FFFFFFFFFFFF;而ARP帧结构中的目的MAC可填充为任意值,因为它此时不起作用。“填充数据”字段要填充为0。 0 8 16 24 31(位) 硬件类型(Ethernet:0 x1) 上层协议类型(IP:0 x0800)硬件地址长度(0 x6)IP地址长度(0 x4) 操作(请求: 0 x1; 应答: 0 x2) 源MAC地址 源MAC地址 源IP地址 源IP地址 目的MAC地址 目的MAC地址 目的IP地址图3 ARP

10、帧结构(jigu)五 课程设计过程(guchng) 1.流程图Arp请求,填充dlc头中目的mac及flag结束关闭网卡释放包结构Y进入发送arp包函数填充dlc的其他字段及arp头的各字段Arp请求,填充dlc头中目的mac及flag选择并打开网卡?获取网卡列表?分配并初始化发送包结构YYNNNYNYFlag=0?N开始发送成功?定义arp跑结构并初始化命令行参数=5? 图5 程序(chngx)流程图2.源程序代码(di m)#include #include /此头文件在VC中并不包含(bohn)需另行下载#pragma comment(lib,wpcap.lib)#pragma comm

11、ent(lib,ws2_32.lib)using namespace std;typedef struct phyframe/用结构(jigu)体自定义物理帧结构 unsigned char desmac6; unsigned char srcmac6; unsigned short frametype;PHYFRAME;typedef struct arpframe/用结构体自定义ARP帧结构 unsigned short hardwaretype; unsigned short protocoltype; unsigned char maclen; unsigned char iplen;

12、 unsigned short flag; unsigned char srcmac6; unsigned char srcip4; unsigned char desmac6; unsigned char desip4; unsigned char padding18;ARPFRAME;typedef struct arppacket/定义ARP数据包,其中包含物理帧和ARP帧 PHYFRAME phyf; ARPFRAME arpf;ARPPACKET;ARPPACKET arpp;int checkmac(char *argv,unsigned char *mac_add)/定义chec

13、kmac函数用来检测输入的硬件地址格式是否正确,如果正确进行赋值 char mac18; int i=0,j=0,k=0; strcpy(mac,argv); int m=strlen(argv); for(i=0;im;i+) if(maci-&maci9&maciZ&maciz)/对输入的硬件地址的格式进行检查当字符串中的每一位出现(chxin)除了个位数,大或小写字母和- 以外的字符时报错 coutMAC格式(g shi)错误2)/如果有连续(linx)两个-出现,报错 coutMAC格式错误!5) 如果-的个数大于5个报错 coutMAC格式错误!endl; return 0; for

14、(i=0;i=0&*(mac+j)=a&*(mac+j)=A&*(mac+j)=0&*(mac+j)=a&*(mac+j)=A&*(mac+j)=Z) mac_addi+=(unsigned char)(*(mac+j)-A+10); return 1;int checkip(char *argv,unsigned char *ip_add) /定义checkip函数用来检测(jin c)输入的硬件地址格式是否正确,如果正确进行赋值 char ip16; int i=0,j=0,k=0; strcpy(ip,argv); int m=strlen(argv); for(i=0;im;i+) i

15、f(ipi.&ipi9)/对输入的ip地址进行(jnxng)检查,如果出现数字和.以外的字符报错 coutIP地址错误(cuw)!3)/出现连续四位都是数字时报错 coutIP地址错误!3)/.一共出现三次以上时报错 coutip 地址错误!endl; return 0; for(i=0;i4;i+)/如没有错误对IP地址进行赋值 while(*(ip+j)=.) j+; ip_addi=(unsigned char)atoi(ip+j); return 1;void main(int argc,char *argv)/主函数中含有命令行输入参数,所以此程序要用命令提示符来运行,在路径(ljn

16、g)后输入程序中所需的变量的值直接在程序开始时就进行赋值 if(argc!=5) coutplease input commend:SendArp source_ip source_mac dest_ip dest_macendl; return; int i=0; memset(&arpp,0,sizeof(arpp); if(!checkmac(argv4,arpp.phyf.desmac) return;/对物理帧和ARP帧中的各个内容(nirng)进行赋值 if(!checkmac(argv2,arpp.phyf.srcmac) return; arpp.phyf.frametype=

17、htons(unsigned short)0 x0608); arpp.arpf.hardwaretype=(unsigned short)0 x0100; tocoltype=(unsigned short)0 x0008; arpp.arpf.maclen=(unsigned short)6; arpp.arpf.iplen=(unsigned short)4; if(!checkmac(argv2,arpp.arpf.srcmac) return; if(!checkip(argv1,arpp.arpf.srcip) return; if(!checkmac(a

18、rgv4,arpp.arpf.desmac) return; if(!checkip(argv3,arpp.arpf.desip) return; for(i=0;i18;i+) arpp.arpf.paddingi=0; pcap_if_t *alldevs; /寻找网卡并列(bngli)出网卡列表 pcap_if_t *d,*head=NULL; pcap_t *fp; char errbufPCAP_ERRBUF_SIZE; if(pcap_findalldevs(&alldevs,errbuf)=-1) coutunable to create adapter list!next) c

19、out+i:name; if(d-description) cout descriptionendl; if(i=0) coutno adapter found!endl; return; coutk; if(ki) coutout of rangeendl; return; for(d=alldevs,i=1;inext,i+)/以混杂(hnz)方式打开所选网卡 head=d; if(fp=pcap_open_live(head-name,1000,1,1000,errbuf)=NULL) coutunable to open adapter!endl; pcap_freealldevs(a

20、lldevs); return; if(pcap_sendpacket(fp,(unsigned char*)&arpp,sizeof(unsigned char*)&arpp)=1) coutarp packet send error!endl; return; coutsource mac:argv1endl;/输出(shch)源/目的物理地址和源/目的IP地址 coutsource ip:argv2endl; coutdest mac:argv3endl; coutdest ip:argv4endl; coutarp 包发送成功!Option-Directories”,在include files 中添加wpdpackInclude目录;在Library files中添加wpdpackLib目录。4)打开VC后,在Project-Settings-link下的Object/library modules框中添加“Packet.lib”和“wpcap.lib”。5)运行结果截

温馨提示

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

评论

0/150

提交评论