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

  免費注冊 查看新帖 |

Chinaunix

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

raw socket里能不能只自己制造tcp頭而不制造ip頭? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-03-05 14:15 |只看該作者 |倒序瀏覽
socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
沒有設(shè)置IP_HDRINCL;

文檔說不設(shè)置IP_HDRINCL.就可以讓系統(tǒng)幫忙處理ip頭了,所以我只制造了tcp頭,
發(fā)的時候也發(fā)了,但是沒發(fā)到對方機器,
本機抓到了發(fā)的包,但是tcpdump顯示:
"tcp 120 [bad hdr length 0 - too short, < 20]"

可是tcp頭里沒有設(shè)置長度的地方,只有ip頭里才有設(shè)置包長的地方,
那么不還是要設(shè)置ip頭?


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <netinet/in.h>
  5. #include <netinet/ip.h>
  6. #define __FAVOR_BSD
  7. #include <netinet/tcp.h>
  8. #include <sys/socket.h>
  9. #include <sys/types.h>
  10. #include <arpa/inet.h>
  11. #include <errno.h>
  12. #include <string.h>


  13. int main(void) {
  14.   int i, count = 10;
  15.   char *ip = "192.168.0.2";
  16.   unsigned short port = 21;
  17.   int sock;
  18.   struct sockaddr_in daddr;

  19.   char data[2048];
  20.   struct tcphdr *tcph = (struct tcphdr *)data;

  21.   // build daddr;
  22.   memset(&daddr, 0, sizeof(struct sockaddr_in));
  23.   daddr.sin_family = AF_INET;
  24.   daddr.sin_port = htons(port);
  25.   daddr.sin_addr.s_addr = inet_addr(ip);

  26.   sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
  27.   if (sock < 0) {
  28.     perror("sock");
  29.     exit(1);
  30.   }
  31.   memset(data, 0, 2048);

  32.   // build tcp header
  33.   tcph->th_sport = htons(1024);
  34.   tcph->th_dport = htons(port);
  35.   tcph->th_seq = 123456789;
  36.   tcph->th_ack = 0;
  37.   tcph->th_x2 = 0;
  38.   tcph->th_off = 0;
  39.   tcph->th_flags = TH_SYN;
  40.   tcph->th_win = htonl(65535);
  41.   tcph->th_sum = 0;
  42.   tcph->th_urp = 0;

  43.   for(i = 0; i < count; i++) {
  44.     if(sendto(sock, data, /*sizeof(data)*/ sizeof(struct tcphdr)+100, 0, (struct sockaddr *) &daddr, sizeof(daddr)) < 0)
  45.       perror("sendto");
  46.     else
  47.       printf(".");
  48.     fflush(stdout);
  49.   }
  50.   return(0);
  51. }

復(fù)制代碼

論壇徽章:
0
2 [報告]
發(fā)表于 2008-03-05 15:47 |只看該作者
錯在哪呢? 自己制造ip頭也是出這樣的錯,

我見有的人的代碼里有這樣一個偽頭

  1.         struct pseudohdr  {
  2.            unsigned long saddr;
  3.            unsigned long daddr;
  4.            char useless;
  5.            unsigned char protocol;
  6.            unsigned int tcplength;
  7.         };

復(fù)制代碼


有注釋說是為了計算cksum時用到,為什么呢?

ip頭結(jié)構(gòu), netinet/ip.h里早就定義好了
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(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