當前位置:首頁 » 編程軟體 » 編程數據包

編程數據包

發布時間: 2022-08-06 18:25:39

A. 如何編程實現截取數據包

肯定要用C/C++。但現成的軟體還是不少的。SNIFFER。
截取分2種,一種是相當於並聯式的竊聽式,這種要求技術很高,往往用來得到別人的密碼。
還有一種是實驗用截取,目的是獲知別的軟體的通信方式,比如想獲知郵件、IE等通信時倒底用了什麼命令,以便以後自己也編出類似軟體。這就需要相當於串聯式的截取。
我們應該集中精力發展後者。

B. C#編程寫上位機要接受數據包判斷數據包是否正確及收完的問題

說個題外話,先說你的數據包協議定義的不夠科學,如能更改協議,建議如下:數據包的數據長度不固定的話,最好在固定開頭005後面的位元組定義為數據的長度,數據後面+校驗+結尾$。
如不能改協議,
提供一個思路:
如果是串口數據,每次把接收緩沖區的數據全部讀取(按位元組接收),假設放到buffA()里,定義完整數據包的存放數組buffB()
對於程序首次運行,先找到開頭005,然後從開頭005的後面開始處理數據,假設buffA(3)裡面存放的是005,那麼從buffA(4)開始循環判斷是否為結尾$,如果不為$,則把buffA(4)開始的數據賦值給buffB(),直到遇見$,那麼buffB()數組就是完整的數據包;
如果本次接收的數據buffA()裡面沒有找到結尾$,那麼,下次接收的時候把緩沖區的數據讀取到數組buffA()中,直接從buffA(0)開始循環判斷是否為結尾$,如果不為$,則把buffA(4)開始的數據賦值給buffB(),直到遇見$,那麼buffB()數組就是完整的數據包
有問題追問

C. TCP數據包是什麼

概念性的東西就是以下內容:簡單的來說,就是一種傳輸協議發出的一段數據源傳輸控制協議(Transmission Control Protocol, TCP)
TCP協議主為了在主機間實現高可靠性的包交換傳輸協議。本文將描述協議標准和實現的一些方法。因為計算機網路在現代社會中已經是不可缺少的了,TCP協議主要在網路不可靠的時候完成通信,對軍方可能特別有用,但是對於政府和商用部門也適用。TCP是面向連接的端到端的可靠協議。它支持多種網路應用程序。TCP對下層服務沒有多少要求,它假定下層只能提供不可靠的數據報服務,它可以在多種硬體構成的網路上運行。下面的圖是TCP在層次式結構中的位置,它的下層是IP協議,TCP可以根據IP協議提供的服務傳送大小不定的數據,IP協議負責對數據進行分段,重組,在多種網路中傳送。

TCP的上面就是應用程序,下面是IP協議,上層介麵包括一系列類似於操作系統中斷的調用。對於上層應用程序來說,TCP應該能夠非同步傳送數據。下層介面我們假定為IP協議介面。為了在並不可靠的網路上實現面向連接的可靠的傳送數據,TCP必須解決可靠性,流量控制的問題,必須能夠為上層應用程序提供多個介面,同時為多個應用程序提供數據,同時TCP必須解決連接問題,這樣TCP才能稱得上是面向連接的,最後,TCP也必須能夠解決通信安全性的問題。

網路環境包括由網關(或其它設備)連接的網路,網路可以是區域網也可以是一些城域網或廣域網,但無論它們是什麼,它們必須是基於包交換的。主機上不同的協議有不同的埠號,一對進程通過這個埠號進行通信。這個通信不包括計算機內的I/O操作,只包括在網路上進行的操作。網路上的計算機被看作包傳送的源和目的結點。特別應該注意的是:計算機中的不同進程可能同時進行通信,這時它們會用埠號進行區別,不會把發向A進程的數據由B進程接收的。

進程為了傳送數據會調用TCP,將數據和相應的參數傳送給TCP,於是TCP會將數據傳送到目的TCP那裡,當然這是通過將TCP包打包在IP包內在網路上傳送達到的。接收方TCP在接收到數據後會通信上層應用程序,TCP會保證接收數據順序的正確性。雖然下層協議可能不會保證順序是正確的。這里需要說明的是網關在接收到這個包後,會將包解開,看看是不是已經到目的地了,如果沒有到,應該走什麼路由達到目的地,在決定後,網關會根據下一個網路內的協議情況再次將TCP包打包傳送,如果需要,還要把這個包再次分成幾段再傳送。這個落地檢查的過程是一個耗時的過程。從上面,我們可以看出TCP傳送的基本過程,當然具體過程可能要復雜得多。

在實現TCP的主機上,TCP可以被看成是一個模塊,和文件系統區別不大,TCP也可以調用一些操作系統的功能,TCP不直接和網路打交道,控制網路的任務由專門的設備驅動模塊完成。TCP只是調用IP介面,IP向TCP提供所有TCP需要的服務。通過下圖我們可以更清楚地看到TCP協議的結構。

上面已經說過了,TCP連接是可靠的,而且保證了傳送數據包的順序,保證順序是用一個序號來保證的。響應包內也包括一個序列號,表示接收方准備好這個序號的包。在TCP傳送一個數據包時,它同時把這個數據包放入重發隊列中,同時啟動記數器,如果收到了關於這個包的確認信息,將此包從隊列中刪除,如果計時超時則需要重新發送此包。請注意,從TCP返回的確認信息並不保證最終接收者接收到數據,這個責任由接收方負責。

每個用於傳送TCP的通道都有一個埠標記,因為這個標記是由每個TCP終端確定的,因此TCP可能不唯一,為了保證這個數值的唯一,要使用網路地址和埠號的組合達到唯一標識的目的,我們稱這個為了套接字(Socket),一個連接由連接兩端的套接字標識,本地的套接字可能和不同的外部套接字通信,這種通信是全雙工的。

通過向本地埠發送OPEN命令及外部套接字參數建立連接,TCP返回一個標記這個連接的名稱,以後如果用戶需要使用這個名稱標記這個連接。為了保存這個連接的信息,我們假設有一個稱為傳輸控制塊(Transmission Control Block,TCB)的東西來保存。OPEN命令還指定這個連接的建立是主動請求還是被動等待請求。下面我們要涉及具體的功能了,TCP段以internet數據報的形式傳送。IP包頭傳送不同的信息域,包括源地址和目的地址。TCP頭跟在internet包頭後面,提供了一些專用於TCP協議的信息。下圖是TCP包頭格式圖:

源埠:16位;

目的埠:16位

序列碼:32位,當SYN出現,序列碼實際上是初始序列碼(ISN),而第一個數據位元組是ISN+1;

確認碼:32位,如果設置了ACK控制位,這個值表示一個准備接收的包的序列碼;

數據偏移量:4位,指示何處數據開始;

保留:6位,這些位必須是0;

控制位:6位;

窗口:16位;

校驗位:16位;

優先指針:16位,指向後面是優先數據的位元組;

選項:長度不定;但長度必須以位元組記;選項的具體內容我們結合具體命令來看;

填充:不定長,填充的內容必須為0,它是為了保證包頭的結合和數據的開始處偏移量能夠被32整除;



我們前面已經說過有一個TCB的東西了,TCB里有存儲了包括發送方,接收方的套接字,用戶的發送和接收的緩沖區指針等變數。除了這些還有一些變數和發送接收序列號有關:

發送序列變數

SND.UNA - 發送未確認

SND.NXT - 發送下一個

SND.WND - 發送窗口

SND.UP - 發送優先指針

SND.WL1 - 用於最後窗口更新的段序列號

SND.WL2 - 用於最後窗口更新的段確認號

ISS - 初始發送序列號



接收序列號

RCV.NXT - 接收下一個

RCV.WND - 接收下一個

RCV.UP - 接收優先指針

IRS - 初始接收序列號

下圖會幫助您了解發送序列變數間的關系:

當前段變數

SEG.SEQ - 段序列號

SEG.ACK - 段確認標記

SEG.LEN - 段長

SEG.WND - 段窗口

SEG.UP - 段緊急指針

SEG.PRC - 段優先順序

連接進程是通過一系列狀態表示的,這些狀態有:LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT和 CLOSED。CLOSED表示沒有連接,各個狀態的意義如下:

LISTEN - 偵聽來自遠方TCP埠的連接請求;

SYN-SENT - 在發送連接請求後等待匹配的連接請求;

SYN-RECEIVED - 在收到和發送一個連接請求後等待對連接請求的確認;

ESTABLISHED - 代表一個打開的連接,數據可以傳送給用戶;

FIN-WAIT-1 - 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認;

FIN-WAIT-2 - 從遠程TCP等待連接中斷請求;

CLOSE-WAIT - 等待從本地用戶發來的連接中斷請求;

CLOSING - 等待遠程TCP對連接中斷的確認;

LAST-ACK - 等待原來發向遠程TCP的連接中斷請求的確認;

TIME-WAIT - 等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;

CLOSED - 沒有任何連接狀態;

TCP連接過程是狀態的轉換,促使發生狀態轉換的是用戶調用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS;傳送過來的數據段,特別那些包括以下標記的數據段SYN,ACK,RST和FIN;還有超時,上面所說的都會時TCP狀態發生變化。



下面的圖表示了TCP狀態的轉換,但這圖中沒有包括錯誤的情況和錯誤處理,不要把這幅圖看成是總說明了。



3.3. 序列號

請注意,我們在TCP連接中發送的位元組都有一個序列號。因為編了號,所以可以確認它們的收到。對序列號的確認是累積性的,也就是說,如果用戶收到對X的確認信息,這表示在X以前的數據(不包括X)都收到了。在每個段中位元組是這樣安排的:第一個位元組在包頭後面,按這個順序排列。我們需要認記實際的序列空間是有限的,雖然很大,但是還是有限的,它的范圍是0到2的32次方減1。我想熟悉編程的一定知道為什麼要在計算兩個段是不是相繼的時候要使用2的32次方為模了。TCP必須進行的序列號比較操作種類包括以下幾種:

(a) 決定一些發送了的但未確認的序列號;

(b) 決定所有的序列號都已經收到了;

(c) 決定下一個段中應該包括的序列號。

對於發送的數據TCP要接收確認,處理確認時必須進行下面的比較操作:

SND.UNA = 最老的確認了的序列號;

SND.NXT = 下一個要發送的序列號;

SEG.ACK = 接收TCP的確認,接收TCP期待的下一個序列號;

SEG.SEQ = 一個數據段的第一個序列號;

SEG.LEN = 數據段中包括的位元組數;

SEG.SEQ+SEG.LEN-1 = 數據段的最後一個序列號。

請注意下面的關系:

SND.UNA < SEG.ACK =< SND.NXT

如果一個數據段的序列號小於等於確認號的值,那麼整個數據段就被確認了。而在接收數據時下面的比較操作是必須的:

RCV.NXT = 期待的序列號和接收窗口的最低沿;

RCV.NXT+RCV.WND-1 = 最後一個序列號和接收窗口的最高沿;

SEG.SEQ = 接收到的第一個序列號;

SEG.SEQ+SEG.LEN-1 = 接收到的最後一個序列號;



上面幾個量有如下關系:

RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND 或 RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

測試的第一部分是檢查數據段的開始部分是否在接收窗口中,第二部分是檢查數據段的結束部分是否也在接收窗口內;上面兩個檢查通過任何一個就說明它包括窗口要求的數據。實際中的情況會更復雜一些,因為有零窗口和零數據段長,因此我們有下面四種情況:

段長度
接收窗口
測試

0
0
SEG.SEQ = RCV.NXT

0
>0
RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND

>0
0
不可接受

>0
>0
RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND或RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

請注意接收窗口的大小可以為零,在窗口為零時它只用來接收ACK信息,因此對於一個TCP來說,它可以使用零大小窗口在發送數據的同時接收數據。即使接收窗口的大小為零,TCP必須處理所有接收到信息的RST和URG域。

我們也應用計數的方式保護了一些特定的控制信息,這是通過隱式地使用一些控制標記使數據段能夠可靠地重新發送(或確認)為達到的。控制信息並不在段數據空間中傳送,因此,我們必須採用隱式指定序列號進行控制。SYN和FIN是需要保護的控制量,這兩個控制量也只在連接打開和關閉時使用。SYN被認為是在第一個實際數據之間的數據,而FIN是最後一個實際數據之後的數據。段長度(SEG.LEN)包括數據和序列號空間,如果出現了SYN,那麼SEG.SEQ是SYN的序列號。

初始序列號選擇

協議對於特定連接被重復使用沒有什麼限制。連接是由一對套接字定義的。新的連接實例被定義為連接的另一次恢復,這就帶來了問題:TCP如果確定多個數據段是從以前連接的另一次恢復中取得的呢?這個問題在連接迅速打開和關閉,或因為內存原因被關閉然後又迅速建立後顯示特別突出。

為了避免混亂,用戶必須避免因此恢復使用某一連接,而使序列號發生混亂。我們必須保證序列號的正確性,即使TCP失敗,根本不知道以前的序列號是什麼的情況下也要保證序列號的正確性。當新的連接被創建時,產生一個新的初始序列號(ISN)產生子,它用來選擇一個新的32位ISN。產生子和32位時鍾的低度位位元組相關,低位位元組的刷新頻率大概是4微秒,因此ISN的循環時間大概是4.55小時。因此我們把網路包的最長生存時間(MSL)小於4.55小時,因此我們可以認為ISN是唯一的。對於每個連接都有發送序列號和接收序列號,初始發送序列號(ISS)由發送TCP選擇,而初始接收序列號是在連接建立過程中產生的。

對於將要連接或初始化的連接,兩個TCP必須和對方的初始序列號同步。這通過交換一個控制位SYN和初始序列號完成。我們把帶有SYN的數據段稱為"SYNs"。同步的獲得過程這里就不重復了,每方必須發送自己的序列號並返回對對方序列號的確認。

1) A --> B SYN 本方序列號是X

2) A <-- B ACK 本方序列號被確認

3) A <-- B SYN 對方序列號是Y

4) A --> B ACK 確認對方序列號

上面的第2步和第3步可以合並,這時可以成為3階段,所以我們可以稱它為三消息握手。這個過程是必須的,因為序列號不和全局時鍾關聯,TCP也可以有不同的機制選擇ISN。接收到第一個SYN的接收方不可能知道這個數據段是不是被延時,除非它記住了在連接上使用的最近的序列號(這通常是不可能的),因此它必須要求發送者確認。

為了保證TCP獲得的確認是剛才發送的段產生的,而不是仍然在網路中的老數據段產生的,因此TCP必須在MSL時間之內保持沉默。在本文中,我們假設MSL=2小時,這是出於工程的需要,如果用戶覺得可以,他可以改變MSL。請注意如果TCP重新初始化,而內存中的序列號正在使用,不需要等待,但必須確認使用的序列號比當前使用的要大。

如果一台主機在未保留任何序列號的情況下失敗,那麼它應該在MSL時間之內不發出任何數據段。下面將會這一情況進行說明。TCP的實現可以不遵守這個規定,但是這會造成老數據被當成新數據接收,而新數據被當成老數據拒絕的情況。

每當數據段形成並進入輸出隊列,TCP會為它指定序列空間中的一個值。TCP中多復本檢測和序列演算法都依賴於這個地址空間,在對方發送或接收之前不會超過2的32次方個包存在於輸出隊列中。所有多餘的數據段都會被刪除。如果沒有這個規定,會出現多個數據段被指定同一個序列號的情況,會造成混亂。數據段中序列號的多少和數據段中的位元組數一樣多。

在通常情況下,TCP保留下一個要發送的序列號和還未確認的最老的序列號,不要在沒有確認的時候就再次使用,這樣會有些風險,也正是因為這樣的目的,所以序列空間很大。對於2M的網路,要4.5小時來耗盡序列空間,因為一個數據段可能的最大生存時間也不過十幾分之一秒,這就留下了足夠的空間;而在100M的網路上需要5.4分鍾,雖然少了點,但也可以了。

如果在實現TCP時沒有為保存序列號留下空間,那清除多餘的包可能就不能實現了,因此推薦這種類型的TCP實現最好在失敗後等待MSL時間,這樣保證多餘的包被刪除。這種情況有時候也可能會出現在保留序列號的TCP實現中。如果TCP在選擇一個另一個TCP連接正在使用的序列號時,這台主機突然失敗了,這就產生了問題。這個問題的實質在於主機不知道它失敗了多久,也不知道多餘的復本是不是還在網路中。

處理這種問題的方法是等待MSL時間,如果不這樣就要冒著對方錯誤接收數據的危險,要等待的時間也就稱為「沉默時間」。實現者可以讓用戶選擇是不是等待,但是無論用戶如何也不見得非要等待MSL時間。

3.4. 建立一個連接

建立連接應用的是三消息握手。如果雙方同時都發送SYN也沒有關系,雙方會發現這個SYN中沒有確認,於是就知道了這種情況,通常來說,應該發送一個"reset"段來解決這種情況。三消息握手減少了連接失敗的可能性。下面就是一個例子,在尖括弧是的就是數據段中的內容和標記。其它的就不多說了。

在第2行,TCP A發送SYN初始化序列號,表示它要使用序列號100;第3行中,TCP B給出確認,並且期待著A的帶有序列號101的數據段;第4行,TCP A給出確認,而在第5行,它也給出確認,並發送了一些數據,注意第4行的序列號與第5號的一樣,因為ACK信息不佔用序列號空間內的序列號。同時產生請求的情況如下圖所示,只復雜一點。

使用三消息握手的主要原因是為了防止使用過期的數據段。為了這個目的,必須引入新的控制消息,RESET。如果接收TCP處理非同步狀態,在接收到RESET後返回到LISTEN狀態。如果TCP處理下面幾種狀態ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT時,放棄連接並通過用戶。我們下面就詳細說明後一種情況。

通過上面的例子,我們可以看出TCP連接是如何從過期數據段的干擾下恢復的。請注意第4行和第5行中的RST(RESET信號)。

半開連接和其它非正常狀態

如果一方在未通過另一方的情況下關閉連接,或雙方雖然失敗而不同步的情況我們稱為半開連接狀態。在一方試圖發送數據時連接會自動RESET。然而這種情況畢竟屬於不正常情況。應該做出相應的處理。如果A處的連接已經關閉,B處並不知道。當B希望發送數據到A時,就會收到RESET信號,表示這個TCP連接有誤,要中止當前連接。

假設A和B兩個進程相互通信的時候A的TCP發生了失敗,A依靠操作系統支持TCP的存在,通常這種情況下會有恢復機制起作用,當TCP重新恢復的時候,A可能希望從恢復點開始工作。這樣A可能會試圖OPEN連接,然後在這個它認為還是打開的連接上傳送數據,這時A會從本地(也就是A的)TCP上獲得錯誤消息「未打開連接」。A的TCP將發送包括SYN的數據段。下面的例子將顯示這一過程:

上面這個例子中,A方收到的信息並沒有確認任何東西,這時候A發現出了問題,於是發送了RST控制信息。另一種情況是發生在A失敗,而B方仍然試圖發送數據時,下面的例子可以表示這種情況,請注意第2行中A對B發送來的信息不知所雲。

在下面的例子中,A方和B方進行的被動連接,它們都在等待SYN信息。過期的包傳送到B方使B回應了,而收到回應的A卻發現不對頭,傳送RST控制信息,B方返回被動LISTEN狀態。

現實中的情況太多了,我們列舉一些產生RST控制信息的規則如下:通常情況下,RST在收到的信息不是期待的信息時產生。如果在不能確定時不要輕易發送RST控制信息。下面有三類情況:

如果連接已經不存在,而發送來的消息又不是RST,那麼要返回RST。如果想拒絕對不存在的連接進行SYN,可以使用這種辦法。如果到達的信息有一個ACK域,返回的RST信息可以從ACK域中取得序列號,如果沒有這個域,就把RST的序列號設置為0,ACK域被設備為序列號和到達段長度之和。連接仍然處於CLOSE狀態。

如果連接處於非同步狀態(LISTEN,SYN-SENT,SYN-RECEIVED),而且收到的確認是對未發出包的確認或是接收到數據段的安全級別與不能連接要求的相一一致時,就發送RST。如果SYN未被確認時,而且收到的數據段的優先順序比要求的優先順序要高,那麼要麼提高本地優先順序(得事先徵得用戶和系統的許可)要麼發送RST;如果接收數據段的優先順序比要求的優先順序低,就算是匹配了,當然如果對方發現優先順序不對提高了優先順序,在下一個包中提高了優先順序,這就不算是匹配了。如果連接已經進入SYN,那麼接收到數據段的優先順序必須和本地優先順序一樣,否則發送RST。如果到達的信息有一個ACK域,返回的RST信息可以從ACK域中取得序列號,如果沒有這個域,就把RST的序列號設置為0,ACK域被設備為序列號和到達段長度之和。連接仍然處於與原來相同的狀態。

如果連接處於同步狀態(ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT),任何超出接收窗口的序列號的數據段都產生如下結果:發出一個空確認數據段,此段中包括當前發送序列號,另外還包括一個確認指出希望接收的下一個數據段的序列號,連接仍然保存在原來的狀態。如果因為安全級,優先順序之類的問題,那就發送RST信號然後進入CLOSED狀態。

D. 如何學習構建數據包(沒有編程基礎,但非常樂意從頭開始學習)

答案:誠實比起腐敗會給你贏得更多的好處。

E. 如何用java寫數據包

你好,java中的socket編程,要把數據最後轉成byte[]來進行通信,對於你這種情況,我認為你至少有兩種方法可行

1、在java中也整一個類對象,等效於你這里的struct,然後使用java中把Object轉換成byte[]的方法
2、把struct里的數據按照一定的格式存成字元串,然後再把字元串轉成byte[]

方法一可以參考下這個代碼:
public static byte[] convertToByteArray(Object obj) throws IOException{
ObjectOutputStream os = null;
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(5000);
os = new ObjectOutputStream(new BufferedOutputStream(byteStream));
os.flush();
os.writeObject(obj);
os.flush();
byte[] sendBuf = byteStream.toByteArray();
os.close();
return sendBuf;
}

F. tcp udp 協議編程,數據包大小通常設為多少最宜

如果區域網應用的話大一些比較好。
廣域網的話,需要自己測試調優了。大包如果發生丟包重試造成的損失會比較大,包小的話,開銷比較大。

G. 電腦記事本怎麼編程數據包

全是亂碼就放棄吧

H. 沒有APP數據包可以編程嗎

沒有APP數據包可以編程。
數據包DataPacke是指分塊的傳輸數據,它被用於早期的計算機通信網的文獻中,而目前則普遍使用分組一詞。

I. 編程實現對網路數據包進行解包、分包和包分析的過程

用網路執法官

首先我們了解一下網路執法官的原理:

網路執法官是一款網管軟體,可用於管理區域網,能禁止區域網任意機器連接網路。對於網管來說,這個功能自然很不錯,但如果區域網中有別人也使用該功能那就麻煩了。因為這樣輕則會導致別人無法上網,重則會導致整個區域網癱瘓。有什麼解決辦法呢?請您看下面的招數及其原理。

一、網路執法官簡介
我們可以在區域網中任意一台機器上運行網路執法官的主程序NetRobocop.exe,它可以穿透防火牆、實時監控、記錄整個區域網用戶上線情況,可限制各用戶上線時所用的IP、時段,並可將非法用戶踢下區域網。該軟體適用范圍為區域網內部,不能對網關或路由器外的機器進行監視或管理,適合區域網管理員使用。

在網路執法官中,要想限制某台機器上網,只要點擊"網卡"菜單中的"許可權",選擇指定的網卡號或在用戶列表中點擊該網卡所在行,從右鍵菜單中選擇"許可權 ",在彈出的對話框中即可限制該用戶的許可權。對於未登記網卡,可以這樣限定其上線:只要設定好所有已知用戶(登記)後,將網卡的默認許可權改為禁止上線即可阻止所有未知的網卡上線。使用這兩個功能就可限制用戶上網。其原理是通過ARP欺騙發給被攻擊的電腦一個假的網關IP地址對應的MAC,使其找不到網關真正的MAC地址,這樣就可以禁止其上網。

二、ARP欺騙的原理
網路執法官中利用的ARP欺騙使被攻擊的電腦無法上網,其原理就是使該電腦無法找到網關的MAC地址。那麼ARP欺騙到底是怎麼回事呢?
首先給大家說說什麼是ARP,ARP(Address Resolution Protocol)是地址解析協議,是一種將IP地址轉化成物理地址的協議。從IP地址到物理地址的映射有兩種方式:表格方式和非表格方式。
ARP具體說來就是將網路層(IP層,也就是相當於OSI的第三層)地址解析為數據連接層(MAC層,也就是相當於OSI的第二層)的MAC地址。
ARP原理:某機器A要向主機B發送報文,會查詢本地的ARP緩存表,找到B的IP地址對應的MAC地址後,就會進行數據傳輸。如果未找到,則廣播A一個 ARP請求報文(攜帶主機A的IP地址Ia——物理地址Pa),請求IP地址為Ib的主機B回答物理地址Pb。網上所有主機包括B都收到ARP請求,但只有主機B識別自己的IP地址,於是向A主機發回一個ARP響應報文。其中就包含有B的MAC地址,A接收到B的應答後,就會更新本地的ARP緩存。接著使用這個MAC地址發送數據(由網卡附加MAC地址)。因此,本地高速緩存的這個ARP表是本地網路流通的基礎,而且這個緩存是動態的。

ARP協議並不只在發送了ARP請求才接收ARP應答。當計算機接收到ARP應答數據包的時候,就會對本地的ARP緩存進行更新,將應答中的IP和 MAC地址存儲在ARP緩存中。因此,當區域網中的某台機器B向A發送一個自己偽造的ARP應答,而如果這個應答是B冒充C偽造來的,即IP地址為C的 IP,而MAC地址是偽造的,則當A接收到B偽造的ARP應答後,就會更新本地的ARP緩存,這樣在A看來C的IP地址沒有變,而它的MAC地址已經不是原來那個了。由於區域網的網路流通不是根據IP地址進行,而是按照MAC地址進行傳輸。所以,那個偽造出來的MAC地址在A上被改變成一個不存在的MAC 地址,這樣就會造成網路不通,導致A不能Ping通C!這就是一個簡單的ARP欺騙。

網路執法官利用的就是這個原理!知道了它的原理,再突破它的防線就容易多了。

三、區域網內的「反擊戰」修改MAC地址突破網路執法官的封鎖
根據上面的分析,我們不難得出結論:只要修改MAC地址,就可以騙過網路執法官的掃描,從而達到突破封鎖的目的。下面是修改網卡MAC地址的方法:
在"開始"菜單的"運行"中輸入regedit,打開注冊表編輯器,展開注冊表到:HKEY_LOCAL_
MACHINE\System\CurrentControl
Set\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE103
18}子鍵,在子鍵下的0000,0001,0002等分支中查找DriverDesc(如果你有一塊以上的網卡,就有0001,0002......在這里保存了有關你的網卡的信息,其中的DriverDesc內容就是網卡的信息描述,比如我的網卡是Intel 210
41 based Ethernet Controller),在這里假設你的網卡在0000子鍵。
在0000子鍵下添加一個字元串,命名為"NetworkAddress",鍵值為修改後的MAC地址,要求為連續的12個16進制數。然後在 "0000"子鍵下的NDI\params中新建一項名為NetworkAddress的子鍵,在該子鍵下添加名為"default"的字元串,鍵值為修改後的MAC地址。
在NetworkAddress的子鍵下繼續建立名為"ParamDesc"的字元串,其作用為指定Network
Address的描述,其值可為"MAC Address"。這樣以後打開網路鄰居的"屬性",雙擊相應的網卡就會發現有一個"高級"設置,其下存在MAC Address的選項,它就是你在注冊表中加入的新項"NetworkAddress",以後只要在此修改MAC地址就可以了。
關閉注冊表,重新啟動,你的網卡地址已改。打開網路鄰居的屬性,雙擊相應網卡項會發現有一個MAC Address的高級設置項,用於直接修改MAC地址。

MAC地址也叫物理地址、硬體地址或鏈路地址,由網路設備製造商生產時寫在硬體內部。這個地址與網路無關,即無論將帶有這個地址的硬體(如網卡、集線器、路由器等)接入到網路的何處,它都有相同的MAC地址,MAC地址一般不可改變,不能由用戶自己設定。MAC地址通常表示為12個16進制數,每2 個16進制數之間用冒號隔開,如:08:00:20:0A:8C:6D就是一個MAC地址,其中前6位16進制數,08:00:20代表網路硬體製造商的編號,它由IEEE分配,而後3位16進制數0A:8C:6D代表該製造商所製造的某個網路產品(如網卡)的系列號。每個網路製造商必須確保它所製造的每個乙太網設備都具有相同的前三位元組以及不同的後三個位元組。這樣就可保證世界上每個乙太網設備都具有唯一的MAC地址。

另外,網路執法官的原理是通過ARP欺騙發給某台電腦有關假的網關IP地址所對應的MAC地址,使其找不到網關真正的MAC地址。因此,只要我們修改IP到MAC的映射就可使網路執法官的ARP欺騙失效,就隔開突破它的限制。你可以事先Ping一下網關,然後再用ARP -a命令得到網關的MAC地址,最後用ARP -s IP 網卡MAC地址命令把網關的IP地址和它的MAC地址映射起來就可以了。

四、找到使你無法上網的對方
解除了網路執法官的封鎖後,我們可以利用Arpkiller的"Sniffer殺手"掃描整個區域網IP段,然後查找處在"混雜"模式下的計算機,就可以發現對方了。具體方法是:運行Arpkiller,然後點擊"Sniffer監測工具",在出現的"Sniffer殺手"窗口中輸入檢測的起始和終止 IP,單擊"開始檢測"就可以了。

檢測完成後,如果相應的IP是綠帽子圖標,說明這個IP處於正常模式,如果是紅帽子則說明該網卡處於混雜模式。它就是我們的目標,就是這個傢伙在用網路執法官在搗亂。

掃描時自己也處在混雜模式,把自己不能算在其中哦!

如果大家絕的這方法太復雜的話,也可以簡單點,介紹個防ARP欺騙的軟體(用法很簡單,軟體大家可以去網上搜索下載這里就不多說了):

ARP防火牆單機版4.0 Beta4,02月04日發布,原名Anti ARP Sniffer,採用全新系統內核層攔截技術,能徹底解決所有ARP攻擊帶來的問題,能夠保證在受到ARP攻擊時網路仍然正常,能徹底解決在受到攻擊時出現的丟包現象。能自動攔截並防禦各類ARP攻擊程序、ARP病毒、ARP木馬、通過智能分析抑制所有ARP惡意程序發送虛假數據包。自動識別ARP攻擊數據類型:外部攻擊、IP沖突、對外攻擊數據,並詳細記錄所有可疑數據包並追蹤攻擊者,軟體能自動統計ARP廣播包發送接受數量。作者授權發布。
主要功能:
自動攔截和防禦所有ARP惡意程序,無論ARP惡意程序如何變種都能進行主動攔截。
自動防禦來自區域網的任意地址的ARP攻擊,無論如何欺騙都能進行主動防禦。
智能分析並詳細記錄欺騙數據包內容,快速定位區域網ARP攻擊者。
自動防禦和欺騙狀態都能保持正常通訊,不丟棄任何數據包。

J. 怎麼通過編程讀取.cap格式的數據包文件

CAP文件格式是數據包探測程序包含收集的數據包文件格式;保持原始數據捕捉數據的傳輸;也稱為跟蹤文件或骨文件和多個數據包嗅探器應用程序使用

熱點內容
長安cs35壓縮比 發布:2024-03-29 12:39:58 瀏覽:176
java中編譯器默認導入jdk包 發布:2024-03-29 12:23:26 瀏覽:365
中山大學資料庫 發布:2024-03-29 12:20:44 瀏覽:695
創造與魔法哪個腳本不要錢 發布:2024-03-29 12:20:38 瀏覽:441
medly安卓版在哪裡進行作曲 發布:2024-03-29 12:20:37 瀏覽:427
php所有空格 發布:2024-03-29 12:19:28 瀏覽:656
asp建立資料庫 發布:2024-03-29 12:07:18 瀏覽:533
存儲許可權是什麼意思 發布:2024-03-29 11:55:01 瀏覽:812
網路通信加密 發布:2024-03-29 11:48:49 瀏覽:611
如何清除伺服器硬碟殘留數據 發布:2024-03-29 11:35:18 瀏覽:264