Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bytes"
- "net"
- "os"
- "os/exec"
- "time"
- )
- var filter = []byte("statusResponse")
- func masscan() {
- path, err := exec.LookPath("masscan")
- if err != nil {
- panic(err)
- }
- time.Sleep(time.Duration(5 * time.Second))
- // $ sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/masscan
- // $ cat payload.txt
- // udp 28000-30000 "\xff\xff\xff\xffgetstatus"
- cmd := exec.Command(path, "-iL", "subnets.txt", "--ports", "U:28000-30000", "--source-port", "29070", "--max-rate", "1000000", "--nmap-payloads", "payload.txt", "--ttl", "130")
- if err := cmd.Run(); err != nil {
- panic(err)
- }
- os.Exit(0)
- }
- func handler(listener net.PacketConn, addr net.Addr, buffer []byte) {
- if bytes.Equal(buffer[4:18], filter) {
- players := bytes.Split(buffer, []byte("\n"))
- if len(players) >= 4 {
- println("[", addr.String(), "]")
- for _, v := range players[2 : len(players)-1] {
- pos := bytes.IndexRune(v, '"')
- println(string(v[pos:]))
- }
- } else {
- println(addr.String(), "server is empty")
- }
- }
- }
- func main() {
- listener, err := net.ListenPacket("udp4", "0.0.0.0:29070")
- if err != nil {
- panic(err)
- }
- defer listener.Close()
- go masscan()
- for {
- buffer := make([]byte, 2048)
- n, addr, err := listener.ReadFrom(buffer)
- if err != nil {
- continue
- }
- go handler(listener, addr, buffer[:n])
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement