70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
"math/rand"
|
|
"net"
|
|
"time"
|
|
)
|
|
|
|
// isPrivate checks if the IP address falls within private IP ranges
|
|
func isPrivate(ip [4]byte) bool {
|
|
switch {
|
|
case ip[0] == 10:
|
|
return true
|
|
case ip[0] == 172 && ip[1] >= 16 && ip[1] <= 31:
|
|
return true
|
|
case ip[0] == 192 && ip[1] == 168:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
var triedIPs []net.IP
|
|
|
|
// generateRandomPublicIP generates a random public IP address
|
|
func generateRandomPublicIP() net.IP {
|
|
rand.NewSource(time.Now().UnixNano())
|
|
var ipTemp [4]byte
|
|
var ip net.IP
|
|
for {
|
|
ipTemp[0] = byte(rand.Intn(255)) + 1
|
|
ipTemp[1] = byte(rand.Intn(256))
|
|
ipTemp[2] = byte(rand.Intn(256))
|
|
ipTemp[3] = byte(rand.Intn(256))
|
|
|
|
ip = net.IPv4(ipTemp[0], ipTemp[1], ipTemp[2], ipTemp[3])
|
|
|
|
// Ensure the generated IP is not in a private range
|
|
if !ip.IsPrivate() && !ip.IsLoopback() { // Exclude 0.x.x.x and 127.x.x.x (loopback)
|
|
dupe := false
|
|
for _, ipTried := range triedIPs {
|
|
if ipTried.Equal(ip) {
|
|
dupe = true
|
|
}
|
|
}
|
|
if !dupe {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return ip
|
|
}
|
|
|
|
func doIPScan() {
|
|
randomIP := generateRandomPublicIP()
|
|
_, err := PingIP(randomIP, 25565, "")
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
for i := 0; i < 100000000; i++ {
|
|
go doIPScan()
|
|
time.Sleep(time.Duration(rand.Intn(10)) * time.Millisecond)
|
|
}
|
|
}
|