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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 54204 | 回復(fù): 81
打印 上一主題 下一主題

Linux內(nèi)核發(fā)送構(gòu)造數(shù)據(jù)包的方式 [復(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
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-09-02 13:04 |只看該作者 |倒序?yàn)g覽
本文歡迎自由轉(zhuǎn)載,但請標(biāo)明出處,并保證本文的完整性。

      作者:Godbach

      日期:2009/09/01


一、構(gòu)造數(shù)據(jù)包簡析

這里并不詳細(xì)介紹如何在內(nèi)核中構(gòu)造數(shù)據(jù)包,下文如有需要會(huì)在適當(dāng)?shù)奈恢眠M(jìn)行分析。這里簡單的分析講一下內(nèi)核態(tài)基于Netfilter框架構(gòu)造數(shù)據(jù)包的方式。
內(nèi)核中可以用到的構(gòu)造數(shù)據(jù)包的方式,個(gè)人認(rèn)為可以分為兩種。

其一,我們直接用alloc_skb申請一個(gè)skb結(jié)構(gòu)體,然后根據(jù)實(shí)際的應(yīng)用填充不同的成員,或者基于當(dāng)前數(shù)據(jù)包的skb,調(diào)用skb_copy_expand()函數(shù)等新申請一個(gè)nskb,并且拷貝skb的內(nèi)容。

其二,也是個(gè)人比較常用的,就是直接在先前接收到的數(shù)據(jù)包skb上作修改,主要有源IP、目IP,如果是TCP/UDP協(xié)議的話,還有源端口目的端口號(hào)?傊,就是根據(jù)自己的需求去調(diào)整數(shù)據(jù)包的相關(guān)成員即可。

通常,這兩種方式最終可能都要涉及到重新計(jì)算各個(gè)部分的校驗(yàn)和,這也是必須的。


二、如何發(fā)送構(gòu)造的數(shù)據(jù)包

       承接上文,數(shù)據(jù)包已經(jīng)構(gòu)造完畢,下一步關(guān)鍵就是如何發(fā)送數(shù)據(jù)包了。個(gè)人這里總結(jié)的有兩種方法。

       方法一,就是讓數(shù)據(jù)包接著按照Netfilter的流程進(jìn)行傳輸。因?yàn)閿?shù)據(jù)包的一些內(nèi)容已經(jīng)被更改,尤其是當(dāng)源IP和目的IP被更改,主要是交換的情況下,是需要確保有路由可查的。

       NF框架中查路由的位置一是在PREROUTING之后,而是在LOCALOUT之后。又由于這里是需要將數(shù)據(jù)包從本地發(fā)送出去。因此,可以考慮讓修改后的數(shù)據(jù)包從LOCALOUT點(diǎn)發(fā)出。

       內(nèi)核代碼中有這種方式的典型體現(xiàn)。本文涉及的相關(guān)內(nèi)核代碼的版本都是2.6.18.3。源文件為ipt_REJECT.c,函數(shù)send_reset用于往當(dāng)前接收到數(shù)據(jù)包的源IP上發(fā)送RST包,整個(gè)函數(shù)涉及了數(shù)據(jù)包的構(gòu)造和發(fā)送,這里一起做個(gè)簡單分析。
  1. /* Send RST reply */
  2. static void send_reset(struct sk_buff *oldskb, int hook)
  3. {
  4.         struct sk_buff *nskb;
  5.         struct iphdr *iph = oldskb->nh.iph;
  6.         struct tcphdr _otcph, *oth, *tcph;
  7.         struct rtable *rt;
  8.         u_int16_t tmp_port;
  9.         u_int32_t tmp_addr;
  10.         int needs_ack;
  11.         int hh_len;

  12.         /* 判斷是否是分片包*/
  13.         if (oldskb->nh.iph->frag_off & htons(IP_OFFSET))
  14.                 return;
  15.        
  16. /*得到TCP頭部指針*/
  17.         oth = skb_header_pointer(oldskb, oldskb->nh.iph->ihl * 4,
  18.                                  sizeof(_otcph), &_otcph);
  19.         if (oth == NULL)
  20.                 return;

  21.         /* 當(dāng)期收到的包就是RST包,就不用再發(fā)送RST包了*/
  22.         if (oth->rst)
  23.                 return;

  24.         /*檢查數(shù)據(jù)包的校驗(yàn)和是否正確*/
  25.         if (nf_ip_checksum(oldskb, hook, iph->ihl * 4, IPPROTO_TCP))
  26.                 return;
  27.         /*這一步比較關(guān)鍵,做的就是更新路由的工作。該函數(shù)的主要工作就是將當(dāng)前數(shù)據(jù)包的源IP當(dāng)做路由的目的IP,同時(shí)考慮數(shù)據(jù)包的目的IP,得到去往該源IP的路由*/
  28.         if ((rt = route_reverse(oldskb, oth, hook)) == NULL)
  29.                 return;

  30.         hh_len = LL_RESERVED_SPACE(rt->u.dst.dev);

  31.         /* 拷貝當(dāng)前的oldskb,包括skb結(jié)構(gòu)體和數(shù)據(jù)部分。這就是我們上面提到的構(gòu)造數(shù)據(jù)包的第一種方式*/
  32.         nskb = skb_copy_expand(oldskb, hh_len, skb_tailroom(oldskb),
  33.                                GFP_ATOMIC);
  34.         if (!nskb) {
  35.                 dst_release(&rt->u.dst);
  36.                 return;
  37.         }

  38.         /*因?yàn)槭强截惖膐ldskb,這里不需要再引用了,因此釋放對該路由項(xiàng)的引用*/
  39.         dst_release(nskb->dst);
  40.         /*將新構(gòu)造數(shù)據(jù)包引用的路由指向上面由route_reverse函數(shù)返回的新的路由項(xiàng) */
  41.         nskb->dst = &rt->u.dst;

  42.         /* 清除nskb中拷貝過來的oldskb中鏈接跟蹤相關(guān)的內(nèi)容*/
  43.         nf_reset(nskb);
  44.         nskb->nfmark = 0;
  45.         skb_init_secmark(nskb);

  46.         /*以下就是構(gòu)造數(shù)據(jù)包的實(shí)際數(shù)據(jù)部分。如果我們將這里不為nskb新申請緩沖區(qū),而直接指向oldskb的緩沖區(qū),就使我們上面提到的第二種構(gòu)造數(shù)據(jù)包的方法。*/
  47.         /*獲取nskb的tcp header*/
  48.         tcph = (struct tcphdr *)((u_int32_t*)nskb->nh.iph + nskb->nh.iph->ihl);

  49.         /*交換源和目的IP */
  50.         tmp_addr = nskb->nh.iph->saddr;
  51.         nskb->nh.iph->saddr = nskb->nh.iph->daddr;
  52.         nskb->nh.iph->daddr = tmp_addr;

  53.         /*交換源和目的端口 */
  54.         tmp_port = tcph->source;
  55.         tcph->source = tcph->dest;
  56.         tcph->dest = tmp_port;

  57.         /*重置TCP頭部的長度,并修改IP頭部中記錄的數(shù)據(jù)包的總長度。因?yàn)檫@里是發(fā)送RST報(bào)文,只需要有TCP的頭部,不需要TCP的數(shù)據(jù)部分*/
  58.         tcph->doff = sizeof(struct tcphdr)/4;
  59.         skb_trim(nskb, nskb->nh.iph->ihl*4 + sizeof(struct tcphdr));
  60.         nskb->nh.iph->tot_len = htons(nskb->len);

  61.         /*重新設(shè)置 seq, ack_seq,分兩種情況(TCP/IP詳解有描述)*/
  62.         if (tcph->ack) { /*原始數(shù)據(jù)包中ACK標(biāo)記位置位的情況*/
  63.                 needs_ack = 0;
  64.                 tcph->seq = oth->ack_seq; /*原始數(shù)據(jù)包的ack_seq作為nskb的seq*/
  65.                 tcph->ack_seq = 0;
  66.         } else { /*原始數(shù)據(jù)包中ACK標(biāo)記位沒有置位的情況,初始連接SYN或者結(jié)束連接FIN等*/
  67.                 needs_ack = 1;
  68.                 /*這種情況應(yīng)該是SYN或者FIN包,由于SYN和FIN包都占用1個(gè)字節(jié)的長度。因此ack_seq應(yīng)該等于舊包的seq+1即可。這里之所以這樣表示,可能是還存在其他情況的數(shù)據(jù)包。*/
  69.                 tcph->ack_seq = htonl(ntohl(oth->seq) + oth->syn + oth->fin
  70.                                       + oldskb->len - oldskb->nh.iph->ihl*4
  71.                                       - (oth->doff<<2));
  72.                 tcph->seq = 0;
  73.         }

  74.         /* RST標(biāo)記位置1*/
  75.         ((u_int8_t *)tcph)[13] = 0;
  76.         tcph->rst = 1;
  77.         tcph->ack = needs_ack;

  78.         tcph->window = 0;
  79.         tcph->urg_ptr = 0;

  80.         /*重新計(jì)算TCP校驗(yàn)和*/
  81.         tcph->check = 0;
  82.         tcph->check = tcp_v4_check(tcph, sizeof(struct tcphdr),
  83.                                    nskb->nh.iph->saddr,
  84.                                    nskb->nh.iph->daddr,
  85.                                    csum_partial((char *)tcph,
  86.                                                 sizeof(struct tcphdr), 0));

  87.         /* 修改IP包的TTL,并且設(shè)置禁止分片*/
  88.         nskb->nh.iph->ttl = dst_metric(nskb->dst, RTAX_HOPLIMIT);
  89.         /* Set DF, id = 0 */
  90.         nskb->nh.iph->frag_off = htons(IP_DF);
  91.         nskb->nh.iph->id = 0;

  92.         /*重新計(jì)算IP數(shù)據(jù)包頭部校驗(yàn)和*/
  93.         nskb->nh.iph->check = 0;
  94.         nskb->nh.iph->check = ip_fast_csum((unsigned char *)nskb->nh.iph,
  95.                                            nskb->nh.iph->ihl);

  96.         /* "Never happens" */
  97.         if (nskb->len > dst_mtu(nskb->dst))
  98.                 goto free_nskb;
  99. /*使nskb和oldskb的鏈接記錄關(guān)聯(lián)*/
  100.         nf_ct_attach(nskb, oldskb);
  101.        
  102. /*這里就是最終發(fā)送數(shù)據(jù)包的方式,具體方法就是讓新數(shù)據(jù)包經(jīng)過LOACLOUT的hook點(diǎn),然后查路由,最后經(jīng)由POSTROUTING點(diǎn),將數(shù)據(jù)包發(fā)送出去。
  103. 其實(shí)這里我還是有1個(gè)疑問:(1)為什么不可以直接查找路由,而必須先經(jīng)過LOCALOUT點(diǎn)*/
  104.         NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, nskb, NULL, nskb->dst->dev,
  105.                 dst_output);
  106.         return;

  107. free_nskb:
  108.         kfree_skb(nskb);
  109. }
復(fù)制代碼

通過以上對send_reset函數(shù)的分析,應(yīng)該明白了利用NF框架將構(gòu)造數(shù)據(jù)包發(fā)送出去的方法。
         源碼分析中提到的1個(gè)疑問,35樓給出了解釋,這里引用過來:
其實(shí),這不是丟到了高層,而是和ip_queue_xmit()發(fā)送過程意義一樣。
對這包進(jìn)行重新路由后,封裝了頭部,之后,放到了NF_IP_LOCAL_IN之前而已。

其實(shí),這里面只要修改了中途修改了ip地址,肯定是需要手動(dòng)重新路由的。
這就涉及到一些比較復(fù)雜的route cache的查找,如果沒有就去查找route tables;之后,進(jìn)行路由結(jié)構(gòu)和neighbour結(jié)構(gòu)的關(guān)聯(lián),就涉及到鄰居子系統(tǒng)的相關(guān)操作;接著就涉及到arp cache的查找,如果沒有,進(jìn)行一些操作,arp的過程等等,才找到了相關(guān)的ip對應(yīng)的mac信息。
息。

        方法二,就是直接調(diào)用dev_queue_xmit函數(shù),將構(gòu)造完畢的數(shù)據(jù)包直接發(fā)送到網(wǎng)卡驅(qū)動(dòng)。從NF框架來看,該函數(shù)的調(diào)用是在POSTROUTING點(diǎn)之后了,也可以理解為直接通過調(diào)用二層的發(fā)送函數(shù),將三層構(gòu)造的數(shù)據(jù)包發(fā)送出去。該函數(shù)實(shí)際上會(huì)調(diào)用skb->dev->hard_start_xmit,即對應(yīng)網(wǎng)卡的驅(qū)動(dòng)函數(shù),將數(shù)據(jù)包直接發(fā)送的出去。
        很顯然,這個(gè)工作在二層的函數(shù),發(fā)送數(shù)據(jù)包(數(shù)據(jù)包在二層的時(shí)候準(zhǔn)確叫法應(yīng)該是幀,我們這里是在三層直接調(diào)用的,權(quán)且還稱作數(shù)據(jù)包)的方式是不需要再查路由了。
但是,二層發(fā)送的時(shí)候是需要根據(jù)目的MAC來進(jìn)行的。在第一種方法構(gòu)造的數(shù)據(jù)包中,僅僅交換了IP地址,而沒有對MAC做任何修改。這樣直接調(diào)用dev_queue_xmit是會(huì)產(chǎn)生問題的,并且該函數(shù)發(fā)送的內(nèi)容應(yīng)該是從二層頭部開始,到數(shù)據(jù)包的結(jié)束。因此,如果三層構(gòu)造的數(shù)據(jù)包,想調(diào)用該函數(shù)直接發(fā)送數(shù)據(jù)包的話,則需要修改數(shù)據(jù)包的源和目的MAC,并將skb->data指針指向MAC頭部,以及skb->len的值也要加上頭部的長度方法。以下是可參考的示例代碼:
  1.   unsigned char mac_temp[ETH_ALEN] = {0};
  2.   struct ethhdr *mach = NULL;
  3. ……
  4. /*code…… 構(gòu)造數(shù)據(jù)包的IP即上層協(xié)議及數(shù)據(jù)*/
  5. ……
  6. /*交換源和目的MAC*/
  7. mach = (struct ethhdr *)skb->mac.raw;
  8.    memcpy(mac_temp, (unsigned char *)mach->h_dest, ETH_ALEN);
  9.    memcpy(mach->h_dest, (unsigned char *)mach->h_source, ETH_ALEN);
  10.    memcpy(mach->h_source, mac_temp, ETH_ALEN);

  11. /*修改skb->data指針,使其指向MAC頭部,并且增加skb->len*/
  12. skb_push(skb , ETH_HLEN);
  13. /*直接調(diào)用該函數(shù),將數(shù)據(jù)包從網(wǎng)卡上發(fā)送出去*/
  14. ret = dev_queue_xmit(skb);
復(fù)制代碼

    這里還要順便說一下構(gòu)造的數(shù)據(jù)包發(fā)送完畢之后,對于hook函數(shù)的返回值問題。
   (1)第一種發(fā)送數(shù)據(jù)包的實(shí)現(xiàn),對于send_reset函數(shù)的實(shí)現(xiàn)中,由于單獨(dú)申請了nskb的內(nèi)存,并構(gòu)造的新的數(shù)據(jù)包。新數(shù)據(jù)包接著走NF的流程了。而對于原始的skb,就通過模塊的返回值return NF_DROP做出了處理。
   (2)第二種發(fā)送數(shù)據(jù)包的實(shí)現(xiàn),若是基于已有數(shù)據(jù)包的基礎(chǔ)上重新構(gòu)造的數(shù)據(jù)包,那么實(shí)際上原始數(shù)據(jù)包的內(nèi)容已經(jīng)不復(fù)存在,而且調(diào)用完畢dev_queue_xmit已將同一塊緩沖區(qū),只是填充了新數(shù)據(jù)的數(shù)據(jù)包發(fā)送出去,因此,這里已經(jīng)沒有原始數(shù)據(jù)包的存在了,需要返回NF_STOLEN,告訴協(xié)議棧不用關(guān)心原始的包即可。否則,若是新數(shù)據(jù)包是單獨(dú)申請的內(nèi)存,那么對于原數(shù)據(jù)包還應(yīng)該是返回NF_DROP.


三、總結(jié)
        以上就是個(gè)人分享和總結(jié)和內(nèi)核中構(gòu)造的數(shù)據(jù)包發(fā)送出去的兩種方式。實(shí)際中常用的就是構(gòu)造完數(shù)據(jù)包之后,調(diào)用dev_queue_xmit函數(shù)發(fā)送報(bào)文,也測試過調(diào)用send_reset發(fā)送RST方式。但并未采用send_reset中通過調(diào)用NF_HOOK發(fā)送過其他數(shù)據(jù)包。如果諸位朋友有相關(guān)的實(shí)踐經(jīng)驗(yàn),歡迎分享。

        本文在分析send_reset代碼的過程中,參考了百度中搜到的muddoghole的文章,因?yàn)橹荒軓陌俣瓤煺湛吹竭@篇文章,并且鏈接過長,這里就不列出連接,對于原文的作者表示感謝。

        由于對內(nèi)核中的一些地方理解不夠深入,因此文章中肯定存在很多問題。歡迎各位朋友指正,多多交流。

        本文原文鏈接:http://blog.chinaunix.net/u/33048/showart_2043789.html

[ 本帖最后由 Godbach 于 2009-9-5 11:18 編輯 ]

評分

參與人數(shù) 1可用積分 +30 收起 理由
platinum + 30 很好的實(shí)做例程!

查看全部評分

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-09-02 16:19 |只看該作者
好文!

論壇徽章:
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
3 [報(bào)告]
發(fā)表于 2009-09-02 16:23 |只看該作者
多謝白金兄啊。過獎(jiǎng)了。

其實(shí)小弟對于send_reset還是疑問的:就是修改后的數(shù)據(jù)包,為什么還要走LOCAL_OUT點(diǎn)?

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-09-02 16:32 |只看該作者
我的理解是 send_reset 偽造一個(gè)包然后通過正常本地協(xié)議棧,本地 socket 發(fā)出的
所以要經(jīng)過 LOCAL_OUT 鏈
不知道分析的對不對,還請指正

論壇徽章:
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ā)表于 2009-09-02 16:39 |只看該作者
原帖由 platinum 于 2009-9-2 16:32 發(fā)表
我的理解是 send_reset 偽造一個(gè)包然后通過正常本地協(xié)議棧,本地 socket 發(fā)出的
所以要經(jīng)過 LOCAL_OUT 鏈
不知道分析的對不對,還請指正


當(dāng)時(shí)看了代碼,我覺得可能是這樣理解的。但是從包的流程上看,如果不走h(yuǎn)ook點(diǎn),而直接查路由發(fā)送到POSTROUTING,不知道會(huì)不會(huì)有什么影響?

論壇徽章:
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
6 [報(bào)告]
發(fā)表于 2009-09-02 16:43 |只看該作者
難道是考慮鏈接跟蹤的問題或者是nat?

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2009-09-02 16:55 |只看該作者
REJECT 的設(shè)計(jì)初衷就是用自己的本地 socket 發(fā)一個(gè) RST 包,所以用的是 LOCAL_OUT,這和 NAT 無關(guān)
也就是說
假如 REJECT 的機(jī)器是做服務(wù)器的,直接通過被訪問端口發(fā)送數(shù)據(jù)
如果 REJECT 的機(jī)器是做 NAT 的,那么通過連接公網(wǎng)的接口發(fā)送數(shù)據(jù)
如果 REJECT 的機(jī)器是個(gè)橋,那么對方一定無法收到 REJECT 了,可以做個(gè)測試驗(yàn)證我的說法

論壇徽章:
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
8 [報(bào)告]
發(fā)表于 2009-09-02 16:56 |只看該作者
原帖由 platinum 于 2009-9-2 16:55 發(fā)表
REJECT 的設(shè)計(jì)初衷就是用自己的本地 socket 發(fā)一個(gè) RST 包,所以用的是 LOCAL_OUT,這和 NAT 無關(guān)
也就是說
假如 REJECT 的機(jī)器是做服務(wù)器的,直接通過被訪問端口發(fā)送數(shù)據(jù)
如果 REJECT 的機(jī)器是做 NAT 的,那 ...


你的意思是說,如果在橋模式下使用REJECT,RST包可能發(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
9 [報(bào)告]
發(fā)表于 2009-09-02 17:01 |只看該作者
那如果我想做比較通用的發(fā)送RST包。修改完畢之后,還向讓順著NF框架進(jìn)行,白金兄覺得該怎么實(shí)現(xiàn)呢?

論壇徽章:
6
金牛座
日期:2013-10-08 10:19:10技術(shù)圖書徽章
日期:2013-10-14 16:24:09CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34獅子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亞洲杯之阿聯(lián)酋
日期:2015-05-09 14:36:15
10 [報(bào)告]
發(fā)表于 2009-09-02 17:14 |只看該作者

回復(fù) #1 Godbach 的帖子

分析的非常好,小弟收藏了
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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ū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP