initial
This commit is contained in:
commit
9b454cf827
16
README.md
Normal file
16
README.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# ircdeez
|
||||||
|
ircdeeznuts, find yourself some ircd's
|
||||||
|
|
||||||
|
# usage
|
||||||
|
```
|
||||||
|
-r | CIDR range to scan
|
||||||
|
-l | list of addresses to scan
|
||||||
|
-p | ip:port socks5 proxy list
|
||||||
|
-i | ircd port [6667]
|
||||||
|
-n | number of proxies to cycle per ip [1]
|
||||||
|
-t | threads [100]
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
ircdeez -r 0.0.0.0/0 -p socks.txt -n 3 -t 1000
|
||||||
|
```
|
6
go.sum
Normal file
6
go.sum
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
github.com/h12w/go-socks5 v0.0.0-20200522160539-76189e178364 h1:5XxdakFhqd9dnXoAZy1Mb2R/DZ6D1e+0bGC/JhucGYI=
|
||||||
|
github.com/h12w/go-socks5 v0.0.0-20200522160539-76189e178364/go.mod h1:eDJQioIyy4Yn3MVivT7rv/39gAJTrA7lgmYr8EW950c=
|
||||||
|
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
|
||||||
|
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
|
||||||
|
h12.io/socks v1.0.3 h1:Ka3qaQewws4j4/eDQnOdpr4wXsC//dXtWvftlIcCQUo=
|
||||||
|
h12.io/socks v1.0.3/go.mod h1:AIhxy1jOId/XCz9BO+EIgNL2rQiPTBNnOfnVnQ+3Eck=
|
247
main.go
Normal file
247
main.go
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
// ircdeeznuts
|
||||||
|
//
|
||||||
|
// go build . && ./ircdeez -h
|
||||||
|
//
|
||||||
|
// sincerely,
|
||||||
|
// delorean
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"h12.io/socks"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Proxy struct {
|
||||||
|
Addr string
|
||||||
|
Port int
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
proxylist = flag.String("p", "", "socks5 proxy list")
|
||||||
|
rangearg = flag.String("r", "", "ip range cidr")
|
||||||
|
list = flag.String("l", "", "target list")
|
||||||
|
ircdport = flag.Int("i", 6667, "ircd port")
|
||||||
|
retries = flag.Int("n", 1, "number of proxy retries per target address")
|
||||||
|
threads = flag.Int("t", 100, "threads")
|
||||||
|
)
|
||||||
|
|
||||||
|
var proxies []Proxy
|
||||||
|
var proxying = false
|
||||||
|
|
||||||
|
func pullproxies(path string) ([]Proxy, error) {
|
||||||
|
var arr []Proxy
|
||||||
|
|
||||||
|
f, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
s := bufio.NewScanner(f)
|
||||||
|
for s.Scan() {
|
||||||
|
p := strings.Split(s.Text(), ":")
|
||||||
|
if len(p) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
port, e := strconv.Atoi(p[1])
|
||||||
|
if e != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
arr = append(arr, Proxy{Addr: p[0], Port: port})
|
||||||
|
}
|
||||||
|
|
||||||
|
return arr, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func readbanner(c net.Conn) (string, error) {
|
||||||
|
buf := make([]byte, 2048)
|
||||||
|
c.SetReadDeadline(time.Now().Add(time.Second * 10))
|
||||||
|
numread, err := c.Read(buf)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
banner := string(buf[0:numread])
|
||||||
|
return banner, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func proxydial(addr string, port int, rproxy Proxy) error {
|
||||||
|
proxydest := fmt.Sprintf("socks5://%s:%d?timeout=5s", rproxy.Addr, rproxy.Port)
|
||||||
|
dialSocksProxy := socks.Dial(proxydest)
|
||||||
|
|
||||||
|
dest := fmt.Sprintf("%s:%d", addr, port)
|
||||||
|
conn, e := dialSocksProxy("tcp", dest)
|
||||||
|
if e != nil {
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
banner, e := readbanner(conn)
|
||||||
|
if e != nil {
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.Contains(banner, "NOTICE") {
|
||||||
|
fmt.Println(addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
conn.Close()
|
||||||
|
return nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func rawdog(addr string, port int) error {
|
||||||
|
dest := fmt.Sprintf("%s:%d", addr, port)
|
||||||
|
conn, e := net.DialTimeout("tcp", dest, time.Second*5)
|
||||||
|
if e != nil {
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
banner, e := readbanner(conn)
|
||||||
|
if e != nil {
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.Contains(banner, "NOTICE") {
|
||||||
|
fmt.Println(addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
conn.Close()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func randproxy() Proxy {
|
||||||
|
return proxies[rand.Intn(len(proxies))]
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
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 thread(in <-chan string, tracker chan<- interface{}) {
|
||||||
|
for ip := range in {
|
||||||
|
c := 0
|
||||||
|
if proxying {
|
||||||
|
for {
|
||||||
|
if c == *retries {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
p := randproxy()
|
||||||
|
if e := proxydial(ip, *ircdport, p); e == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
c++
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_ = rawdog(ip, *ircdport)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tracker <- 1337
|
||||||
|
}
|
||||||
|
|
||||||
|
func usage() {
|
||||||
|
fmt.Printf(`ircdeeznuts
|
||||||
|
-r <cidr> ipv4 cidr range to scan
|
||||||
|
-l <file> target ip's
|
||||||
|
-p <file> proxy list
|
||||||
|
-i <port> port for ircd's [6667]
|
||||||
|
-n <num> # of proxies to cycle per failure [3]
|
||||||
|
-t <num> threads [100]
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func fatal(e string) {
|
||||||
|
fmt.Printf("fatal: %s\n", e)
|
||||||
|
os.Exit(-1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Usage = usage
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
if *list == "" && *rangearg == "" {
|
||||||
|
fatal("provide either a list of ip's (-l) or a cidr range (-r)")
|
||||||
|
}
|
||||||
|
|
||||||
|
if *list != "" && *rangearg != "" {
|
||||||
|
fatal("received both a range and a list, one at a time nigga")
|
||||||
|
}
|
||||||
|
|
||||||
|
if *proxylist != "" {
|
||||||
|
temp, e := pullproxies(*proxylist)
|
||||||
|
if e != nil {
|
||||||
|
fatal(e.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(temp) < 1 {
|
||||||
|
fatal("no valid proxies retrieved")
|
||||||
|
}
|
||||||
|
|
||||||
|
proxies = temp
|
||||||
|
proxying = true
|
||||||
|
}
|
||||||
|
|
||||||
|
ips := make(chan string)
|
||||||
|
tracker := make(chan interface{})
|
||||||
|
rand.Seed(time.Now().Unix())
|
||||||
|
|
||||||
|
for x := 0; x < *threads; x++ {
|
||||||
|
go thread(ips, tracker)
|
||||||
|
}
|
||||||
|
|
||||||
|
if *rangearg != "" {
|
||||||
|
e := runCIDR(*rangearg, ips)
|
||||||
|
if e != nil {
|
||||||
|
fatal("error parsing cidr range")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fd, e := os.Open(*list)
|
||||||
|
if e != nil {
|
||||||
|
fatal(e.Error())
|
||||||
|
}
|
||||||
|
defer fd.Close()
|
||||||
|
fs := bufio.NewScanner(fd)
|
||||||
|
|
||||||
|
for fs.Scan() {
|
||||||
|
line := strings.ReplaceAll(fs.Text(), " ", "")
|
||||||
|
if len(line) > 0 {
|
||||||
|
ips <- line
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close(ips)
|
||||||
|
|
||||||
|
for x := 0; x < *threads; x++ {
|
||||||
|
<-tracker
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user