Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
89338d7152 |
@@ -1,4 +1,8 @@
|
||||
sources:
|
||||
- type: webfuzzsub
|
||||
options:
|
||||
url: https://raw.githubusercontent.com/du5/free/master/sub.list
|
||||
|
||||
- type: subscribe
|
||||
options:
|
||||
url: https://raw.githubusercontent.com/ssrsub/ssr/master/v2ray
|
||||
@@ -19,6 +23,3 @@ sources:
|
||||
|
||||
- type: web-freessrxyz
|
||||
options:
|
||||
|
||||
- type: web-lucnorg
|
||||
options:
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
package getter
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"sync"
|
||||
|
||||
"github.com/zu1k/proxypool/proxy"
|
||||
"github.com/zu1k/proxypool/tool"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Register("web-lucnorg", NewWebLucnorg)
|
||||
}
|
||||
|
||||
const lucnorgSsrLink = "https://lncn.org/api/ssrList"
|
||||
|
||||
type WebLucnOrg struct {
|
||||
}
|
||||
|
||||
func NewWebLucnorg(options tool.Options) (getter Getter, err error) {
|
||||
return &WebLucnOrg{}, nil
|
||||
}
|
||||
|
||||
func (w *WebLucnOrg) Get() proxy.ProxyList {
|
||||
resp, err := tool.GetHttpClient().Post(lucnorgSsrLink, nil)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
response := struct {
|
||||
Code string `json:"code"`
|
||||
Ssrs string `json:"ssrs"`
|
||||
}{}
|
||||
err = json.Unmarshal(body, &response)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
dec := decryptAesForLucn(response.Code, response.Ssrs)
|
||||
if dec == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
type node struct {
|
||||
Url string `json:"url"`
|
||||
}
|
||||
ssrs := make([]node, 0)
|
||||
err = json.Unmarshal(dec, &ssrs)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
result := make([]string, 0)
|
||||
for _, node := range ssrs {
|
||||
result = append(result, node.Url)
|
||||
}
|
||||
return StringArray2ProxyArray(result)
|
||||
}
|
||||
|
||||
func (w *WebLucnOrg) Get2Chan(pc chan proxy.Proxy, wg *sync.WaitGroup) {
|
||||
defer wg.Done()
|
||||
nodes := w.Get()
|
||||
for _, node := range nodes {
|
||||
pc <- node
|
||||
}
|
||||
}
|
||||
|
||||
func decryptAesForLucn(code string, c string) []byte {
|
||||
if code == "" {
|
||||
code = "abclnv561cqqfg30"
|
||||
}
|
||||
cipher, err := base64.StdEncoding.DecodeString(c)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
result := tool.AesEcbDecryptWithPKCS7Unpadding(cipher, []byte(code))
|
||||
return result
|
||||
}
|
||||
@@ -311,6 +311,3 @@ sources:
|
||||
|
||||
- type: web-freessrxyz
|
||||
options:
|
||||
|
||||
- type: web-lucnorg
|
||||
options:
|
||||
|
||||
43
tool/aes.go
43
tool/aes.go
@@ -1,43 +0,0 @@
|
||||
package tool
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/aes"
|
||||
)
|
||||
|
||||
func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
|
||||
padding := blockSize - len(ciphertext)%blockSize
|
||||
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
|
||||
return append(ciphertext, padtext...)
|
||||
}
|
||||
|
||||
func PKCS7UnPadding(origData []byte) []byte {
|
||||
length := len(origData)
|
||||
unpadding := int(origData[length-1])
|
||||
return origData[:(length - unpadding)]
|
||||
}
|
||||
|
||||
func AesEcbDecryptWithPKCS7Unpadding(data, key []byte) []byte {
|
||||
block, _ := aes.NewCipher(key)
|
||||
decrypted := make([]byte, len(data))
|
||||
size := block.BlockSize()
|
||||
|
||||
for bs, be := 0, size; bs < len(data); bs, be = bs+size, be+size {
|
||||
block.Decrypt(decrypted[bs:be], data[bs:be])
|
||||
}
|
||||
|
||||
return PKCS7UnPadding(decrypted)
|
||||
}
|
||||
|
||||
func AesEcbEncryptWithPKCS7Padding(data, key []byte) []byte {
|
||||
block, _ := aes.NewCipher(key)
|
||||
data = PKCS7Padding(data, block.BlockSize())
|
||||
decrypted := make([]byte, len(data))
|
||||
size := block.BlockSize()
|
||||
|
||||
for bs, be := 0, size; bs < len(data); bs, be = bs+size, be+size {
|
||||
block.Encrypt(decrypted[bs:be], data[bs:be])
|
||||
}
|
||||
|
||||
return decrypted
|
||||
}
|
||||
Reference in New Issue
Block a user