路由器实验报告_第1页
路由器实验报告_第2页
路由器实验报告_第3页
路由器实验报告_第4页
路由器实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

路由器实验报告简介采用静态路由表采用静态mac表实现双网卡转发采用两个程序分别在两个网卡上抓包和转发流程图实现步骤①打开所有设备②分别选择两块网卡③在一块网卡上抓包同时过滤④查找路由表若不在路由表中则重新抓包⑤修改目的mac并转发⑥总结上面的是一个程序,另外一个程序于此相同,只不过上面的是在无线网卡上抓包有线网卡上发,另一个是在有线网卡上抓,无线网卡上发采用两个程序,分别在两块网卡上抓包和转发,两个程序同时运行,能够实现路由器的功能出现过的问题期末压力较大,没有时间做更细致的,路由表和mac表都采用的静态的,程序运行前设置好一开始使用单线程,单线程总是抓不到回复的包,后来改用两个程序。不会使用多线程,学习多线程时间上又不允许,只能开两个程序,达到模拟多线程的目的//router.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<pcap.h>#include<iostream>#include<Winsock2.h>#include<Windows.h>#include<string>#include<queue>usingnamespacestd;#pragmacomment(lib,"ws2_32.lib")#pragmapack(1)typedefstructFrameHeader_t//定义帧首部{ //帧字节 BYTEDesMAC[6]; //目的地址 BYTESrcMAC[6]; //源地址 WORDFrameType; //帧类型}FrameHeader_t;typedefstructARPFrame_t//ARP帧{ FrameHeader_tFrameHeader; WORDHardwareType; WORDProtocolType; BYTEHLen; BYTEPLen; WORDOperation; BYTESendHa[6]; DWORDSendIP; BYTERecvHa[6]; DWORDRecvIP;}ARPFrame_t;typedefstructIPHEADER_T{ //IP首部 BYTEVer_HLen;//版本和报头长度,高4位为版本,低四位为报头长度 BYTETOS;//服务类型 WORDTotalLen;//总长度 WORDID;//表示 WORDFlag_segment;//标志+片偏移 BYTETTL;//生存周期 BYTEProtocol;//协议 WORDChecksum;//校验和 ULONGSrcIP;//源IP ULONGDstIP;//目的IP}IPHeader_t;typedefstructData_t{ //包含帧首部和IP首部的数据包 FrameHeader_tFrameHeader; IPHeader_tIPHeader;}Data_t;#pragmapack()structroutersheet{ unsignedintnetmask; unsignedintdstnet; unsignedintnextnet;};structmacsheet{ unsignedintip; BYTEmac[6]; unsignedintttl;};constintNumber=3;routersheetrouter_sheet[Number]={ //子网掩码 目的网络 下一跳步 {inet_addr(""),inet_addr(""),inet_addr("13")}, {inet_addr(""),inet_addr(""),inet_addr("55")}, {inet_addr(""),inet_addr(""),inet_addr("55")}};macsheetmac_sheet[2]={ {inet_addr("13"),{0x8c,0x89,0xa5,0x73,0x4d,0xc0},10000}, {inet_addr("28"),{0x34,0x08,0x04,0xe0,0x2c,0xc6},10000}};constBYTEw_mac[6]={0xac,0x72,0x89,0x5c,0xd1,0xfe};//无限网卡的macconstBYTEl_mac[6]={0x18,0x03,0x73,0x79,0x5e,0x8a};//有线网卡的macintmain(){ pcap_if_t*alldevs; pcap_if_t*d; pcap_addr_t*a; charerrbuf[PCAP_ERRBUF_SIZE]; if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==-1)//打开所有设备 { cout<<errbuf<<endl; } //输出所有设备 intj=1; structsockaddr_in*my_sin; char*IP; for(d=alldevs;d!=NULL;d=d->next) { cout<<"------------------num"<<j<<"------------------"<<endl; cout<<d->name<<endl<<d->description<<endl; for(a=d->addresses;a!=NULL;a=a->next) { if(a->addr->sa_family==AF_INET)//判断是否为IP地址 { //如果是,则输出 my_sin=(sockaddr_in*)a->addr;//强制类型转换,网上查的只有这样才能输出 IP=inet_ntoa(my_sin->sin_addr); printf("IP:%s\n",IP); } } j++; } cout<<"选择有线网卡"<<endl;//选择网卡 cin>>j; d=alldevs; for(inti=1;i<j;i++) { d=d->next; } pcap_t*line;//句柄,打开网卡 line=pcap_open(d->name,65536,PCAP_OPENFLAG_PROMISCUOUS,1,NULL,errbuf); cout<<"选择无线网卡"<<endl;//选择网卡 cin>>j; d=alldevs; for(inti=1;i<j;i++) { d=d->next; } pcap_t*wifi;//句柄,打开网卡 wifi=pcap_open(d->name,65536,PCAP_OPENFLAG_PROMISCUOUS,1,NULL,errbuf); pcap_pkthdr*pkt_header; constu_char*pkt_data; Data_t*IPPacket; intix=0; ints1,s2,s3,s4; intd1,d2,d3,d4; unsignedintsource; unsignedintdest; unsignedinttempSource; intflag; while(true) { intres1=pcap_next_ex(wifi,&pkt_header,&pkt_data); if(res1==-1){cout<<"error"<<endl;continue;} if(res1==0){/*cout<<"timeout"<<endl;*/continue;} IPPacket=(Data_t*)pkt_data; if(IPPacket->FrameHeader.FrameType!=htons(0x0800)){continue;}//判断是否为IP包 if((int)((IPPacket->IPHeader.Ver_HLen)>>4)!=4){continue;}//判断是否为ipv4包 for(;ix<6;ix++) { if(IPPacket->FrameHeader.DesMAC[ix]!=w_mac[ix]) break; } if(ix!=6)continue; cout<<"=================无线抓有线发================"<<endl; //输出源IP cout<<"收到一个包来自:"; source=IPPacket->IPHeader.SrcIP; source=ntohl(source); s4=source%256; source/=256; s3=source%256; source/=256; s2=source%256; source/=256; s1=source%256; cout<<dec<<s1<<"."<<s2<<"."<<s3<<"."<<s4<<endl; //输出目的IP cout<<"这个包发送到:"; dest=IPPacket->IPHeader.DstIP; dest=ntohl(dest); d4=dest%256; dest/=256; d3=dest%256; dest/=256; d2=dest%256; dest/=256; d1=dest%256; cout<<d1<<"."<<d2<<"."<<d3<<"."<<d4<<endl; source=IPPacket->IPHeader.DstIP; tempSource=source; for(flag=0;flag<Number;flag++) { tempSource=source&router_sheet[flag].netmask; if(tempSource==router_sheet[flag].dstnet)break; } if(flag==Number)continue;//不在路由表中抛弃 if(router_sheet[flag].nextnet==0xffffffff) { source=IPPacket->IPHeader.DstIP; } else { source=router_sheet[flag].nextnet; } for(inti=0;i<6;i++) { IPPacket->FrameHeader.SrcMAC[i]=l_mac[i]; IPPacket->FrameHeader.DesMAC[i]=mac_sheet[0].mac[i]; } if(pcap_sendpacket(line,(u_char*)IPPacket,sizeof(FrameHeader_t)+ntohs(IPPacket->IPHeader.TotalLen))) { cout<<"无线发送失败"<<endl; } else { cout<<"无线发送成功"<<endl; } } return0;}//router2.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<pcap.h>#include<iostream>#include<Winsock2.h>#include<Windows.h>#include<string>#include<queue>usingnamespacestd;#pragmacomment(lib,"ws2_32.lib")#pragmapack(1)typedefstructFrameHeader_t//定义帧首部{ //帧字节 BYTEDesMAC[6]; //目的地址 BYTESrcMAC[6]; //源地址 WORDFrameType; //帧类型}FrameHeader_t;typedefstructARPFrame_t//ARP帧{ FrameHeader_tFrameHeader; WORDHardwareType; WORDProtocolType; BYTEHLen; BYTEPLen; WORDOperation; BYTESendHa[6]; DWORDSendIP; BYTERecvHa[6]; DWORDRecvIP;}ARPFrame_t;typedefstructIPHEADER_T{ //IP首部 BYTEVer_HLen;//版本和报头长度,高4位为版本,低四位为报头长度 BYTETOS;//服务类型 WORDTotalLen;//总长度 WORDID;//表示 WORDFlag_segment;//标志+片偏移 BYTETTL;//生存周期 BYTEProtocol;//协议 WORDChecksum;//校验和 ULONGSrcIP;//源IP ULONGDstIP;//目的IP}IPHeader_t;typedefstructData_t{ //包含帧首部和IP首部的数据包 FrameHeader_tFrameHeader; IPHeader_tIPHeader;}Data_t;#pragmapack()structroutersheet{ unsignedintnetmask; unsignedintdstnet; unsignedintnextnet;};structmacsheet{ unsignedintip; BYTEmac[6]; unsignedintttl;};constintNumber=3;routersheetrouter_sheet[Number]={ //子网掩码 目的网络 下一跳步 {inet_addr(""),inet_addr(""),inet_addr("13")}, {inet_addr(""),inet_addr(""),inet_addr("55")}, {inet_addr(""),inet_addr(""),inet_addr("55")}};macsheetmac_sheet[2]={ {inet_addr("13"),{0x8c,0x89,0xa5,0x73,0x4d,0xc0},10000}, {inet_addr("28"),{0x34,0x08,0x04,0xe0,0x2c,0xc6},10000}};constBYTEw_mac[6]={0xac,0x72,0x89,0x5c,0xd1,0xfe};//无限网卡的macconstBYTEl_mac[6]={0x18,0x03,0x73,0x79,0x5e,0x8a};//有线网卡的macintmain(){ pcap_if_t*alldevs; pcap_if_t*d; pcap_addr_t*a; charerrbuf[PCAP_ERRBUF_SIZE]; if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==-1)//打开所有设备 { cout<<errbuf<<endl; } //输出所有设备 intj=1; structsockaddr_in*my_sin; char*IP; for(d=alldevs;d!=NULL;d=d->next) { cout<<"------------------num"<<j<<"------------------"<<endl; cout<<d->name<<endl<<d->description<<endl; for(a=d->addresses;a!=NULL;a=a->next) { if(a->addr->sa_family==AF_INET)//判断是否为IP地址 { //如果是,则输出 my_sin=(sockaddr_in*)a->addr;//强制类型转换,网上查的只有这样才能输出 IP=inet_ntoa(my_sin->sin_addr); printf("IP:%s\n",IP); } } j++; } cout<<"选择有线网卡"<<endl;//选择网卡 cin>>j; d=alldevs; for(inti=1;i<j;i++) { d=d->next; } pcap_t*line;//句柄,打开网卡 line=pcap_open(d->name,65536,PCAP_OPENFLAG_PROMISCUOUS,1,NULL,errbuf); cout<<"选择无线网卡"<<endl;//选择网卡 cin>>j; d=alldevs; for(inti=1;i<j;i++) { d=d->next; } pcap_t*wifi;//句柄,打开网卡 wifi=pcap_open(d->name,65536,PCAP_OPENFLAG_PROMISCUOUS,1,NULL,errbuf); pcap_pkthdr*pkt_header; constu_char*pkt_data; Data_t*IPPacket; intix=0; ints1,s2,s3,s4; intd1,d2,d3,d4; unsignedintsource; unsignedintdest; unsignedinttempSource; intflag; while(true) { intres2=pcap_next_ex(line,&pkt_header,&pkt_data); if(res2==-1){cout<<"error"<<endl;continue;} if(res2==0){/*cout<<"timeout"<<endl;*/continue;} IPPacket=(Data_t*)pkt_data; if(IPPacket->FrameHeader.FrameType!=htons(0x0800)){continue;}//判断是否为IP包 if((int)((IPPacket->IPHeader.Ver_HLen)>>4)!=4){continue;}//判断是否为ipv4包 ix=0; for(;ix<6;ix++) { if(IPPacket->FrameHeader.DesMAC[ix]!=l_mac[ix]) break; } if(ix!=6)continue; cout<<"===================有线抓无线发====================="<<endl; //输出源IP cout<<"收到一个包来自:"; source=IPPacket->IPHeader.SrcIP; source=ntohl(source); s4=source%256; source/=256; s3=source%256; source/=256; s2=source%256; source/=256; s1=source%256; cout<<dec<<s1<<"."<<s2<<"."<<s3<<"."<<

温馨提示

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

评论

0/150

提交评论