tcpreplay重放報文,tcpdump能抓到包,應用程序收不到包


現象:

生產環境中有兩台服務器A、B,A服務器實時有報文發往B服務器。為了在測試環境測試新功能,故在現網A服務器上tcpdump抓取發往B服務器的報文,然后在測試環境tcprewrite重寫目標IP和端口進行重放。在測試環境中報文在A1服務器上進行tcpreplay重放發往B1服務器,此時在B1服務器的對應端口能抓取到對應的報文,但是B1服務器上的應用程序始終收不到包。

分析:

查看了網上的文檔,大多說的是因為iptables將報文拒絕導致,但是我的測試環境並沒有開啟iptables。后發現有文章提到可能是報文校驗和錯誤引起,故進行嘗試。

將生產環境抓下來的原始報文用wireshark打開,並打開報文校驗和的顯示項,具體參考:https://blog.csdn.net/qq_31664899/article/details/89946151

果然發現udp報文校驗和有錯誤,原因是我們抓下來的包還未進行校驗和計算,只有當包在網卡上真實發送的時候由網卡計算。可參考:https://www.cnblogs.com/charlieroro/p/11363336.html

解決:

在生產環境目標端服務器B上進行抓包,然后再將報文拿到測試環境進行重寫並重放就可以解決。或者還用是之前在A上抓的包,只不過在tcprewrie時加上參數--fixcsum,重新計算校驗和,然后再重放也可以解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM