initial
This commit is contained in:
commit
7245f81c4c
18
README.md
Normal file
18
README.md
Normal file
@ -0,0 +1,18 @@
|
||||
```
|
||||
got some intelligence for u
|
||||
right here
|
||||
_ _
|
||||
|_| |_|
|
||||
| | /^^^\ | |
|
||||
_| |_ (| "o" |) _| |_
|
||||
_| | | | _ (_---_) _ | | | |_
|
||||
| | | | |' | _| |_ | '| | | | |
|
||||
| | / \ | |
|
||||
\ / / /(. .)\ \ \ /
|
||||
\ / / / | . | \ \ \ /
|
||||
\ \/ / ||Y|| \ \/ /
|
||||
\__/ || || \__/
|
||||
() ()
|
||||
|| ||
|
||||
ooO Ooo
|
||||
```
|
5
go.mod
Normal file
5
go.mod
Normal file
@ -0,0 +1,5 @@
|
||||
module gaynoise
|
||||
|
||||
go 1.21.0
|
||||
|
||||
require github.com/google/gopacket v1.1.19 // indirect
|
14
go.sum
Normal file
14
go.sum
Normal file
@ -0,0 +1,14 @@
|
||||
github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
|
||||
github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
317
main.go
Normal file
317
main.go
Normal file
@ -0,0 +1,317 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"flag"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"net"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/google/gopacket"
|
||||
"github.com/google/gopacket/layers"
|
||||
)
|
||||
|
||||
var (
|
||||
// flags
|
||||
cidr = flag.String("r", "", "cidr to target")
|
||||
duration = flag.Int("t", -1, "duration (seconds)")
|
||||
workers = flag.Int("c", 10, "threads")
|
||||
delay = flag.Int("u", 0, "usec delay between sends")
|
||||
|
||||
// colors
|
||||
colorReset = "\033[0m"
|
||||
colorRed = "\033[31m"
|
||||
colorPurple = "\033[35m"
|
||||
colorCyan = "\033[36m"
|
||||
skull = "\u2620"
|
||||
|
||||
// target ports
|
||||
ports = []int{21, 22, 23, 80, 123, 389, 443}
|
||||
)
|
||||
|
||||
func winsize(system int) uint16 {
|
||||
switch system {
|
||||
case 1:
|
||||
return 29200 // Linux
|
||||
case 2:
|
||||
return 5840 // Linux
|
||||
case 3:
|
||||
return 5720 // Linux
|
||||
case 4:
|
||||
return 10220 // Linux
|
||||
case 5:
|
||||
return 14600 // Linux
|
||||
case 6:
|
||||
return 8192 // Windows
|
||||
case 7:
|
||||
return 65535 // Windows
|
||||
case 8:
|
||||
return 65535 // MacOS, FreeBSD
|
||||
case 9:
|
||||
return 16384 // OpenBSD
|
||||
case 10:
|
||||
return 4128 // Cisco IOS
|
||||
case 11:
|
||||
return 32850 // Solaris
|
||||
case 12:
|
||||
return 49640 // Solaris
|
||||
default:
|
||||
return 8192
|
||||
}
|
||||
}
|
||||
|
||||
func ittl(system int) uint8 {
|
||||
switch system {
|
||||
case 6:
|
||||
return 128 // Windows
|
||||
case 7:
|
||||
return 128 // Windows
|
||||
case 10:
|
||||
return 255 // Cisco IOS
|
||||
default:
|
||||
return 64 // Linux, MacOS, FreeBSD, OpenBSD, Solaris
|
||||
}
|
||||
}
|
||||
|
||||
func assemble(daddr, saddr string, dport, sport, system int) ([]byte, error) {
|
||||
ip := &layers.IPv4{
|
||||
SrcIP: net.ParseIP(saddr).To4(),
|
||||
DstIP: net.ParseIP(daddr).To4(),
|
||||
Version: 4,
|
||||
TTL: ittl(system),
|
||||
Protocol: layers.IPProtocolTCP,
|
||||
}
|
||||
|
||||
tcp := &layers.TCP{
|
||||
SrcPort: layers.TCPPort(sport),
|
||||
DstPort: layers.TCPPort(dport),
|
||||
Window: winsize(system),
|
||||
Seq: rand.Uint32(),
|
||||
SYN: true,
|
||||
}
|
||||
|
||||
opts := gopacket.SerializeOptions{
|
||||
FixLengths: true,
|
||||
ComputeChecksums: true,
|
||||
}
|
||||
|
||||
payload := []byte{}
|
||||
pl := gopacket.Payload(payload)
|
||||
|
||||
buf := gopacket.NewSerializeBuffer()
|
||||
|
||||
if err := tcp.SetNetworkLayerForChecksum(ip); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := gopacket.SerializeLayers(buf, opts, ip, tcp, pl); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
packet := buf.Bytes()
|
||||
return packet, nil
|
||||
}
|
||||
|
||||
func rfc1918(ip net.IP) bool {
|
||||
_, net0, _ := net.ParseCIDR("0.0.0.0/8")
|
||||
_, net10, _ := net.ParseCIDR("10.0.0.0/8")
|
||||
_, net192, _ := net.ParseCIDR("192.168.0.0/16")
|
||||
_, net172, _ := net.ParseCIDR("172.16.0.0/12")
|
||||
|
||||
if net0.Contains(ip) || net10.Contains(ip) || net192.Contains(ip) || net172.Contains(ip) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func sendpacket(fd int, packet []byte, addr string) error {
|
||||
ip := net.ParseIP(addr)
|
||||
dest := format4(ip)
|
||||
if err := syscall.Sendto(fd, packet, 0, &dest); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func rawsocket() (int, error) {
|
||||
handler, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_RAW)
|
||||
if err != nil {
|
||||
return -1, err
|
||||
}
|
||||
return handler, nil
|
||||
}
|
||||
|
||||
func format4(ip net.IP) (addr syscall.SockaddrInet4) {
|
||||
addr = syscall.SockaddrInet4{Port: 0}
|
||||
copy(addr.Addr[:], ip.To4()[0:4])
|
||||
return addr
|
||||
}
|
||||
|
||||
func runCIDR(cidr string, out chan string) error {
|
||||
ip, ipnet, err := net.ParseCIDR(cidr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for target := ip.Mask(ipnet.Mask); ipnet.Contains(target); inc(target) {
|
||||
if rfc1918(target) {
|
||||
continue
|
||||
}
|
||||
addr, _ := net.ResolveIPAddr("ip", target.String())
|
||||
out <- addr.String()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func inc(ip net.IP) {
|
||||
for j := len(ip) - 1; j >= 0; j-- {
|
||||
ip[j]++
|
||||
if ip[j] > 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func randIP() string {
|
||||
for {
|
||||
buf := make([]byte, 4)
|
||||
ip := rand.Uint32()
|
||||
binary.LittleEndian.PutUint32(buf, ip)
|
||||
nip := net.IP(buf)
|
||||
if !rfc1918(nip) {
|
||||
return nip.String()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func thread(addrs chan string) {
|
||||
sock, err := rawsocket()
|
||||
if err != nil {
|
||||
fatal(err)
|
||||
}
|
||||
defer syscall.Close(sock)
|
||||
for addr := range addrs {
|
||||
rip := randIP()
|
||||
dport := ports[rand.Intn(len(ports))]
|
||||
sport := 1024 + rand.Intn(64511)
|
||||
syst := 1 + rand.Intn(11)
|
||||
|
||||
pkt, _ := assemble(addr, rip, dport, sport, syst)
|
||||
|
||||
fmt.Printf("[%s%s%s] %s%s:%d%s -> %s%s%s:%s%d%s\n", colorRed, sysident(syst), colorReset, colorCyan, rip, sport, colorReset, colorPurple, addr, colorReset, colorCyan, dport, colorReset)
|
||||
|
||||
sendpacket(sock, pkt, addr)
|
||||
time.Sleep(time.Microsecond * time.Duration(*delay))
|
||||
}
|
||||
}
|
||||
|
||||
func sysident(id int) string {
|
||||
if id >= 1 && id <= 5 {
|
||||
return "Linux"
|
||||
} else if id >= 6 && id <= 7 {
|
||||
return "Windows"
|
||||
} else if id == 8 {
|
||||
return "MacOS/FreeBSD"
|
||||
} else if id == 9 {
|
||||
return "OpenBSD"
|
||||
} else if id == 10 {
|
||||
return "Cisco IOS"
|
||||
} else if id >= 11 && id <= 12 {
|
||||
return "Solaris"
|
||||
} else {
|
||||
return "Windows"
|
||||
}
|
||||
}
|
||||
|
||||
func banner() {
|
||||
fmt.Printf(`
|
||||
%sgot some intelligence for u
|
||||
right here%s%s
|
||||
_ _
|
||||
|_| |_|
|
||||
| | /^^^\ | |
|
||||
_| |_ (| "o" |) _| |_
|
||||
_| | | | _ (_---_) _ | | | |_
|
||||
| | | | |' | _| |_ | '| | | | |
|
||||
| | / \ | |
|
||||
\ / / /(. .)\ \ \ /
|
||||
\ / / / | . | \ \ \ /
|
||||
\ \/ / ||Y|| \ \/ /
|
||||
\__/ || || \__/
|
||||
() ()
|
||||
|| ||
|
||||
ooO Ooo
|
||||
|
||||
%s%sg a y n o i s e%s
|
||||
|
||||
sincerely,
|
||||
~ delorean
|
||||
|
||||
`, colorRed, colorReset, colorCyan, colorReset, colorPurple, colorReset)
|
||||
}
|
||||
|
||||
func usage() {
|
||||
fmt.Fprintf(os.Stderr, `gaynoise:
|
||||
(%s-r%s) - cidr range [%s0.0.0.0/0%s]
|
||||
(%s-c%s) - concurrent threads [%s100%s]
|
||||
(%s-t%s) - duration [%s-1%s]
|
||||
(%s-p%s) - usec delay between sends [%s0%s]
|
||||
`, colorCyan, colorReset, colorPurple, colorReset, colorCyan, colorReset, colorPurple, colorReset, colorCyan, colorReset, colorPurple, colorReset, colorCyan, colorReset, colorPurple, colorReset)
|
||||
}
|
||||
|
||||
func fatal(e error) {
|
||||
fmt.Printf("%s %s error:%s %s\n", colorRed, skull, colorReset, e)
|
||||
os.Exit(-1)
|
||||
}
|
||||
|
||||
func alarm(secs int) {
|
||||
time.Sleep(time.Second * time.Duration(secs))
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Usage = usage
|
||||
flag.Parse()
|
||||
|
||||
var target string
|
||||
if *cidr == "" {
|
||||
target = "0.0.0.0/0"
|
||||
} else {
|
||||
target = *cidr
|
||||
}
|
||||
|
||||
// signals
|
||||
sigs := make(chan os.Signal, 1)
|
||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||
go func() {
|
||||
<-sigs
|
||||
fmt.Printf("\n%s%s Stopped%s\n", colorRed, skull, colorReset)
|
||||
os.Exit(1)
|
||||
}()
|
||||
|
||||
// threads
|
||||
addrs := make(chan string)
|
||||
go func() {
|
||||
for x := 0; x < *workers; x++ {
|
||||
thread(addrs)
|
||||
}
|
||||
}()
|
||||
|
||||
// start alarm
|
||||
if *duration > 0 {
|
||||
go alarm(*duration)
|
||||
}
|
||||
|
||||
banner()
|
||||
|
||||
for {
|
||||
if e := runCIDR(target, addrs); e != nil {
|
||||
fatal(e)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user