├── 1572965182757.jpg ├── 1572965432978.jpg ├── README.md ├── core.go ├── fuckcdn ├── fuckcdn.log └── main.go /1572965182757.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HToTH/fuckcdn/eeef2fe89d143c3e8756ff802946f4dfe703e2ae/1572965182757.jpg -------------------------------------------------------------------------------- /1572965432978.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HToTH/fuckcdn/eeef2fe89d143c3e8756ff802946f4dfe703e2ae/1572965432978.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fuckcdn 2 | 全网扫描找出真实IP 3 | # 方法 4 | ![方法](https://raw.githubusercontent.com/HToTH/fuckcdn/master/1572965182757.jpg) 5 | # 例子 6 | ![例子](https://raw.githubusercontent.com/HToTH/fuckcdn/master/1572965432978.jpg) 7 | -------------------------------------------------------------------------------- /core.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "io" 6 | "net" 7 | "os" 8 | "strconv" 9 | "strings" 10 | "time" 11 | ) 12 | 13 | func Getip() { 14 | } 15 | func CheckPortOpen(ip string) bool { 16 | 17 | _, err := net.DialTimeout("tcp", ip, time.Second*1) 18 | if err != nil { 19 | return false 20 | } 21 | return true 22 | } 23 | func FindWord(ip, value string) bool { 24 | return strings.Contains(ip, value) 25 | } 26 | func (data *Data) GetHttpResponse(ip string, c chan string) string { 27 | if CheckPortOpen(ip) == false { 28 | c <- "0" 29 | return "0" 30 | } 31 | conn, err := net.Dial("tcp", ip) 32 | if err != nil { 33 | //fmt.Println("error dialing", err.Error()) 34 | c <- "0" 35 | return "0" 36 | } 37 | msg := "GET / HTTP/1.1\r\n" 38 | msg += "Host:" + data.domain + "\r\n" 39 | msg += "DNT: 1\r\n" 40 | msg += "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36\r\n" 41 | msg += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\n" 42 | // msg += "Accept-Encoding: gzip, deflate\r\n" 43 | msg += "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8\r\n" 44 | msg += "Connection: close\r\n" 45 | msg += "\r\n\r\n" 46 | defer conn.Close() 47 | _, err = io.WriteString(conn, msg) 48 | if err != nil { 49 | fmt.Println("write string failed", err) 50 | return "0" 51 | } 52 | 53 | buf := make([]byte, 4096) 54 | count, err := conn.Read(buf) 55 | 56 | if err != nil { 57 | //fmt.Println("read string failed", err) 58 | c <- "0" 59 | return "0" 60 | } 61 | if FindWord(string(buf[0:count]), data.value) { 62 | tmp := ":" 63 | if FindWord(string(buf[0:count]), "CF-Cache-Status") { 64 | tmp = ":cloudFlare Cdn" 65 | } 66 | ip = ip + tmp 67 | c <- ip 68 | return ip 69 | } else { 70 | c <- "0" 71 | return "0" 72 | } 73 | } 74 | 75 | //将10进制IP转成正常IP格式 76 | func TenToNormalIp(ip int64) string { 77 | s2 := strconv.FormatInt(ip, 2) //10 yo 2 78 | s3 := string(s2) //tostring 79 | s := "" //填充字符串 80 | if len(s3) < 32 { 81 | for i := 1; i < 32-len(s3)+1; i++ { 82 | s = s + "0" 83 | } 84 | } 85 | s3 = s + s3 86 | //分割二进制变成10进制int64 87 | b1, _ := strconv.ParseUint(s3[0:8], 2, 8) 88 | b2, _ := strconv.ParseUint(s3[8:16], 2, 8) 89 | b3, _ := strconv.ParseUint(s3[16:24], 2, 8) 90 | b4, _ := strconv.ParseUint(s3[24:32], 2, 8) 91 | //10进制int64转string 92 | d1 := strconv.FormatUint(b1, 10) 93 | d2 := strconv.FormatUint(b2, 10) 94 | d3 := strconv.FormatUint(b3, 10) 95 | d4 := strconv.FormatUint(b4, 10) 96 | ips := d1 + "." + d2 + "." + d3 + "." + d4 97 | return ips 98 | } 99 | 100 | func (data *Data) Start(port int64, i int, c chan string, thread int, end int) { 101 | p_temp := strconv.FormatInt(port, 10) 102 | d := i 103 | for ; i < d+thread; i++ { 104 | ip := TenToNormalIp(int64(i)) 105 | ips := ip + ":" + p_temp 106 | go data.GetHttpResponse(ips, c) 107 | } 108 | if i < end { 109 | time.Sleep(time.Millisecond * 1000) 110 | data.Start(port, i, c, thread, end) 111 | } 112 | } 113 | 114 | func (data *Data) ReciveMessage(c chan string) { 115 | i := 0.0 116 | d := 4278124286.0 117 | for { 118 | select { 119 | case res := <-c: 120 | if res != "0" { 121 | dd := strings.Split(res, ":") 122 | f, err := os.OpenFile("fuckcdn.log", os.O_APPEND|os.O_RDWR, 0777) 123 | if err != nil { 124 | fmt.Printf("open err%s", err) 125 | return 126 | } 127 | s := fmt.Sprintf("ip:%s,port:%s,domain:%s,关键字:%s,备注:%s\n", dd[0], dd[1], data.domain, data.value, dd[2]) 128 | f.WriteString(s) 129 | f.Close() 130 | fmt.Printf("ip:%s,port:%s,domain:%s,关键字:%s,备注:%s\n", dd[0], dd[1], data.domain, data.value, dd[2]) 131 | } else { 132 | fmt.Printf("\r%.8f%", i/d*100) 133 | } 134 | case <-time.After(time.Second * 1): 135 | fmt.Printf("\r%.8f%", i/d*100) 136 | } 137 | i++ 138 | } 139 | } 140 | 141 | func NormalIpToten(ip string) int { 142 | ips := strings.Split(ip, ".") 143 | if len(ips) == 4 { 144 | b1, err := strconv.Atoi(ips[0]) 145 | b2, err := strconv.Atoi(ips[1]) 146 | b3, err := strconv.Atoi(ips[2]) 147 | b4, err := strconv.Atoi(ips[3]) 148 | if err != nil || checkNum(b1, 3) == -1 || checkNum(b2, 2) == -1 || checkNum(b3, 1) == -1 || checkNum(b4, 0) == -1 { 149 | fmt.Print("IP地址错误") 150 | return -1 151 | } 152 | return checkNum(b1, 3) + checkNum(b2, 2) + checkNum(b3, 1) + checkNum(b4, 0) 153 | } else { 154 | fmt.Print("IP地址错误") 155 | return -1 156 | } 157 | } 158 | func checkNum(i, d int) int { 159 | cc := 1 * i 160 | if i >= 0 && i <= 255 { 161 | for c := 0; c < d; c++ { 162 | cc = 256 * cc 163 | } 164 | return cc 165 | } else { 166 | return -1 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /fuckcdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HToTH/fuckcdn/eeef2fe89d143c3e8756ff802946f4dfe703e2ae/fuckcdn -------------------------------------------------------------------------------- /fuckcdn.log: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | 7 | "github.com/urfave/cli" 8 | ) 9 | 10 | type Data struct { 11 | domain string 12 | value string 13 | } 14 | 15 | func (data *Data) test(c chan bool) string { 16 | 17 | c <- false 18 | if 1 == 1 { 19 | return "sdfs" 20 | } 21 | fmt.Print(13213) 22 | return "sdf" 23 | 24 | } 25 | 26 | func main() { 27 | 28 | var domain, value, beginIp, endIp string 29 | var port int64 30 | var thread int 31 | app := cli.NewApp() 32 | 33 | app.Name = "FUCK CDN" // 指定程序名称 34 | app.Usage = "fuckcdn --domain baidu.com --port 80 --vaule 百度" // 程序功能描述 35 | app.Flags = []cli.Flag{ 36 | cli.StringFlag{ 37 | Name: "domain,d", // 配置名称 38 | Usage: "域名", // 配置描述 39 | Destination: &domain, 40 | }, 41 | cli.Int64Flag{ 42 | Name: "port, p", // 配置名称 43 | Value: 80, // 缺省配置值 44 | Usage: "端口", // 配置描述 45 | Destination: &port, // 保存配置值 46 | }, 47 | cli.StringFlag{ 48 | Name: "value", // 配置名称 49 | Usage: "关键字", // 配置描述 50 | Destination: &value, // 保存配置值 51 | }, 52 | cli.IntFlag{ 53 | Name: "thread, t", // 配置名称 54 | Value: 200, // 缺省配置值 55 | Usage: "端口", // 配置描述 56 | Destination: &thread, // 保存配置值 57 | }, 58 | cli.StringFlag{ 59 | Name: "beginip, b", // 配置名称 60 | Value: "1.1.1.1", // 缺省配置值 61 | Usage: "开始IP", // 配置描述 62 | Destination: &beginIp, // 保存配置值 63 | }, 64 | cli.StringFlag{ 65 | Name: "endip, e", // 配置名称 66 | Value: "255.255.255.255", // 缺省配置值 67 | Usage: "结束IP", // 配置描述 68 | Destination: &endIp, // 保存配置值 69 | }, 70 | } 71 | app.Action = func(c *cli.Context) error { 72 | if domain != "" && value != "" { 73 | begin := NormalIpToten(beginIp) 74 | end := NormalIpToten(endIp) 75 | if begin > end { 76 | temp := begin 77 | begin = end 78 | end = temp 79 | } 80 | fmt.Print(begin, end) 81 | data := &Data{domain, value} 82 | c := make(chan string, 100000) 83 | go data.ReciveMessage(c) 84 | data.Start(port, begin, c, thread, end) 85 | } 86 | return nil 87 | } 88 | 89 | app.Run(os.Args) 90 | 91 | } 92 | --------------------------------------------------------------------------------