亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 36817 | 回復(fù): 18
打印 上一主題 下一主題

[內(nèi)核模塊] netfilter修改TCP數(shù)據(jù)包遇到的問(wèn)題,請(qǐng)各位不吝賜教! [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2017-11-08 15:49 |只看該作者 |倒序?yàn)g覽
本帖最后由 flash78910 于 2017-11-08 15:52 編輯

我在LOCAL_OUT點(diǎn)處對(duì)TCP數(shù)據(jù)包的數(shù)據(jù)段進(jìn)行擴(kuò)展,使用skb_put函數(shù)擴(kuò)展16個(gè)字節(jié),并插入16字節(jié)的數(shù)據(jù),同時(shí)更新了包的校驗(yàn)和。我在函數(shù)里只有一次memcpy動(dòng)作。為什么抓包顯示有多次重復(fù)的插入數(shù)據(jù)出現(xiàn)?以下是這個(gè)鉤子函數(shù),插入的內(nèi)容為insert,插入位置為TCP數(shù)據(jù)開(kāi)頭部分。謝謝各位,請(qǐng)不吝賜教!


  1. unsigned int hook_func(unsigned int hooknum, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, int (*okfn) (struct sk_buff *))
  2. {
  3.         struct iphdr *iph = NULL;
  4.         unsigned char *tcp_ins = NULL;         //tcp插入指針
  5.         struct tcphdr *tcph = NULL; //tcp頭
  6.         unsigned int tcp_len = 0; //tcp報(bào)文長(zhǎng)度
  7.         unsigned int data_len = 0; //tcp數(shù)據(jù)部分長(zhǎng)度
  8.         unsigned char insert[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; //插入數(shù)據(jù)
  9.         if(skb == NULL)
  10.                 return NF_ACCEPT;
  11.         if(is_ign_pkt(skb)==1) //過(guò)濾需要修改的數(shù)據(jù)包,此后都是要修改的數(shù)據(jù)包
  12.                 return NF_ACCEPT;
  13.         if(skb_is_nonlinear(skb)) //線性化skb
  14.         {                        
  15.                 if(skb_linearize(skb) != 0)
  16.                         return NF_ACCEPT;
  17.         }
  18.         iph = ip_hdr(skb); //skb的ip頭
  19.         if(iph == NULL)
  20.                 return NF_ACCEPT;
  21.         if(iph->protocol==TCP)
  22.         {
  23.                 if(skb_tailroom(skb)<=16) //判斷tailroom空間
  24.                 {
  25.                         printk("TCP NOT Enough\n");
  26.                 }
  27.                 else
  28.                 {
  29.                         printk("TCP tail: 0x%u\n",skb->tail);               
  30.                         skb_put(skb,16); //數(shù)據(jù)段空間擴(kuò)展
  31.                         printk("TCP new_tail: 0x%u\n",skb->tail);
  32.                         printk("TCP------tailroom: %u------\n",skb_tailroom(skb));
  33.                         tcph = tcp_hdr(skb);
  34.                         tcp_ins = (unsigned char *)tcph + (tcph->doff*4); //指向數(shù)據(jù)起始處
  35.                         iph->tot_len = htons(ntohs(iph->tot_len)+16);
  36.                         tcp_len = ntohs(iph->tot_len) - iph->ihl*4;
  37.                         data_len = tcp_len - (tcph->doff*4);
  38.                         memmove(tcp_ins+16, tcp_ins, data_len); //原始數(shù)據(jù)后移留出插入空間
  39.                         memcpy(tcp_ins, insert, 16); //拷貝插入數(shù)據(jù)
  40.                         tcph->check = 0;
  41.                         skb->csum = 0;
  42.                         iph->check = 0;
  43.                         skb->csum = skb_checksum(skb, iph->ihl*4,ntohs(iph->tot_len)-iph->ihl*4,0);
  44.                         tcph->check = csum_tcpudp_magic(iph->saddr, iph->daddr, tcp_len, iph->protocol, skb->csum);
  45.                         iph->check = ip_fast_csum(iph, iph->ihl);
  46.                 }
  47.                 return NF_ACCEPT;
  48.         }
  49.         return NF_ACCEPT;
  50. }

復(fù)制代碼


tcp插入錯(cuò)誤截圖.png (67.55 KB, 下載次數(shù): 161)

Tcp分組截圖

Tcp分組截圖

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2017-11-09 09:17 |只看該作者
UDP改動(dòng)發(fā)包沒(méi)有這個(gè)情況,這個(gè)是不是由于TCP重傳的原因造成的?因?yàn)槲視簳r(shí)只改了發(fā)端,收端還沒(méi)做處理。抓包看到好多改動(dòng)的包都不斷在重傳。

論壇徽章:
5
處女座
日期:2014-10-15 11:57:302015年亞洲杯之中國(guó)
日期:2015-03-04 17:05:552015亞冠之西悉尼流浪者
日期:2015-07-31 12:14:2915-16賽季CBA聯(lián)賽之同曦
日期:2015-12-10 18:14:0615-16賽季CBA聯(lián)賽之北京
日期:2016-07-07 17:01:53
3 [報(bào)告]
發(fā)表于 2017-11-09 10:08 |只看該作者
改了tcp負(fù)載長(zhǎng)度,后面的數(shù)據(jù)流要做序列號(hào)調(diào)整

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2017-11-09 19:42 |只看該作者
回復(fù) 3# zhanglin496

但是我打算在下一跳的路由上,再次去掉增加的負(fù)載,然后由路由轉(zhuǎn)發(fā)。所以就沒(méi)有改序號(hào),路由器上也有一個(gè)內(nèi)核模塊是去掉我這塊負(fù)載功能的,相當(dāng)于檢測(cè)我這個(gè)負(fù)載標(biāo)記然后去掉(或者叫還原),再轉(zhuǎn)發(fā)。

論壇徽章:
36
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
5 [報(bào)告]
發(fā)表于 2017-11-09 23:31 |只看該作者
回復(fù) 4# flash78910

你可以直接在 kernel 里把你的 tcp payload 整個(gè)打印出來(lái),和你的抓包對(duì)比。
我感覺(jué)你調(diào)用 memmove 有可能導(dǎo)致內(nèi)存出現(xiàn)了一些問(wèn)題。

論壇徽章:
7
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-06-09 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-06-12 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-12 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-06-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-06-17 06:20:002015-2016NBA季后賽紀(jì)念章
日期:2016-06-28 17:42:27
6 [報(bào)告]
發(fā)表于 2017-11-10 10:36 |只看該作者
能不能把這個(gè)數(shù)據(jù)包的相關(guān)信息打印出來(lái)? ip port, seq id 等等,看看到底進(jìn)入你這個(gè)hook幾次

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2017-11-10 20:07 |只看該作者
回復(fù) 5# Godbach

確實(shí),我打印出未插入16字節(jié)前的payload,和抓包后的對(duì)比。在第一次發(fā)送時(shí)修改的分組正常,之后重傳的時(shí)候尾部有16字節(jié)被擠出去沒(méi)有了,而且每次重傳都會(huì)經(jīng)過(guò)一遍鉤子,又會(huì)插入一次數(shù)據(jù),后面又會(huì)被擠出去16字節(jié)。。。重傳的長(zhǎng)度始終保持和第一次發(fā)送時(shí)的長(zhǎng)度一樣,難道重傳經(jīng)過(guò)鉤子時(shí)并沒(méi)有改變長(zhǎng)度嗎?skb_put()的定義中不是已經(jīng)把skb->tail后移了嗎,同時(shí)更新了skb->len?而且其中也有這么一句SKB_LINEAR_ASSERT(skb),難道最后的空間還不是線性的嗎?

論壇徽章:
20
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
8 [報(bào)告]
發(fā)表于 2017-11-15 17:35 |只看該作者
看起來(lái)協(xié)議棧在tcp control block里記錄了skb的有關(guān)信息。
重傳邏輯假定報(bào)文在重傳過(guò)程中是不變的?

論壇徽章:
7
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-06-09 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-06-12 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-12 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-06-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-06-17 06:20:002015-2016NBA季后賽紀(jì)念章
日期:2016-06-28 17:42:27
9 [報(bào)告]
發(fā)表于 2017-11-18 19:47 |只看該作者
假定? 難道需要netfilter做判斷?

論壇徽章:
20
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
10 [報(bào)告]
發(fā)表于 2017-11-22 18:48 |只看該作者
好像tcp層的確在skb->cb(通過(guò)TCP_SKB_CB)記錄了一些信息。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP