目標(biāo):修改發(fā)送方內(nèi)核,在報文的tcp頭和ip頭之間添加一段數(shù)據(jù);修改接收方內(nèi)核,解析數(shù)據(jù)內(nèi)容,接收報文。 實現(xiàn)過程:在發(fā)送方的內(nèi)核構(gòu)造完tcp頭(在net/ipv4/tcp_output.c文件中的tcp_transmit函數(shù)的最后),寫入一段字符串;在接收方的內(nèi)核接收完ip頭(在net/ipv4/ip_input.c文件中的ip_local_deliver_finish函數(shù)的最后),將skb中的字符串刪除。 問題:接收方進行tcp頭接收時計算校驗和后會將該報文丟棄(在net/ipv4/tcp_ipv4.c文件中的tcp_v4_rcv函數(shù)中判斷skb_checksum_init(skb, IPPROTO_TCP, inet_compute_pseudo)時出錯)。 接收方解析的tcp頭信息有誤,我將tcp頭的端口、check等值都恢復(fù)成發(fā)送時的數(shù)值,但是校驗和還是有問題。 還有哪兒有問題會讓校驗和出錯,希望可以提供點思路,謝謝!
|