web_lucn_org.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package getter
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "io/ioutil"
  6. "sync"
  7. "github.com/zu1k/proxypool/proxy"
  8. "github.com/zu1k/proxypool/tool"
  9. )
  10. func init() {
  11. Register("web-lucnorg", NewWebLucnorg)
  12. }
  13. const lucnorgSsrLink = "https://lncn.org/api/ssrList"
  14. type WebLucnOrg struct {
  15. }
  16. func NewWebLucnorg(options tool.Options) (getter Getter, err error) {
  17. return &WebLucnOrg{}, nil
  18. }
  19. func (w *WebLucnOrg) Get() []proxy.Proxy {
  20. resp, err := tool.GetHttpClient().Post(lucnorgSsrLink, nil)
  21. if err != nil {
  22. return nil
  23. }
  24. defer resp.Body.Close()
  25. body, err := ioutil.ReadAll(resp.Body)
  26. if err != nil {
  27. return nil
  28. }
  29. response := struct {
  30. Code string `json:"code"`
  31. Ssrs string `json:"ssrs"`
  32. }{}
  33. err = json.Unmarshal(body, &response)
  34. if err != nil {
  35. return nil
  36. }
  37. dec := decryptAesForLucn(response.Code, response.Ssrs)
  38. if dec == nil {
  39. return nil
  40. }
  41. type node struct {
  42. Url string `json:"url"`
  43. }
  44. ssrs := make([]node, 0)
  45. err = json.Unmarshal(dec, &ssrs)
  46. if err != nil {
  47. return nil
  48. }
  49. result := make([]string, 0)
  50. for _, node := range ssrs {
  51. result = append(result, node.Url)
  52. }
  53. return StringArray2ProxyArray(result)
  54. }
  55. func (w *WebLucnOrg) Get2Chan(pc chan proxy.Proxy, wg *sync.WaitGroup) {
  56. defer wg.Done()
  57. nodes := w.Get()
  58. for _, node := range nodes {
  59. pc <- node
  60. }
  61. }
  62. func decryptAesForLucn(code string, c string) []byte {
  63. if code == "" {
  64. code = "abclnv561cqqfg30"
  65. }
  66. cipher, err := base64.StdEncoding.DecodeString(c)
  67. if err != nil {
  68. return nil
  69. }
  70. result := tool.AesEcbDecryptWithPKCS7Unpadding(cipher, []byte(code))
  71. return result
  72. }