├── go.mod ├── README.md └── main.go /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/vsec7/revip 2 | 3 | go 1.18 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # revip 2 | revip is a simple GO tool for reverse IP domain checker (scrap from rapiddns.io) 3 | 4 | Created By viloid (github.com/vsec7) 5 | 6 |

7 | 8 | 9 | 10 | ## • Requirement 11 | > go version: go1.18+ 12 | 13 | ## • Installation 14 | ``` 15 | go install -v github.com/vsec7/revip@latest 16 | ``` 17 | 18 | ```bash 19 | 20 | revip (Reverse IP) 21 | 22 | By : github.com/vsec7 23 | 24 | Basic Usage : 25 | ▶ echo domain.com | revip 26 | ▶ cat listurls.txt | revip 27 | 28 | Options : 29 | -o, --output Output to file 30 | 31 | ``` 32 | 33 | 34 | ## • Donate 35 | 36 | SOL Address : viloid.sol 37 | 38 | EVM Address : viloid.bnb | viloid.arb -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bufio" 5 | "flag" 6 | "fmt" 7 | "io/ioutil" 8 | "net/http" 9 | "os" 10 | "regexp" 11 | "strings" 12 | "sync" 13 | ) 14 | 15 | func revip(s string) [][]string { 16 | client := &http.Client{} 17 | req, _ := http.NewRequest("GET", "https://rapiddns.io/sameip/"+s+ 18 | "?full=1#result", nil) 19 | res, err := client.Do(req) 20 | if err != nil { 21 | } 22 | defer res.Body.Close() 23 | 24 | re := regexp.MustCompile(`\n(.*?)`) 25 | body, _ := ioutil.ReadAll(res.Body) 26 | r := re.FindAllStringSubmatch(string(body), -1) 27 | return r 28 | } 29 | 30 | func init() { 31 | flag.Usage = func() { 32 | h := []string{ 33 | "", 34 | "revip (Reverse IP)", 35 | "", 36 | "By : github.com/vsec7", 37 | "", 38 | "Basic Usage :", 39 | " ▶ echo domain.com | revip", 40 | " ▶ cat listurls.txt | revip", 41 | "", 42 | "Options :", 43 | " -o, --output Output to file", 44 | "", 45 | "", 46 | } 47 | fmt.Fprintf(os.Stderr, strings.Join(h, "\n")) 48 | } 49 | } 50 | 51 | func main() { 52 | 53 | var outputFile string 54 | flag.StringVar(&outputFile, "output", "", "Output File") 55 | flag.StringVar(&outputFile, "o", "", "Output File") 56 | 57 | flag.Parse() 58 | 59 | jobs := make(chan string) 60 | var wg sync.WaitGroup 61 | 62 | for i := 0; i <= 10; i++ { 63 | wg.Add(1) 64 | 65 | go func() { 66 | for u := range jobs { 67 | 68 | ri := revip(u) 69 | for _, d := range ri { 70 | fmt.Println(d[1]) 71 | 72 | if len(outputFile) != 0 { 73 | file, err := os.OpenFile(outputFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) 74 | if err != nil { 75 | fmt.Printf("[!] Failed Creating File: %s", err) 76 | } 77 | buf := bufio.NewWriter(file) 78 | buf.WriteString(d[1] + "\n") 79 | buf.Flush() 80 | file.Close() 81 | } 82 | } 83 | } 84 | wg.Done() 85 | }() 86 | } 87 | 88 | sc := bufio.NewScanner(os.Stdin) 89 | for sc.Scan() { 90 | jobs <- sc.Text() 91 | } 92 | close(jobs) 93 | wg.Wait() 94 | } 95 | --------------------------------------------------------------------------------