目標(biāo):修改發(fā)送方內(nèi)核,在報(bào)文的tcp頭和ip頭之間添加一段數(shù)據(jù);修改接收方內(nèi)核,解析數(shù)據(jù)內(nèi)容,接收?qǐng)?bào)文。 實(shí)現(xiàn)過(guò)程:在發(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中的字符串刪除。 問(wèn)題:接收方進(jìn)行tcp頭接收時(shí)計(jì)算校驗(yàn)和后會(huì)將該報(bào)文丟棄(在net/ipv4/tcp_ipv4.c文件中的tcp_v4_rcv函數(shù)中判斷skb_checksum_init(skb, IPPROTO_TCP, inet_compute_pseudo)時(shí)出錯(cuò))。 接收方解析的tcp頭信息有誤,我將tcp頭的端口、check等值都恢復(fù)成發(fā)送時(shí)的數(shù)值,但是校驗(yàn)和還是有問(wèn)題。 還有哪兒有問(wèn)題會(huì)讓校驗(yàn)和出錯(cuò),希望可以提供點(diǎn)思路,謝謝!
|