版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、封 皮成 绩 评 定 表学生姓名范哲铭班级学号1204050316专 业计算机科学与技术课程设计题目发送ARP数据包评语组长签字:成绩日期 20 年 月 日课程设计任务书学 院信息科学与工程学院专 业计算机科学与技术学生姓名范哲铭班级学号1203050316课程设计题目发送ARP数据包实践教学要求与任务: 根据后面介绍的ARP包结构,编写程序封装并发送ARP包。1. 以命令形式运行:SendArp source_ip source_mac dest_ip dest_mac其中SendArp为程序名,source_ip为源ip地址,source_mac为源mac地址,dest_ip为目的ip地址
2、,dest_mac为目的mac地址.2. 输出内容:帧各字段值,包括源地址,源地址,目的地址,目的地址等工作计划与进度安排:第17周星期一:设计任务分析和总体设计星期二:软件算法和流程设计星期三:软件编码实现星期四:软件总体调试星期五:交课程设计报告、答辩、验收程序指导教师: 2013 年12月9 日专业负责人:2013 年12月10 日学院教学副院长:2013 年12 月 11 日摘 要计算机网络是多个计算机的集合,在网络中的计算机若想互相通信就需要用到Ethernet 设备。Ethernet 设备有自己全球唯一的MAC地址,它们以MAC地址来传输Ethernet数据包,但他们却不能识别IP
3、包的IP地址。所以,在Ethernet中进行IP通信时就需要一个协议来建立IP地址和MAC地址的对应关系。在ARP协议中对于这种情况会发送Arp数据包用来寻找目的主机并建立对应关系用于下次传输。关键字:物理帧 ARP帧 ip地址 mac地址目录一 课程设计目的1二 课程设计要求1三 系统开发语言及环境的选择1四 相关知识 1-31ARP协议的工作原理1-22.ARP的包格式 23.ARP包的填充2-3五 课程设计过程3-111.流程图 3-42.源程序代码 4-103.程序运行结果分析10-11六 课程设计小结11七 参考文献11-12一 课程设计目的 1) ARP协议用于完成IP地址与MAC
4、地址间的转换。2) 熟悉ARP协议对于IP数据包的传输过程具有重要意义。3) 本课程设计的主要目的是通过封装与发送ARP帧,了解ARP协议的工作原理与ARP帧的结构。二 课程设计要求根据后面介绍的ARP包结构,编写程序封装并发送ARP包。1) 以命令行形式运行: arpsend src_ip src_mac dst_ip dst_mac flag其中arpsend作为程序名。各参数意义:src_ip: 源IP地址。src_mac: 源MAC地址。dst_ip: 目的IP地址。dst_mac: 目的MAC地址。Flag:0表示ARP请求;1表示ARP应答。例如: Arpsend 192.168.
5、1.1 FA:01:02:03:04:05 0D:E1:02:03:B4:06 12) 输出内容:ARP帧的各字数值,包括源IP地址,源MAC地址,目的IP地址,目的MAC地址等。三 系统开发语言及环境的选择操作系统:Windows 8运行环境:Microsoft Visual C+ 6.0开发语言:C+。四 相关知识 1.ARP协议的工作原理 Ethernet 设备(比如网卡)有自己全球唯一的MAC地址,它们以MAC地址来传输Ethernet数据包,但他们却不能识别IP包的IP地址。所以,在Ethernet中进行IP通信时就需要一个协议来建立IP地址和MAC地址的对应
6、关系,这个协议就是ARP协议。 ARP的基本运行过程是:1) 主机A希望发行数据分组给主机B,但不知道B的物理地址。2) A发送广播报文,要求B主机用他的物理地址来响应。3) 网站上所有主机都接收到这个分组。4) B识别出自己的IP地址,发送给应答报文,告诉A自己的物理地址。但是,所有的源节结点在发送任何一个分组或者连续向同一个目的主机发送分组时,都要通过ARP服务去获取目的物理地址,他的工作效率肯定很低。为了克服这个缺点,要对ARP做些改进。ARP改进的一个重要方法是,在使用ARP的主机上保留一个专用的高速缓存,用于存放最近的IP地址和物理地址的绑定,在发送ARP请求时先看看这个高速缓存。例
7、如,在命令窗口中输入:arp-a 得到: Internet Address Physical Address Type50 00-30-6e-07-e6-de dynamic 这就是该计算机里存储的IP地址与MAC地址的对应关系,dynamic表示临时存储在ARP缓存中的条目,过一段时间系统就会自动删除。 这样,当计算机要和另一台计算机9通信时,他会先检查ARP缓存,查找是否与9对应的ARP条目。如果没找到,他就会发送ARP请求包,广播询问与9对应的MAC地址。9发现ARP请求包中的I
8、P一样,就会发送ARP应答分组,通知自己IP地址与MAC地址的对应关系。于是,计算机的ARP缓存就会相应刷新,增加以下信息:9 00-40-05-42-84-f4 dynamic 。 2.ARP的包格式图1给了ARP分组格式的示意图。物理帧头(14B)ARP帧结构(28B)填充数据(18B)CRC(4B)图1 ARP包格式(1) 物理帧头物理帧头的结构如2图所示。目的MAC (6B)源MAC(6B) 类型(2B) ARP帧:0x0806图2 物理帧头格式(2)ARP帧结构 图3给出了ARP帧格式的示意图,长度为28B。 3ARP包的填充 要注意的是,填充请求包时。因为包要
9、在Ethernet上广播,所以,物理帧头的“目的MAC”字段要填充为FFFFFFFFFFFF;而ARP帧结构中的目的MAC可填充为任意值,因为它此时不起作用。“填充数据”字段要填充为0。 0 8 16 24 31(位) 硬件类型(Ethernet:0x1) 上层协议类型(IP:0x0800)硬件地址长度(0x6)IP地址长度(0x4) 操作(请求: 0x1; 应答: 0x2) 源MAC地址 源MAC地址 源IP地址 源IP地址 目的MAC地址 目的MAC地址 目的IP地址图3 ARP帧结构五 课程设计过程 1.流程图Arp请求,填充dlc头中目的mac及flag结束关闭网卡释放包结构Y进入发送
10、arp包函数填充dlc的其他字段及arp头的各字段Arp请求,填充dlc头中目的mac及flag选择并打开网卡?获取网卡列表?分配并初始化发送包结构YYNNNYNYFlag=0?N开始发送成功?定义arp跑结构并初始化命令行参数=5? 图5 程序流程图2.源程序代码#include <iostream>#include <pcap.h> /此头文件在VC中并不包含需另行下载#pragma comment(lib,"wpcap.lib")#pragma comment(lib,"ws2_32.lib")using namespace
11、 std;typedef struct phyframe/用结构体自定义物理帧结构 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; unsigned short flag; unsigned char srcm
12、ac6; 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)/定义checkmac函数用来检测输入的硬件地址格式是否正确,如果正确进行赋值 char ma
13、c18; int i=0,j=0,k=0; strcpy(mac,argv); int m=strlen(argv); for(i=0;i<m;i+) if(maci<'-')|(maci>'-'&&maci<'0')|(maci>'9'&&maci<'A')|(maci>'Z'&&maci<'a')|maci>'z')/对输入的硬件地址的格式进行检查当字符串中的每一
14、位出现除了个位数,大或小写字母和- 以外的字符时报错 cout<<"MAC格式错误"<<endl; return 0; else if(maci!='-') j+; else k+; if(j>2)/如果有连续两个-出现,报错 cout<<"MAC格式错误!"<<endl; return 0; else j=0; if (k>5) 如果-的个数大于5个报错 cout<<"MAC格式错误!"<<endl; return 0; for(i=
15、0;i<6;i+) 用一个for循环进行赋值 while(*(mac+j)='-') j+; if(*(mac+j)>='0'&&*(mac+j)<='9') mac_addi=(unsigned char)(*(mac+j)-'0'); if(*(mac+j)>='a'&&*(mac+j)<='z') mac_addi=(unsigned char)(*(mac+j)-'a'+10); if(*(mac+j)>=&
16、#39;A'&&*(mac+j)<='Z') mac_addi=(unsigned char)(*(mac+j)-'A'+10); mac_addi*=16; if(*(mac+j)>='0'&&*(mac+j)<='9') mac_addi+=(unsigned char)(*(mac+j)-'0'); if(*(mac+j)>='a'&&*(mac+j)<='z') mac_addi+=(uns
17、igned char)(*(mac+j)-'a'+10); if(*(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函数用来检测输入的硬件地址格式是否正确,如果正确进行赋值 char ip16; int i=0,j=0,k=0; strcpy(ip,argv); int m=st
18、rlen(argv); for(i=0;i<m;i+) if(ipi<'.')|(ipi>'.'&&ipi<'0')|ipi>'9')/对输入的ip地址进行检查,如果出现数字和.以外的字符报错 cout<<"IP地址错误!"<<endl; return 0; else if(ipi!='.') j+; else k+; if(j>3)/出现连续四位都是数字时报错 cout<<"IP地址错误!&quo
19、t;<<endl; return 0; else j=0; if (k>3)/.一共出现三次以上时报错 cout<<"ip 地址错误!"<<endl; return 0; for(i=0;i<4;i+)/如没有错误对IP地址进行赋值 while(*(ip+j)='.') j+; ip_addi=(unsigned char)atoi(ip+j); return 1;void main(int argc,char *argv)/主函数中含有命令行输入参数,所以此程序要用命令提示符来运行,在路径后输入程序中所需的变
20、量的值直接在程序开始时就进行赋值 if(argc!=5) cout<<"please input commend:SendArp source_ip source_mac dest_ip dest_mac"<<endl; return; int i=0; memset(&arpp,0,sizeof(arpp); if(!checkmac(argv4,arpp.phyf.desmac) return;/对物理帧和ARP帧中的各个内容进行赋值 if(!checkmac(argv2,arpp.phyf.srcmac) return; arpp.ph
21、yf.frametype=htons(unsigned short)0x0608); arpp.arpf.hardwaretype=(unsigned short)0x0100; tocoltype=(unsigned short)0x0008; 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(!
22、checkmac(argv4,arpp.arpf.desmac) return; if(!checkip(argv3,arpp.arpf.desip) return; for(i=0;i<18;i+) arpp.arpf.paddingi=0; pcap_if_t *alldevs; /寻找网卡并列出网卡列表 pcap_if_t *d,*head=NULL; pcap_t *fp; char errbufPCAP_ERRBUF_SIZE; if(pcap_findalldevs(&alldevs,errbuf)=-1) cout<<"unable to cr
23、eate 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<
24、;<"enter the interface number"/选择网卡 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 ope
25、n adapter!"<<endl; pcap_freealldevs(alldevs); return; if(pcap_sendpacket(fp,(unsigned char*)&arpp,sizeof(unsigned char*)&arpp)=1) cout<<"arp packet send error!"<<endl; return; cout<<"source mac:"<<argv1<<endl;/输出源/目的物理地址和源/目的IP地址 cout<<"source ip:"<<argv2<<endl; cout<<"dest mac:"<<argv3<<endl; cout<<"dest ip:"<<argv4<<endl; cout<<"arp 包发送成功!"<<endl;3.程序运行结果分析 1)安装驱动程序。下载Winpcap Driver软件并安装,安装后重启机器。 2)下载wpd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全技术措施及文明施工方案
- 二期防腐管道加工项目环境影响报告表
- 包头天骄科技专项实验示范线环境影响报告表
- 四川省成都市金牛区蜀西实验校2026届初三下学期期末试卷物理试题含解析
- 广东省广州市南沙区博海校2026届高中毕业班阶段性测试(二)英语试题含解析
- 湖南省长沙市长铁一中2026年初三第一次适应性考试(一模)英语试题含解析
- 云南省泸西县逸圃初级中学2026届初三下学期开年摸底大联考(全国I卷)数学试题含解析
- 四川省通江县重点中学2026年初三中考模拟考试(二)英语试题含解析
- 临床带教资源利用
- 危重病人监护与管理
- 投行业务管理制度
- VTE相关知识培训课件
- 语文七年级下册 第二单元 单元整体分析
- 2.3品味美好情感 课 件 -2024-2025学年统编版道德与法治七年级下册
- 梯笼安装施工方案
- 2024年燃气项目立项申请报告模范
- 2022病毒疣基层诊疗指南
- 消防安全评估消防安全评估方案
- 仿生蝴蝶机械设计说明书
- 中建公寓楼装配式施工方案(B类)
- 2019外研社版高中英语选修一 Unit 3 单词短语句子复习默写单
评论
0/150
提交评论