簡體   English   中英

發送任意(原始)數據包

[英]Sending arbitrary (raw) packets

我已經看到它在其他地方問了但是沒有人滿意地回答:我怎樣才能接收和發送原始數據包?

通過“原始數據包”,我的意思是,我必須生成所有頭和數據,使字節完全是任意的, 而且我不以任何方式限制。 這就是為什么Microsofts RAW套接字無法工作的原因,因為您無法發送具有錯誤源地址的TCP或UDP數據包。

我知道您可以使用WinPCAP發送我想要的數據包,但是您無法使用它接收原始信息,我也需要這樣做。

首先確定要測試格式錯誤的數據的協議層:

以太網絡

如果您希望生成和接收帶有錯誤以太網校驗和的無效以太網幀,那么您或多或少會因為校驗和通常在硬件中完成而失敗,並且在它們不是的情況下,NIC的驅動程序執行校驗和並且至少在Windows上沒有辦法解決這個問題。 NetBSD為大多數在OS驅動程序中執行以太網校驗和的驅動程序提供了該選項。

另一種方法是購買專用硬件(例如Napatech的卡,你可能會找到更便宜的硬件),它提供了一個用於發送和接收以太網幀的API,但是你想要的無效。

請注意,通過發送無效的以太網幀,接收端或中間的路由器發送只會丟幀,它們永遠不會到達應用程序或OS IP層。 您將在接收端測試NIC或NIC驅動程序。

IP

如果你想要的只是發送/接收無效的IP數據包,winpcap允許你這樣做。 生成數據包,設置winpcap來捕獲數據包,使用winpcap發送..

請注意,具有無效IP校驗和其他無效字段的數據包,接收應用程序運行的TCP / IP堆棧將丟棄IP數據包,發送器和接收器之間的任何IP /第3層路由器都會丟棄。 他們無法聯系到申請表。 如果您正在生成有效的IP數據包,您還需要自己生成有效的UDP並使用有效的TCP數據包實現TCP會話,以便應用程序處理它們,否則它們也會被TCP / IP丟棄堆

您將在接收端測試TCP / IP堆棧的下半部分。

TCP / UDP

這與發送/接收無效IP數據包沒有什么不同。 你可以使用winpcap完成所有這些工作,但只要以太網/ IP頭沒問題,路由器就不會丟棄它們。 應用程序不會收到這些數據包,它們將被TCP / IP堆棧丟棄。 您將在接收端測試TCP / IP堆棧的上部。

應用層

這是實際測試應用程序的(理智)方式(除非您的“應用程序”實際上是TCP / IP堆棧,或更低)。 您可以使用任何應用程序使用套接字發送/接收數據,但可以根據需要生成格式錯誤的應用程序數據。 應用程序將接收此數據,它不會被較低的協議層丟棄。

雖然使用TCP的一種特定形式的測試可能很難測試 - 即改變發送的TCP段,如果您想測試應用程序正確地將TCP數據解釋為流。 (例如,您希望在5個段中發送字符串“hello”,並以某種方式使接收應用程序逐個讀取()字符。 如果您不需要速度,通常可以通過在發送中插入暫停並關閉nagel的算法(TCP_NDELAY)和/或調整NIC MTU來獲得該行為。

請記住,TCP流中具有較低級別協議的任何muckery,例如導致其中一個數據包具有無效/不同的IP源地址,只會被較低級別的層丟棄。

您將測試在TCP / UDP(或任何其他IP協議)上運行的應用程序。

備擇方案

  • 切換到另一個操作系統,你至少可以使用原始套接字,而不受最近窗口的限制。

  • 基於上面的“以太網”或“IP”替代方案實施透明的插入式插入解決方案。 即你有正常的客戶端應用程序,您的正常服務器應用程序。 你在它們之間斷開電纜,插入帶有2個NIC的盒子,在那里以編程方式改變收到的幀的字節,然后在另一個NIC上再次發送它們。 這樣您就可以輕松地在系統中引入數據包延遲。 Linux的netfilter已經具備了這種功能,您可以輕松地構建它,通常只需配置或編寫腳本。

  • 如果您可以更改要測試的接收應用程序,請讓它從其他內容(如文件或管道)讀取數據,並根據需要隨機提供字節/數據包。

  • 混合模型,主要用於TCP應用程序測試,但也可用於測試UDP ICMP響應。 使用套接字設置TCP連接。 使用套接字發送無效的應用程序數據。 引入隨機格式錯誤的數據包(比使用設置TCP會話的原始套接字編程然后引入較低層錯誤容易得多)。 發送格式錯誤的IP或UDP / TCP數據包,或者使用WinPcap發送ICMP數據包,盡管使用套接字代碼與winpcap代碼進行通信,這樣您的地址/端口就會正確,這樣接收應用程序就可以看到它。

  • 查看NS / 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM