黎江超計算機網(wǎng)絡課設—解析ARP數(shù)據(jù)包_第1頁
黎江超計算機網(wǎng)絡課設—解析ARP數(shù)據(jù)包_第2頁
黎江超計算機網(wǎng)絡課設—解析ARP數(shù)據(jù)包_第3頁
黎江超計算機網(wǎng)絡課設—解析ARP數(shù)據(jù)包_第4頁
黎江超計算機網(wǎng)絡課設—解析ARP數(shù)據(jù)包_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上南昌航空大學信息工程學院課程設計課程設計題目:解析ARP數(shù)據(jù)包計劃學時:2周所屬課程名稱:計算機網(wǎng)絡課程設計開設時間: 2011學年第一學期 授課班級: 網(wǎng)絡工程2班指導教師:周之平學生姓名:黎江超學 號: 一,課程設計目的: 本課程設計的目的是對網(wǎng)絡上的ARP數(shù)據(jù)包進行解析,從而熟悉ARP數(shù)據(jù)包的結(jié)構(gòu),對ARP協(xié)議有更好的理解和認識。二,課程設計要求: 通過編制程序,獲取網(wǎng)絡中的ARP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,將結(jié)果顯示在標準輸出上,并同時寫入日志文件。程序的具體要求如下所示:1,以命令行的形式運行,如下所示:arpparse logfile其中,arpparse為

2、程序名;為日志文件名。,程序輸出內(nèi)容如下所示:源地址 源地址 目的地址 操作時間各部分的說明如下所示:編號 :捕捉到的包的序號源IP地址:輸出ARP消息格式中的源IP地址字段源MAC地址:輸出ARP消息格式中的源物理地址字段目的IP地址:輸出ARP消息格式中的目的IP地址字段。目的MAC地址:輸出ARP消息格式中的目的物理地址字段操作:輸出ARP消息格式中的操作字段,若為ARP請求,則為1,若為ARP應答,則為2,時間:捕捉到該ARP數(shù)據(jù)包的時間3,當程序接收到鍵盤輸入Ctrl+C時字段三,相關(guān)知識a) ARP數(shù)據(jù)報的消息格式網(wǎng)絡上的每臺主機或設備都有一個或多個IP地址。IP地址是網(wǎng)絡層的地址

3、,在網(wǎng)絡層,數(shù)據(jù)被組裝成IP包。但是發(fā)送IP包需要物理設備的支持(通常是Ethernet設備,在本課程設計中我們指定為Ethernet設備),即發(fā)送端必須知道目的物理地址才能將IP包發(fā)送出去,所以需要一種將IP地址映射為物理地址的機制。ARP協(xié)議就是用來完成這個任務的。ARP協(xié)議能夠在同一個物理網(wǎng)絡中,在給定目的主機或設備的IP地址的條件下,得到目的主機或設備的物理地址。ARP協(xié)議的數(shù)據(jù)包格式如圖所示: 0 8 16 24 31(位) 硬件類型 協(xié)議類型物理地址長度協(xié)議地址長度 操作 源物理地址(八位組03) 源物理地址(八位組45) 源IP地址(八位組01) 源IP地址(八位組23) 目的物

4、理地址(八位組01) 目的物理地址(八位組25) 目的IP地址(八位組03)ARP數(shù)據(jù)包的消息格式下面對數(shù)據(jù)包的各個部分進行說明l 硬件類型:指定硬件接口類型。例如,值為1表示Ethernetl 協(xié)議類型:指定發(fā)送方支持的上層協(xié)議的類型l 物理地址長度:指定物理(硬件)地址的長度l 協(xié)議地址長度:網(wǎng)絡層協(xié)議的地址長度。若為IP協(xié)議,其值為4l 操作:指定ARP的操作類型,例如,1表示ARP請求,2表示ARP應答l 源物理地址:指定發(fā)送方的IP地址l 目的物理地址:指定目的物理地址。l 目的IP地址:指定目的IP地址ARP分組必須在數(shù)據(jù)鏈路層中被封裝成偵,才能發(fā)送出去封裝形式如圖所示ARP消息幀

5、頭部 幀數(shù)據(jù) 將ARP數(shù)據(jù)包封裝成一個幀b)ARP協(xié)議的工作流程。1) 在發(fā)送一個ARP分組之前,源主機首先根據(jù)目的IP地址,在本地ARP高速緩存表中查找與之對應的目的物理地址。如果找到對應的物理地址,就不用進行地址解析,否則需要進行地址解析。2) 實現(xiàn)地址解析的第一步是產(chǎn)生ARP請求分組。在相應的字段寫入本地主機的源物理地址、源IP地址,在目的物理地址字段寫入0,并在操作字段寫入1。3) 將ARP分組發(fā)送到本地的數(shù)據(jù)鏈路層,并封裝成幀。以源物理地址作為源地址,以物理廣播地址(FF-FF-FF-FF-FF-FF)作為目的地址,通過物理層發(fā)送出去。4) 由于采用了廣播地址,因此網(wǎng)段內(nèi)所有的主機或

6、設備都能接受到該幀。除了目的主機外,所有接受到該分組的主機和設備都會丟棄該分組,因為目的主機能夠識別ARP消息中的目的IP地址。5) 目的主機發(fā)送ARP應答分組。在ARP應答分組中,以請求分組中源物理地址、源IP地址作為其目的物理地址、目的IP地址,并將目的主機自身的物理地址、IP地址填入應答分組的源物理地址、源IP地址字段,并在操作字段中寫入2。該分組通過數(shù)據(jù)鏈路層以點對點的方式發(fā)送出去(因為現(xiàn)在目的方已經(jīng)知道雙方的物理地址)。6) 源結(jié)點接收到ARP應答分組,知道對應于目的IP地址的目的物理地址,將它作為一條新記錄加入到ARP高速緩存表。圖1 ARP工作原理7) 源結(jié)點將有完整源IP地址、

7、源物理地址、目的IP地址、目的物理地址的信息和數(shù)據(jù)作為一個發(fā)送分組,傳送給它的數(shù)據(jù)鏈路層并封裝成楨,然后以點對點的方式發(fā)送到目的主機。四,課程設計分析課程設計中的重點及難點1) 本課設我小組采用java語言編寫,JAVA語言雖然在TCP/UDP傳輸方面給予了良好的定義,但對于網(wǎng)絡層以下的控制,卻是無能為力的。JPCAP擴展包彌補了這一點。JPCAP實際上并非一個真正去實現(xiàn)對數(shù)據(jù)鏈路層的控制,而是一個中間件,JPCAP調(diào)用wincap/libpcap,而給JAVA語言提供一個公共的接口,從而實現(xiàn)了平臺無關(guān)性。在官方網(wǎng)站上聲明,JPCAP支持FreeBSD 3.x, Linux RedHat 6.

8、1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP等系統(tǒng)。:l 輸出網(wǎng)卡設備列表。l 選擇網(wǎng)卡并打開。l 捕獲數(shù)據(jù)包時,可能需要設置過濾器。l 捕獲數(shù)據(jù)包或者發(fā)送數(shù)據(jù)包。2) 在程序設計過程中需要注意網(wǎng)絡主機字節(jié)順序的轉(zhuǎn)化。由于不同的計算機系統(tǒng)所采用的數(shù)據(jù)表示方式不同,對于2B或4B的數(shù)據(jù),有的采用低字節(jié)地址存放數(shù)據(jù)的高權(quán)值位,而有的卻以低地址字節(jié)存放數(shù)據(jù)低權(quán)位值,在網(wǎng)絡的數(shù)據(jù)傳輸中,我們應該統(tǒng)一表示,所以我們在捕獲數(shù)據(jù)包后,應將數(shù)據(jù)包頭部的表示長度或類型的數(shù)據(jù)轉(zhuǎn)換成本地機的表達形式??梢岳煤瘮?shù)valuesOf()將網(wǎng)絡字節(jié)序轉(zhuǎn)換

9、為主機字節(jié)序。3) 選擇網(wǎng)卡并打開時,注意選擇可用的網(wǎng)卡。4) 第一種是通過回調(diào)函數(shù)的機制,另一種是利用JpcapCaptor實例的getPacket()的方法,一個數(shù)據(jù)包一個數(shù)據(jù)包的接收。第一種是類似與事件觸發(fā)的機制。為了了解ARP包的具體解析過程我們采用回調(diào)函數(shù)機制,首先,你要自定義一個類,該類必順實現(xiàn)PacketReceiver接口,(在事件處理機制雷同)。PacketReciver接口只聲名了receivePacket(Packet packet) 方法,所以你要在你自義的類中實現(xiàn)該方法,方法體里放置你處理接收到的數(shù)據(jù)包的代碼,得到的數(shù)據(jù)包為型參packet.  &

10、#160;  接著,你就可以通過調(diào)用JpcapCaptor類的實例的processPacket()或loopPacket()來開始接收數(shù)據(jù)包。開始接收數(shù)據(jù)包后,當接收到數(shù)據(jù)包時就會回調(diào)實現(xiàn)PacketReceiver接口的類的receivePacket的方法,使理接收到的數(shù)據(jù)包。1. 參考算法1) 取得當前網(wǎng)卡設備列表。2) 選擇Ethernet網(wǎng)卡并打開,注意判斷所選網(wǎng)卡是否為實際存在的可用網(wǎng)卡。3) 設置過濾器,此處的過濾器正則表達式為“arp”或者“ether protoarp”。4) 捕獲數(shù)據(jù)包并進行處理(包括輸出各IP地址,物理地址,操作類型以及時間)。由于要記錄日志文件,

11、為了便于輸出流參數(shù),建議采用Vector向量存儲方式。流程圖如圖所示:開始獲取網(wǎng)卡列表選取Ethernet網(wǎng)卡打開網(wǎng)卡(混雜模式)編譯設置過濾器捕獲ARP包并將其相應內(nèi)容輸出五,自己負責的功能核心代碼,/向文本區(qū)寫入捕獲到的ARP包的信息并加入自動控制程序class Receiver implements PacketReceiver public void receivePacket(Packet packet) /匿名類,每捕獲一個包就調(diào)用此方法 ,打開數(shù)據(jù)包包并輸出 Vector Data=new Vector(); String s6="" String s7=&q

12、uot;" String s8="" String s9="" String s10="" String s11="" /添加捕捉到的包序號 Data.add(Number); /自動控制判斷行1 if(jcb1.isSelected() itemselfClear=Integer.valueOf(baoNumber.getText(); if(Number%itemselfClear=0) jta.setText(null); /自動控制判斷行2 if(jcb2.isSelected() itemsel

13、fSleep=Integer.valueOf(baogeshu.getText(); SleepTime=Integer.valueOf(miaoshu.getText(); if(Number%itemselfSleep=0) try Thread.sleep(SleepTime); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace(); Number+; Data.add(ARPPacket) packet).getSenderProtocolAddress(); /源ip地址

14、 Data.add(ARPPacket) packet).getSenderHardwareAddress(); /源mac地址 Data.add(ARPPacket) packet).getTargetProtocolAddress();/目的ip地址 Data.add(ARPPacket) packet).getTargetHardwareAddress();/目的mac地址 if(Short.valueOf(ARPPacket.ARP_REQUEST).equals(ARPPacket) packet).operation) Data.add("請求"); else

15、if(Short.valueOf(ARPPacket.ARP_REPLY).equals(ARPPacket) packet).operation) Data.add("應答"); if(ARPcache_ip.size()=0) ARPcache_ip.add(ARPPacket) packet).getSenderProtocolAddress(); /源ip地址 ARPcache_mac.add(ARPPacket) packet).getSenderHardwareAddress(); /源mac地址 else for(int i=0;i<ARPcache_i

16、p.size();i+) if(String.valueOf(Data.get(0).equals(String.valueOf(ARPcache_ip.get(i)/判斷ip是否存在緩存表中 /判斷mac地址是否相同 if(!String.valueOf(Data.get(1).equals(String.valueOf(ARPcache_mac.get(i) isDeceive=true; /存在arp欺騙 break; elseARPcache_ip.add(ARPPacket) packet).getSenderProtocolAddress(); /源ip地址ARPcache_mac

17、.add(ARPPacket) packet).getSenderHardwareAddress(); /源mac地址 break; /顯示時間 Date nowTime=new Date(); SimpleDateFormat format=new SimpleDateFormat("HH:mm:ss"); Data.add(format.format(nowTime); DataOut.add(Data); / 顯示信息 String s0=""+Data.get(1); String s1=""+Data.get(2); Str

18、ing s2=""+Data.get(3); String s3=""+Data.get(4); String s4=""+Data.get(5); String s5=""+Data.get(6); if(Number<10) s11=" " else if(Number>9)s11=" " for(int i=0;i<16-s0.length();i+)s6=s6+" " for(int i=0;i<25-s1.length()

19、;i+)s7=s7+" " for(int i=0;i<16-s2.length();i+)s8=s8+" " for(int i=0;i<30-s0.length();i+)s9=s9+" " for(int i=0;i<22;i+)s10=s10+" " s6=s6+" " s8=s8+" " /輸出數(shù)據(jù) if(!isDeceive) /正常輸出 insert(" "+String.valueOf(Number),Color.blac

20、k); insert(s11+s0,Color.black); insert( s6+s1,Color.black);insert(s7+s2,Color.black);insert(s8+s3,Color.black);insert(s9+s4,Color.black);insert(s10+s5+"rn",Color.black); else if(isDeceive) /出現(xiàn)arp欺騙時,警告輸出 insert(" "+String.valueOf(Number),Color.red); insert(s11+s0,Color.red); inse

21、rt( s6+s1,Color.red); insert(s7+s2,Color.red); insert(s8+s3,Color.red); insert(s9+s4,Color.red); insert(s10+s5+"rn",Color.red); isDeceive=false; /插入數(shù)據(jù)的函數(shù) public void insert(String str,Color col) Document doc=jta.getDocument(); /獲得JTextPane的Document SimpleAttributeSet attrSet = new SimpleAt

22、tributeSet(); /定義字符樣式 StyleConstants.setForeground(attrSet,col); /設置顏色顏色 try doc.insertString(doc.getLength(), str, attrSet); catch (BadLocationException e) e.printStackTrace(); 六,程序運行效果如下整體功能如下圖所示輸出日志文件效果如下查看日志文件清空后的結(jié)果通過檢測ip沖突檢測ARP欺騙七,功能擴充1,以圖形化界面設計,改善程序運行時的視覺效果,同時圖形化界面操作簡單,界面友好,也方便非計算機專業(yè)人員的使用。2,通過

23、檢測IP沖突,可以檢測到ARP欺騙。3,通過增加自動控制功能可以讓程序休息一段時間后繼續(xù)工作已經(jīng)自動清屏功能八,實驗中遇到的問題1、本程序是在命令行模式下運行,只有C+版本的沒有java版本,并且書本上java這方面的知識可以確定為零,我們小組通過上網(wǎng)查資料和其他書本上的相應知識找到了下手的地方,且設計了美觀的界面。2、程序點兩次捕獲就會異常退出,彈出一個消息框完美解決了這個問題;3、程序布局很困難,java界面編程不行,導致界面設計話了很大一部分時間。4、編譯環(huán)境配置比較麻煩,雖然JPCAP函數(shù)封裝性好,效率高,使用方便,但是,使用前的準備工作在不知如何配置的情況下要花費大量時間,介紹一下J

24、PCAP的配置。一、首先必須安裝Winpcap,首要條件。二、安裝最新版本jpcap 配置Jpcap路徑:這一步也是最重要的一步。具體路徑為,把Jpcap文件夾下lib文件夾里的Jpcap.dll復制到"C:Program FilesJavajre1.6.0_07bin"文件夾里面(復制到你機器JRE文件夾放到bin文件夾里面就可以了,其中JRE的版本一定要與Eclipse配置的版本一致),再把Jpcap文件夾下lib文件夾里的Jpcap.jar復制到"C:Program FilesJavajre1.6.0_07libext"文件夾里面(復制到你機器JRE文件夾->lib->到ext文件夾里面就可以了), 配置Eclipse的JRE環(huán)境,(一定需要),選Window->preferences->Java->Installed JREs,在Installed JREs選擇框中選擇相應的JRE版本,點Edit,選擇Add External JARs,選擇的Jpcap.jar包("C:Program FilesJavajre1.6.0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論