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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 5584 | 回復: 12
打印 上一主題 下一主題

[內(nèi)核模塊] linux內(nèi)核如何創(chuàng)建一個TCP包并能發(fā)送 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-01-26 19:51 |只看該作者 |倒序瀏覽
急。!linux內(nèi)核編程如何創(chuàng)建一個TCP包并能發(fā)送,最好能對TCP包的內(nèi)容可以修改~~~
求大神幫助!!

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
2 [報告]
發(fā)表于 2015-01-26 22:35 |只看該作者
回復 1# liuyusen10


    內(nèi)核目前只支持UDP發(fā)送,TCP數(shù)據(jù)包請在用戶態(tài)去發(fā)送。不要什么東西都放內(nèi)核態(tài)去做!

論壇徽章:
12
寅虎
日期:2013-12-04 20:37:4915-16賽季CBA聯(lián)賽之廣東
日期:2017-08-22 19:23:1215-16賽季CBA聯(lián)賽之上海
日期:2016-06-18 23:05:05操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-06-06 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-06-05 06:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-06-03 06:20:002015年辭舊歲徽章
日期:2015-03-03 16:54:152015年亞洲杯之巴勒斯坦
日期:2015-02-10 21:38:08卯兔
日期:2014-10-31 20:42:23申猴
日期:2014-06-11 17:15:10處女座
日期:2014-05-22 09:00:1815-16賽季CBA聯(lián)賽之廣夏
日期:2017-09-25 23:37:46
3 [報告]
發(fā)表于 2015-01-27 06:22 |只看該作者

__sock_create()  ?

求職 : 機器學習
論壇徽章:
79
2015年亞洲杯紀念徽章
日期:2015-05-06 19:18:572015七夕節(jié)徽章
日期:2015-08-21 11:06:172015亞冠之阿爾納斯爾
日期:2015-09-07 09:30:232015亞冠之薩濟拖拉機
日期:2015-10-21 08:26:3915-16賽季CBA聯(lián)賽之浙江
日期:2015-12-30 09:59:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-01-10 12:35:21技術(shù)圖書徽章
日期:2016-01-15 11:07:2015-16賽季CBA聯(lián)賽之新疆
日期:2016-02-24 13:46:0215-16賽季CBA聯(lián)賽之吉林
日期:2016-06-26 01:07:172015-2016NBA季后賽紀念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16賽季CBA聯(lián)賽之浙江
日期:2017-07-18 13:41:54
4 [報告]
發(fā)表于 2015-01-27 19:04 |只看該作者
raw_socket不能滿足需求嗎?回復 1# liuyusen10


   

論壇徽章:
0
5 [報告]
發(fā)表于 2015-01-28 16:41 |只看該作者
謝謝你的回答。
請教你一個問題好嗎
我需要修改一個TCP包的選項長度為20Bytes,但是這個包現(xiàn)在的選項長度是12Bytes,怎么處理呢?回復 2# Tinnal


   

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
6 [報告]
發(fā)表于 2015-01-28 20:25 |只看該作者
回復 5# liuyusen10


    為什么要這么去做呢?有什么背后的需求?

論壇徽章:
0
7 [報告]
發(fā)表于 2015-01-29 14:32 |只看該作者
這個背后的需求的問題還比較難以闡述,簡單來講就是一個小項目剛好遇到了這樣的難題,發(fā)現(xiàn)TCP報文的選項需要進行一下填充。
有什么方法嗎?
回復 6# Tinnal


   

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
8 [報告]
發(fā)表于 2015-01-29 22:57 |只看該作者
回復 7# liuyusen10

TCP的選項字段是由如下的函數(shù)生成的,你非要option為20字節(jié),可以用的方法有:
1. 通過合理的現(xiàn)成TCP參數(shù),湊夠20個字節(jié)。但這個不好控制,以后的需求變更了就又得湊一次了。
2. 自己改改這個函數(shù),通過TCPOPT_NOP自己填充到20個字節(jié)。
  1. static void tcp_options_write(__be32 *ptr, struct tcp_sock *tp,
  2.                               struct tcp_out_options *opts)
  3. {
  4.         u8 options = opts->options;        /* mungable copy */

  5.         /* Having both authentication and cookies for security is redundant,
  6.          * and there's certainly not enough room.  Instead, the cookie-less
  7.          * extension variant is proposed.
  8.          *
  9.          * Consider the pessimal case with authentication.  The options
  10.          * could look like:
  11.          *   COOKIE|MD5(20) + MSS(4) + SACK|TS(12) + WSCALE(4) == 40
  12.          */
  13.         if (unlikely(OPTION_MD5 & options)) {
  14.                 if (unlikely(OPTION_COOKIE_EXTENSION & options)) {
  15.                         *ptr++ = htonl((TCPOPT_COOKIE << 24) |
  16.                                        (TCPOLEN_COOKIE_BASE << 16) |
  17.                                        (TCPOPT_MD5SIG << 8) |
  18.                                        TCPOLEN_MD5SIG);
  19.                 } else {
  20.                         *ptr++ = htonl((TCPOPT_NOP << 24) |
  21.                                        (TCPOPT_NOP << 16) |
  22.                                        (TCPOPT_MD5SIG << 8) |
  23.                                        TCPOLEN_MD5SIG);
  24.                 }
  25.                 options &= ~OPTION_COOKIE_EXTENSION;
  26.                 /* overload cookie hash location */
  27.                 opts->hash_location = (__u8 *)ptr;
  28.                 ptr += 4;
  29.         }

  30.         if (unlikely(opts->mss)) {
  31.                 *ptr++ = htonl((TCPOPT_MSS << 24) |
  32.                                (TCPOLEN_MSS << 16) |
  33.                                opts->mss);
  34.         }

  35.         if (likely(OPTION_TS & options)) {
  36.                 if (unlikely(OPTION_SACK_ADVERTISE & options)) {
  37.                         *ptr++ = htonl((TCPOPT_SACK_PERM << 24) |
  38.                                        (TCPOLEN_SACK_PERM << 16) |
  39.                                        (TCPOPT_TIMESTAMP << 8) |
  40.                                        TCPOLEN_TIMESTAMP);
  41.                         options &= ~OPTION_SACK_ADVERTISE;
  42.                 } else {
  43.                         *ptr++ = htonl((TCPOPT_NOP << 24) |
  44.                                        (TCPOPT_NOP << 16) |
  45.                                        (TCPOPT_TIMESTAMP << 8) |
  46.                                        TCPOLEN_TIMESTAMP);
  47.                 }
  48.                 *ptr++ = htonl(opts->tsval);
  49.                 *ptr++ = htonl(opts->tsecr);
  50.         }

  51.         /* Specification requires after timestamp, so do it now.
  52.          *
  53.          * Consider the pessimal case without authentication.  The options
  54.          * could look like:
  55.          *   MSS(4) + SACK|TS(12) + COOKIE(20) + WSCALE(4) == 40
  56.          */
  57.         if (unlikely(OPTION_COOKIE_EXTENSION & options)) {
  58.                 __u8 *cookie_copy = opts->hash_location;
  59.                 u8 cookie_size = opts->hash_size;

  60.                 /* 8-bit multiple handled in tcp_cookie_size_check() above,
  61.                  * and elsewhere.
  62.                  */
  63.                 if (0x2 & cookie_size) {
  64.                         __u8 *p = (__u8 *)ptr;

  65.                         /* 16-bit multiple */
  66.                         *p++ = TCPOPT_COOKIE;
  67.                         *p++ = TCPOLEN_COOKIE_BASE + cookie_size;
  68.                         *p++ = *cookie_copy++;
  69.                         *p++ = *cookie_copy++;
  70.                         ptr++;
  71.                         cookie_size -= 2;
  72.                 } else {
  73.                         /* 32-bit multiple */
  74.                         *ptr++ = htonl(((TCPOPT_NOP << 24) |
  75.                                         (TCPOPT_NOP << 16) |
  76.                                         (TCPOPT_COOKIE << 8) |
  77.                                         TCPOLEN_COOKIE_BASE) +
  78.                                        cookie_size);
  79.                 }

  80.                 if (cookie_size > 0) {
  81.                         memcpy(ptr, cookie_copy, cookie_size);
  82.                         ptr += (cookie_size / 4);
  83.                 }
  84.         }

  85.         if (unlikely(OPTION_SACK_ADVERTISE & options)) {
  86.                 *ptr++ = htonl((TCPOPT_NOP << 24) |
  87.                                (TCPOPT_NOP << 16) |
  88.                                (TCPOPT_SACK_PERM << 8) |
  89.                                TCPOLEN_SACK_PERM);
  90.         }

  91.         if (unlikely(OPTION_WSCALE & options)) {
  92.                 *ptr++ = htonl((TCPOPT_NOP << 24) |
  93.                                (TCPOPT_WINDOW << 16) |
  94.                                (TCPOLEN_WINDOW << 8) |
  95.                                opts->ws);
  96.         }

  97.         if (unlikely(opts->num_sack_blocks)) {
  98.                 struct tcp_sack_block *sp = tp->rx_opt.dsack ?
  99.                         tp->duplicate_sack : tp->selective_acks;
  100.                 int this_sack;

  101.                 *ptr++ = htonl((TCPOPT_NOP  << 24) |
  102.                                (TCPOPT_NOP  << 16) |
  103.                                (TCPOPT_SACK <<  8) |
  104.                                (TCPOLEN_SACK_BASE + (opts->num_sack_blocks *
  105.                                                      TCPOLEN_SACK_PERBLOCK)));

  106.                 for (this_sack = 0; this_sack < opts->num_sack_blocks;
  107.                      ++this_sack) {
  108.                         *ptr++ = htonl(sp[this_sack].start_seq);
  109.                         *ptr++ = htonl(sp[this_sack].end_seq);
  110.                 }

  111.                 tp->rx_opt.dsack = 0;
  112.         }
  113. }
復制代碼

論壇徽章:
0
9 [報告]
發(fā)表于 2015-02-02 14:37 |只看該作者
謝謝大神,我研究研究
回復 8# Tinnal


   

論壇徽章:
0
10 [報告]
發(fā)表于 2015-02-02 16:37 |只看該作者
回復 9# liuyusen10
單純的改一個包沒效果的
這個包之后的所有包都要修改
因為 ack 和seq字段變了

其實只要這兩個 字段 和校驗和 對
其他的 你隨便該
因為linux內(nèi)核包 data字段本身是按最大長度分配的


不過最好不好這樣做
除非你安全性要求低

因為一旦亂序的情況出現(xiàn)(一般情況下 tcp包是有序發(fā)送的如packet1 packet2 packet3,但協(xié)議本身是支持亂序的如 packet2 packet1 packet3),本條tcp鏈接就廢了。
你要是想考慮到所有情況,那就太復雜了

   
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP