2013-02-14 95 views
0

我有一個數據包跟蹤,我用scapy僞造並重新發送tcpreplay。我使用Scapy重新計算IP和傳輸層校驗和,將數據包保存到pcap文件的磁盤上並在其上調用tcpreplaytcpreplay刪除IP校驗和?

通過並行運行tcpdump,我注意到那些傳出數據包的所有IP校驗和根本沒有任何值。看起來tcpreplay每次都會刪除它。

現在,這是故意發生的嗎?我錯過了什麼嗎?

校驗和應該是正確的,所以我不認爲tcpreplay刪除它們是因爲檢查失敗。

+0

那些包是否由具有正確校驗和的收據接收? – 2013-02-14 12:03:08

+0

我沒有得到你的問題。數據包在接收器處正確接收,所以我不太/擔心。這只是tcpreplay,當它應用到數據包跟蹤,其中每個數據包有一個正確的Ip校驗和時,似乎正在移除這樣的校驗和。 – 2013-02-14 13:16:08

+0

如果您在scapy中使用sendfast,它會使用tcpreplay開箱即用。通常如果你有校驗和問題,最好的辦法就是刪除它們。 Scapy應該在發送時自動修復它。 – dc5553 2013-02-21 21:15:24

回答

1

您沒有指定要使用的實際tcpreplay命令,但tcpreplay 從未編輯包。您可以使用tcpreplay-edit或tcprewrite編輯數據包,但不能使用tcpreplay。即使如此,tcpreplay-edit/tcprewrite會計算/修正您的校驗和;不要將它們歸零。

您是否已經打開Wireshark中由scapy生成的原始pcap並驗證其中是否有校驗和?老實說,這聽起來像是一個垃圾進入垃圾的簡單情況。

FWIW,我不知道有什麼東西可以將您的校驗和歸零......至少我無法想象爲什麼內核會對通過PF_PACKET接口發送的數據包這麼做 - 這將是一個錯誤。

如果你知道,讓我知道。

+0

謝謝您的回答。至於我使用的tcpreplay命令,我只是'tcpreplay --pps = $ myPacketRate --intf1 = 0 $ dumpedTrafficLocation'。在我與Davide Berra交換的消息中,我得到了另一個答案,我們發現,由於'卸載',在啓動'tcpreplay'的那一刻和'tcpdump'捕獲我的時刻傳出流量。那麼,如果不是'tcpreplay'去除校驗和,它可能是內核本身嗎?或者網卡? – 2013-02-25 13:35:06

+0

好吧,我會用wireshark檢查pcap文件,並會回覆給您。 – 2013-02-25 13:36:25

+2

我認爲在NIC更新校驗和之前捕獲了在$ dumpedTrafficLocation中轉儲的流量。 – 2013-02-25 13:37:10

1

我真的不知道這是怎麼回事上,但我懷疑tcpreplay檢測該接口將使用來發送數據包具有Offload Checksum活躍,讓NIC計算正確的校驗和。

嘗試disactivate卸載校驗和

ethtool -K eth0 rx off tx off 

然後重試,讓我們知道

+0

謝謝你的回答。我不想在我的系統中搞亂任何東西。由於我不熟悉'卸載',上面的命令會如何影響我的機器的可用性?此外,我似乎無法找到'rx-checksumming'和'tx-checksumming'之間的區別。任何想法? 在任何情況下,這裏就是我的選擇是,當我運行'ethtool': 'RX-校驗:關閉[固定] TX-校驗:對 \t TX校驗和IPv4的:關閉[固定] \t TX-校驗-ip泛型:在[固定] \t TX-校驗的IPv6:關[固定] \t TX-校驗和FCoE的CRC:關[固定] \t TX-校驗-SCTP:關[固定] ' – 2013-02-14 14:04:50

+1

看起來好像您爲傳出數據包激活了Checksum Offloading。這意味着IP校驗和將由NIC硬件而不是軟件來計算。由於tcpdump在數據包被NIC發出之前捕獲數據包,因此校驗和尚未計算。如果您有機會從收貨角度轉儲數據,您可以發現發生了什麼。 – 2013-02-14 14:13:21

+0

給予'tcpreplay'的所有數據包已經有了正確的校驗和,所以看起來確實是'tcpreplay',它將其移除並讓NIC處理它。我無法在接收方轉儲數據包,但由於我的數據包的ttl值很低,因此我檢查了我返回的ICMP數據包的有效負載,並且它們都包含正確的校驗和值。所以,有些東西確實在幕後工作,否則我不會收回任何東西。我從ethtool中看不到的東西:'rx-checksumming'和'tx-checksumming'之間是否有區別? ? 'rx'和'tx'代表什麼? – 2013-02-14 14:42:46

1

可以使用包含在同一個包tcpreplaytcpreplay-edit解決這個問題,特別是此選項:當數據包雲:

-C, --fixcsum    Force recalculation of IPv4/TCP/UDP header checksums 

Desactivating接口的卸載校驗無感那麼它將被啓用校驗和檢查的下一臺機器拒絕(+ 99%)