tcp_gen.c
上传用户:bobuwen
上传日期:2007-01-07
资源大小:10k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* RAW socket utility routine:
  2.  * 
  3.  * Write out a TCP header.
  4.  * shadows@whitefang.com
  5.  * Thamer Al-Herbish
  6.  */
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <sys/types.h>
  10. #include <sys/socket.h>
  11. #include <netinet/in.h>
  12. #include <arpa/inet.h>
  13. #include <netinet/in_systm.h>
  14. #if defined(LINUX)
  15. #include <linux/tcp.h>
  16. #else
  17. #include <netinet/tcp.h>
  18. #endif
  19. #include <unistd.h>
  20. #include <string.h>
  21. #if defined(X2_OFF)         /* SCO */
  22. #define TH_OFFSET 0x50         /* TCP header offset */
  23. #else
  24. #define TH_OFFSET 5
  25. #endif
  26. #define TCP_WINDOW_SIZE 512 /* Just have it hardcoded. */
  27. void tcp_gen(char *packet,unsigned short sport,
  28.      unsigned short dport,unsigned long seq,
  29.      unsigned long ack)
  30. {
  31.   struct tcphdr *tcp;
  32.   
  33.   tcp = (struct tcphdr *)packet;
  34.   memset((char *)tcp,'',sizeof(struct tcphdr));
  35. #if !defined(LINUX)
  36.   tcp->th_sport = htons(sport);
  37.   tcp->th_dport = htons(dport);
  38.   
  39.   tcp->th_seq = htonl(seq);
  40.   tcp->th_ack = htonl(ack);
  41.   
  42. #ifdef X2_OFF
  43.   tcp->th_x2_off = TH_OFFSET;
  44. #else /* X2_OFF */
  45.   tcp->th_off = TH_OFFSET;
  46.   tcp->th_x2 = 0;
  47. #endif /* X2_OFF */
  48.   tcp->th_win = htons(TCP_WINDOW_SIZE);
  49.   tcp->th_flags = TH_FIN;
  50.   
  51. #else /* LINUX */
  52.   tcp->source = htons(sport);
  53.   tcp->dest = htons(dport);
  54.   
  55.   tcp->seq = htonl(seq);
  56.   tcp->ack_seq = htonl(ack);
  57.   
  58.   tcp->res1 = 0;
  59.   tcp->doff = TH_OFFSET;
  60.   tcp->window = htons(TCP_WINDOW_SIZE);
  61.   tcp->fin = 1;
  62. #endif /* LINUX */
  63.   return;
  64. }