版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
<ARP工程設(shè)計報告需求分析試驗?zāi)康模菏褂肁RP覺察局域網(wǎng)內(nèi)活動主機,自行構(gòu)造、發(fā)送ARP懇求ARP〔1〕ARPARPMACwindows/linux配器〔網(wǎng)卡〕發(fā)送的根本方法。試驗環(huán)境:1~2PC操作系統(tǒng):WindowsXP開發(fā)環(huán)境:MicrosoftVisualC++6.0,winpcap;MFC1.1問題重述arp數(shù)據(jù)幀格式和字段含義以及arp協(xié)議運作過程Winpcap開發(fā)包的使用方法,windows平臺構(gòu)造自定義數(shù)據(jù)幀,并通過指定的網(wǎng)絡(luò)適配器發(fā)送的根本過程。應(yīng)用現(xiàn)狀綜述:802.3MAC〔MediaAccessControl〕地址〔即物理地址〕進展通信?!矓?shù)據(jù)鏈路層IP。無論是任何高層協(xié)議的通信,最終都將轉(zhuǎn)換為數(shù)據(jù)鏈路層的MACARP網(wǎng)絡(luò)通信的根底協(xié)議。MACARPARPARPIP-MAC概要設(shè)計原理概述1在網(wǎng)際協(xié)議中定義的是因特網(wǎng)的IP地址,但在實際進展通信時,物理層IP間建立映射關(guān)系,地址之間的這種映射稱為地址解析。IEEE3IPARPIPA〔源主機〕D〔目的主機〕DAARP協(xié)議工作的過程如下:AARPIPIPDARPIPIPAARPD為了提高效率,ARP協(xié)議使用了高速緩存技術(shù)。在每臺使用ARP的主機中,都保存了一個專用的內(nèi)存區(qū),一收到ARP應(yīng)答,主機就將獲得的IP地址和物理地址存入緩存。以后每次要發(fā)送報文時,首先到緩存中查找有無相應(yīng)的項,假設(shè)找不到,再利用ARP進展地址解析。由于多數(shù)網(wǎng)絡(luò)通信都要連續(xù)發(fā)送多個報文,所以高速緩存大大提高ARPARPIP在播送ARP“IP地址——物理地址”的地址對并將其存入自己的緩存。在主機入網(wǎng)時,令其主動播送其地址映射,以削減其他主機進展ARP懇求。網(wǎng)卡具有如下的幾種工作模式:播送模式〔BroadCastModel〕:它的物理地址〔MAC〕0Xffffff的幀為播送幀,工作在播送模式的網(wǎng)卡接收播送幀。多播傳送〔MultiCastModel以被組內(nèi)的其它主機同時接收,而組外主機卻接收不到。但是,假設(shè)將不是組內(nèi)成員。工作在直接模式下的網(wǎng)卡只接收目地址是自己Mac混雜模式〔PromiscuousModel〕:工作在混雜模式下的網(wǎng)卡接收全部的流過網(wǎng)卡的幀,信包捕獲程序就是在這種模式下運行的。ARP1兩個字節(jié)長的以太網(wǎng)幀類型表示后面數(shù)據(jù)的類型。對于ARP0X0806.1;協(xié)議類型字段:表示要映射的協(xié)議地址類型,IP0X0800;度,這樣ARPIPARP64;ARP1,ARP2,RARP3,RARP4;發(fā)送端的以太網(wǎng)地址:源主機硬件地址,6IP〔IP,4目的以太網(wǎng)地址:目的端硬件地址,6IP〔IP,42主要問題ARP相關(guān)數(shù)據(jù)幀構(gòu)造ARP程序的流程Winpcap開發(fā)包的使用方法解決思路:先查找資料,深入把握ARPARP程序的流程進展生疏。查閱資料,把握Winpcap開發(fā)包的使用方法。實現(xiàn)預(yù)期目標的可行性分析:ARPTCP/IPIPWinpcap在教師的細心指導下,本課題中遇見的問題可以迎刃而解。順當完成程序的開發(fā)。ARP,ARP絡(luò),協(xié)議的進展。其次章主要描述網(wǎng)絡(luò)根底學問和ARP協(xié)議的原理,幀構(gòu)造等相ARPVisualC++和WinpcapARPARP2.3數(shù)據(jù)構(gòu)造structethernet_head{unsignedchardest_mac[6]; //MACunsignedcharsource_mac[6];unsignedshorteh_type;};
/MAC//以太網(wǎng)類型structarp_head{unsignedshorthardware_type;unsignedshortprotocol_type;unsignedcharadd_len;unsignedcharpro_len;unsignedshortoption;unsignedcharsour_addr[6];
//1//協(xié)議類型:IP0X0800//硬件地址長度:MAC6B//協(xié)議地址長度:IP4B//操作:ARP1,ARP2/MACMACunsignedlongsour_ip; //IPIPunsignedchardest_addr[6]; //MACARP段沒有意義;ARPMACdg; /PP地址;ARPIPunsignedcharpadding[18];};structarp_packet{ethernet_headeth;arp_headarp;};
//arp//以太網(wǎng)頭部//arp具體設(shè)計主要函數(shù)說明/*****************物理幀頭部構(gòu)造*****************/typedefstruct ethernet_head{unsignedchar eh_dest_mac[6];unsignedchar eh_source_mac[6];unsignedshort eh_type;
//目標主機mac//本地主機mac//類型}ethernet_head,*pEthernetHead;/*************ARP幀構(gòu)造*************/typedefstruct arpHead{unsignedshortarp_hardwaretype;//硬件類型(2bit)unsignedshortarp_protocoltype;//協(xié)議類型(2bit)unsignedchararp_har_len;//硬件地址長度(1bit)unsignedchararp_pro_len;//協(xié)議地址長度(1bit)unsignedshortarp_option;//操作號(2bit)unsignedchararp_sour_addr[6];//源硬件地址(6bit)unsignedlongarp_sour_ip;//源協(xié)議地址(4bit)unsignedchararp_dest_addr[6];//目的硬件地址(6bit)unsignedlongarp_dest_ip;//目的協(xié)議地址(4bit)unsignedcharpadding[18];//填充數(shù)據(jù)(18bit)}arpHead,*pArpHead;/*****************IP數(shù)據(jù)報頭構(gòu)造*****************/typedefstruct ipHead{unsignedchar h_lenver; //版本(4bits)+首部長度(4bits)unsignedchar tos; //效勞類型(Typeofservice)unsignedshort total_len; //總長(Totallength)unsignedshort ident; //標識(Identification)unsignedshort frag_and_flags; //標志位(Flags)(3bits)+段偏移量(Fragmentoffset)(13bits)unsignedcharttl;//存活時間(Timetolive)unsignedcharproto;//協(xié)議(Protocol)unsignedshortchecksum;//首部校驗和(Headerchecksum)unsignedintsourceip;//源地址(Sourceaddress)unsignedintdestip;//目的地址(Destinationaddress)}ipHead,*PipHead;#pragmapack(push)LPADAPTER lpadapter=0; //defineapointertoanADAPTERstructure設(shè)備指針LPPACKET lppacketr,lppackets; //defineapointertoaPACKETstructure包指針unsignedlong myip; //本地主機IPunsignedcharmymac[6]={0};//本地主機mac初始化charadapterlist[MAX_NUM_ADAPTER][1024];//本地主機網(wǎng)卡列表int增num=0;//用于發(fā)送ARP包時候遞voidstart{printf(“************************************\n“);printf(“*printf(“*局域網(wǎng)內(nèi)活動主機檢測*\n“);*\n“);printf(“*07微電子董巍2120230223*\n“);printf(“**\n“);printf(“************************************\n“);return;}/***********************獲得本地主機的mac地址***********************/intgetmine{char sendbuf[1024];int k;ethernet_head eth;arpHead arp;for(k=0;k<6;k++){eth.eh_dest_mac[k] =0xff;eth.eh_source_mac[k]=0x82;arp.arp_sour_addr[k]=0x82;arp.arp_dest_addr[k]=0x00;}eth.eh_type=htons(ETH_ARP);arp.arp_hardwaretype=htons(ARP_HARDWARE);arp.arp_protocoltype=htons(ETH_IP);arp.arp_har_len=6;arp.arp_pro_len=4;arp.arp_option=htons(ARP_REQUEST);arp.arp_dest_ip=htonl(myip);arp.arp_sour_ip=inet_addr(“112.112.112.112“);memset(sendbuf,0,sizeof(sendbuf));memcpy(sendbuf,e,sizeof(eth));memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp));PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE){printf(“PacketSendPacketingetmineError:%d\n“,GetLastError);return-1;}return0;}/*****************解析數(shù)據(jù)報*****************/voidreceivedata(LPPACKETlppktr){unsignedlong ulbytesreceived,off;unsignedlong j;char *buf,*pChar,*base;PipHead ip;structbpf_hdr *hdr;structsockaddr_in sin;ethernet_head *eth;arpHead *arp;ulbytesreceived=lppktr->ulBytesReceived;buf=(char*)lppktr->Buffer;off=0;//解析數(shù)據(jù)報while(off<ulbytesreceived){
//數(shù)據(jù)報頭部if(kbhit){return;}hdr=(structbpf_hdr*)(buf+off);off+=hdr->bh_hdrlen;
//數(shù)據(jù)報頭部長度pChar=(char*)(buf+off);base=pChar;off=Packet_WORDALIGN(off+hdr->bh_caplen);eth=(pEthernetHead)pChar;arp=(pArpHead)(pChar+sizeof(ethernet_head));if(eth->eh_type==htons(ETH_IP)){ip=(PipHead)(pChar+sizeof(ethernet_head));}else if((eth->eh_type==htons(ETH_ARP)) &&(arp->arp_option==htons(ARP_REPLY))){sin.sin_addr.s_addr=arp->arp_sour_ip;if(sin.sin_addr.s_addr==htonl(myip)){memcpy(mymac,eth->eh_source_mac,6);}//ip地址printf(“\n[IP:] %.16s[MAC:]“,inet_ntoa(sin.sin_addr));//mac地址for(j=0;j<5;j++){printf(“%.2x-“,eth->eh_source_mac[j]);}printf(“%.2x\n“,eth->eh_source_mac[5]);}}return;}/*************************************************將網(wǎng)卡設(shè)置為混雜模式,接收全部流過的數(shù)據(jù)報************************************************/DWORDWINAPIsniff(LPVOIDno){char recvbuf[1024*250];//設(shè)置網(wǎng)卡為混雜模式失敗if(PacketSetHwFilter(lpadapter,NDIS_PACKET_TYPE_PROMISCUOUS)==FALSE){printf(“Warning:Unabletosettheadaptertopromiscuousmode\n“);}//500*1024失敗,返回錯誤代碼if(PacketSetBuff(lpadapter,500*1024)==FALSE){printf(“PacketSetBuffError:%d\n“,GetLastError);return -1;}//設(shè)置接收一個數(shù)據(jù)報后等待的時間為1毫秒失敗if(PacketSetReadTimeout(lpadapter,1)==FALSE){printf(“Warning:Unabletosetthetimeout\n“);}//接收PACKET指針失敗if((lppacketr=PacketAllocatePacket)==FALSE){printf(“PacketAllocatePacketreceiveError!“);return -1;}//初始化一個_PACKET構(gòu)造PacketInitPacket(lppacketr,(char*)recvbuf,sizeof(recvbuf));//NPF解析函數(shù)while(!kbhit){if(PacketReceivePacket(lpadapter,lppacketr,TRUE)==FALSE){if(GetLastError==6)return0;printf(“PacketReceivePacketError:%d\n“,GetLastError);return-1;}receivedata(lppacketr);}return0;}/***********************************************ARPRequest數(shù)據(jù)報,懇求獲得目的ipmac地址***********************************************/DWORDWINAPItransmit(LPVOIDno){int i;char sendbuf[1024]; //發(fā)送緩存ethernet_head eth;arpHead arp;/****************************************************macip地址,以本地主機mac地址作為源地址,*以物理播送地址作為物理幀目的地址,*ARP0****************************************************/for(i=0;i<6;i++){eth.eh_dest_mac[i] =0xff;arp.arp_dest_addr[i]=0x00;}memcpy(eth.eh_source_mac,mymac,6);eth.eh_type=htons(ETH_ARP);arp.arp_hardwaretype=htons(ARP_HARDWARE); 1616位的網(wǎng)絡(luò)字節(jié)挨次arp.arp_protocoltype=htons(ETH_IP); //0x0800arp.arp_har_len=6;arp.arp_pro_len=4;arp.arp_option=htons(ARP_REQUEST); //1arp.arp_sour_ip=htonl(myip); //將本機ip地址作為源ip地3232位的網(wǎng)絡(luò)字節(jié)挨次memcpy(arp.arp_sour_addr,mymac,6); //本機mac地址作為源mac地址arp.arp_dest_ip=htonl((myip&0xffffff00)+1+(num++)); //本地主機IP與子網(wǎng)掩碼“與”運算得到網(wǎng)關(guān)IPmemset(sendbuf,0,sizeof(sendbuf)); //初始化發(fā)送緩存memcpy(sendbuf,e,sizeof(eth)); //把eth放入發(fā)送緩存memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp)); //arp放入發(fā)送緩存//初始化一個_PACKET構(gòu)造PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));//發(fā)送數(shù)據(jù)報,不成功時退出if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE){printf(“PacketSendPacketintransmitError:&d\n“,GetLastError);return-1;}return0;}/****************************************************************主函數(shù):首先獲得本地主機網(wǎng)卡數(shù)量,如有多塊網(wǎng)卡由用戶翻開指定網(wǎng)卡*調(diào)用函數(shù)發(fā)送和解析ARP數(shù)據(jù)報****************************************************************/intmain(intargc,char*argv[]){HANDLEsthread,rthread;DWORDthreadsid,threadrid;unsignedcharadaptername[8192];unsignedchar*name1,*name2;unsignedlongadapterlength;struct NetTypentype;struct bpf_statstat;struct sockaddr_insin;struct npf_if_addripbuff;intadapternum=0;//0intopen;//標識翻開第幾塊網(wǎng)卡intopti=1;intk;longnpflen;system(“cls.exe“); //清屏start;adapterlength=sizeof(adaptername);/**********************************************************獲得本地主機網(wǎng)卡列表和描述,*將返回的本地主機中安裝的網(wǎng)卡的名字放在緩沖區(qū)adaptername中**********************************************************/if(PacketGetAdapterNames((char*)adaptername,&adapterlength)==FALSE){printf(“PacketGetAdapterNamesError:%d\n“,GetLastError);return-1;}name1=adaptername;name2=adaptername;k=0;//計算網(wǎng)卡個數(shù)while((*name1!=”\0”)||(*(name1-1)!=”\0”)){if(*name1==”\0”){memcpy(adapterlist[k],name2,(name1-name2)*2);name2=name1+1;k++;}name1++;}//將網(wǎng)卡名稱存入adapterlist,分別輸出網(wǎng)卡名稱adapternum=k;printf(“\n[本機網(wǎng)卡列表:]\n“);for(k=0;k<ADAPTERNUM;K++)-printf(?%d>%s\n“,k+1,adapterlist[k]);//翻開指定的網(wǎng)卡do{printf(“\n請選擇要翻開的網(wǎng)卡號:“);scanf(“%d“,&open);if(open>=1&&open<=adapternum)break;}while(open<1||open>adapternum);lpadapter=PacketOpenAdapter(adapterlist[open-1]);//網(wǎng)卡無法翻開時,出示錯誤信息:if(!lpadapter||(lpadapter->hFile==INVALID_HANDLE_VALUE)){printf(“PacketOpenAdapterError:%d\n“,GetLastError);return-1;}//輸出指定網(wǎng)卡的MAC類型if(PacketGetNetType(lpadapter,&ntype)){printf(“\n\n******本地主機信息******\n\n“);printf(“[連接類型: ]\t%d\t\t\n“,ntype.LinkType);printf(“[連接速度: ]\t%db/s\n“,ntype.LinkSpeed);}//輸出指定網(wǎng)卡的相關(guān)信息npflen=sizeof(ipbuff);if(PacketGetNetInfoEx(adapterlist[open-1],&ipbuff,&npflen)){sin=*(structsockaddr_in*)&(ipbuff.Broadcast);printf(“[播送地址: ]\t%.16s\t\n“,inet_ntoa(sin.sin_addr));sin=*(structsockaddr_in*)&(ipbuff.SubnetMask);printf(“[子網(wǎng)掩碼: ]\t%.16s\n“,inet_ntoa(sin.sin_addr));sin=*(structsockaddr_in*)&(ipbuff.IPAddress);printf(“[本機IP地址:]\t%.16s\t\n\n\n“,inet_ntoa(sin.sin_addr));myip=ntohl(sin.sin_addr.s_addr); //本機IP地址}else{}
printf(“\nNotgetenoughdata\n“);PacketFreePacket(lppackets);PacketCloseAdapter(lpadapter);return-1;if((lppackets=PacketAllocatePacket)==FALSE){printf(“PacketAll
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度醫(yī)療機構(gòu)科室承包項目合同書4篇
- 買賣碎石合同協(xié)議書(2024版)
- 2025年度特色餐飲廚房承包經(jīng)營合同范本4篇
- 二零二五年度智能櫥柜系統(tǒng)研發(fā)與應(yīng)用合同3篇
- 2025年科技園區(qū)租賃與科技成果轉(zhuǎn)化承包合同范本3篇
- 二零二五年度航空航天器維修服務(wù)合同書3篇
- 二零二五年度車輛租賃與維修保養(yǎng)一體化服務(wù)合同8篇
- 2025標準苗木采購合同
- 2025年度鋼構(gòu)廠房項目安全文明施工合同范本2篇
- 2025年食堂勞務(wù)外包合同:食品安全與營養(yǎng)健康保障協(xié)議3篇
- 2025年上半年長沙市公安局招考警務(wù)輔助人員(500名)易考易錯模擬試題(共500題)試卷后附參考答案
- 2025河北邯鄲世紀建設(shè)投資集團招聘專業(yè)技術(shù)人才30人高頻重點提升(共500題)附帶答案詳解
- 重大事故隱患判定標準與相關(guān)事故案例培訓課件
- 2024年度節(jié)后復(fù)工建筑施工安全培訓交底
- 高強度間歇訓練(HIIT)對代謝健康的長期影響
- ICU患者導管留置登記表
- 中建商務(wù)工作指南手冊
- 耳鼻咽喉:頭頸外科疾病診斷流程與冶療策略
- 貴州省2023年中考英語真題
- 個人借條電子版模板
- 中國思想史 馬工程329P
評論
0/150
提交評論