yellow.git


yellow

~ opinionated web scanning pipeline for pentesters in a hurry
git clone https://github.com/djnnvx/yellow.git
log | files | refs | archive | README | LICENSE

cdn.go (933B)

      1 package helper
      2 
      3 import (
      4 	"fmt"
      5 	"net"
      6 	"sync"
      7 
      8 	"github.com/projectdiscovery/cdncheck"
      9 )
     10 
     11 type CDNInfo struct {
     12 	Type     string `json:"type"` // cdn | waf | cloud
     13 	Provider string `json:"provider"`
     14 }
     15 
     16 var (
     17 	cdnOnce   sync.Once
     18 	cdnClient *cdncheck.Client
     19 )
     20 
     21 func LookupCDN(ip net.IP) *CDNInfo {
     22 	cdnOnce.Do(func() {
     23 		client, err := cdncheck.NewWithOpts(3, nil)
     24 		if err != nil {
     25 			fmt.Printf("[!] cdncheck: unavailable, edge detection disabled: %v\n", err)
     26 			return
     27 		}
     28 		cdnClient = client
     29 	})
     30 
     31 	if cdnClient == nil || ip == nil {
     32 		return nil
     33 	}
     34 
     35 	matched, provider, itemType, err := cdnClient.Check(ip)
     36 	if err != nil || !matched {
     37 		return nil
     38 	}
     39 	return &CDNInfo{Type: itemType, Provider: provider}
     40 }
     41 
     42 // SkipPortScan only skips WAFs. cdncheck files ordinary GCE compute under
     43 // "cdn/google", so skipping on cdn would drop real origins.
     44 func SkipPortScan(info *CDNInfo) bool {
     45 	return info != nil && info.Type == "waf"
     46 }