summaryrefslogtreecommitdiff
path: root/utils/httpdns_utils.go
blob: ba8ce8d5b51390a78b1ae9054b43c37210b3bb65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package utils

import (
	"bytes"
	"crypto/des"
	"encoding/hex"
	"fmt"
	"io"
	"net/http"
)

func pkcs5Padding(plaintext []byte, blocksize int) []byte {
	padding := blocksize - len(plaintext)%blocksize
	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
	return append(plaintext, padtext...)
}

func pkcs5Unpadding(plaintext []byte) []byte {
	padding := plaintext[len(plaintext)-1]
	return plaintext[:len(plaintext)-int(padding)]
}

func encryptDES(plaintext, key []byte) ([]byte, error) {
	block, err := des.NewCipher(key)
	if err != nil {
		return nil, err
	}

	blocksize := block.BlockSize()
	plaintext = pkcs5Padding(plaintext, blocksize)

	ciphertext := make([]byte, len(plaintext))
	for i := 0; i < len(plaintext); i += blocksize {
		block.Encrypt(ciphertext[i:], plaintext[i:i+blocksize])
	}

	return ciphertext, nil
}

func decryptDES(ciphertext, key []byte) ([]byte, error) {
	block, err := des.NewCipher(key)
	if err != nil {
		return nil, err
	}
	blocksize := block.BlockSize()
	decryptedtext := make([]byte, len(ciphertext))
	for i := 0; i < len(ciphertext); i += blocksize {
		block.Decrypt(decryptedtext[i:], ciphertext[i:i+blocksize])
	}
	decryptedtext = pkcs5Unpadding(decryptedtext)
	return decryptedtext, nil
}

func SendTencentHttpdnsQuery() {
	client := &http.Client{}
	domain := []byte("echo.echodns.xyz")
	key := []byte("046Ju3Cw")
	encrypted_bytes, err := encryptDES(domain, key)
	if err != nil {
		return
	}
	encrypted_domain := hex.EncodeToString(encrypted_bytes)
	url := fmt.Sprintf("http://119.29.29.98/d?dn=%s&id=61188", encrypted_domain)
	fmt.Println(url)

	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		fmt.Printf("create new request failed. Error: %s\n", err)
	}

	resp, err := client.Do(req)
	if err != nil {
		fmt.Printf("request went wrong. Error: %s\n", err)
		return
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Printf("read content failed. Error: %s\n", err)
		return
	}
	encrypted_response, _ := hex.DecodeString(string(body))
	decrypted_response, err := decryptDES(encrypted_response, key)
	if err != nil {
		return
	}
	fmt.Println(string(decrypted_response))
}

func SendAlicloudHttpdnsQurey() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "http://203.107.1.33/149702/d?host=echo.echodns.xyz", nil)
	if err != nil {
		fmt.Printf("create new request failed. Error: %s\n", err)
	}

	resp, err := client.Do(req)
	if err != nil {
		fmt.Printf("request went wrong. Error: %s\n", err)
		return
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Printf("read content failed. Error: %s\n", err)
		return
	}

	fmt.Println(string(body))
}