clash.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package provider
  2. import (
  3. "strings"
  4. "github.com/zu1k/proxypool/proxy"
  5. )
  6. type Clash struct {
  7. Proxies []proxy.Proxy `yaml:"proxies"`
  8. }
  9. func (c Clash) Provide() string {
  10. var resultBuilder strings.Builder
  11. resultBuilder.WriteString("proxies:\n")
  12. for _, p := range c.Proxies {
  13. if checkClashSupport(p) {
  14. resultBuilder.WriteString(p.ToClash() + "\n")
  15. }
  16. }
  17. return resultBuilder.String()
  18. }
  19. func checkClashSupport(p proxy.Proxy) bool {
  20. switch p.(type) {
  21. case proxy.ShadowsocksR:
  22. ssr := p.(proxy.ShadowsocksR)
  23. if checkInList(ssrCipherList, ssr.Cipher) && checkInList(ssrProtocolList, ssr.Protocol) && checkInList(ssrObfsList, ssr.Obfs) {
  24. return true
  25. }
  26. case proxy.Vmess:
  27. vmess := p.(proxy.Vmess)
  28. if checkInList(vmessCipherList, vmess.Cipher) {
  29. return true
  30. }
  31. default:
  32. return false
  33. }
  34. return false
  35. }
  36. func checkInList(list []string, item string) bool {
  37. for _, i := range list {
  38. if item == i {
  39. return true
  40. }
  41. }
  42. return false
  43. }
  44. var ssrCipherList = []string{
  45. "aes-128-cfb",
  46. "aes-192-cfb",
  47. "aes-256-cfb",
  48. "aes-128-ctr",
  49. "aes-192-ctr",
  50. "aes-256-ctr",
  51. "aes-128-ofb",
  52. "aes-192-ofb",
  53. "aes-256-ofb",
  54. "des-cfb",
  55. "bf-cfb",
  56. "cast5-cfb",
  57. "rc4-md5",
  58. "chacha20-ietf",
  59. "salsa20",
  60. "camellia-128-cfb",
  61. "camellia-192-cfb",
  62. "camellia-256-cfb",
  63. "idea-cfb",
  64. "rc2-cfb",
  65. "seed-cfb",
  66. }
  67. var ssrObfsList = []string{
  68. "plain",
  69. "http_simple",
  70. "http_post",
  71. "random_head",
  72. "tls1.2_ticket_auth",
  73. "tls1.2_ticket_fastauth",
  74. }
  75. var ssrProtocolList = []string{
  76. "origin",
  77. "verify_deflate",
  78. "verify_sha1",
  79. "auth_sha1",
  80. "auth_sha1_v2",
  81. "auth_sha1_v4",
  82. "auth_aes128_md5",
  83. "auth_aes128_sha1",
  84. "auth_chain_a",
  85. "auth_chain_b",
  86. }
  87. var vmessCipherList = []string{
  88. "auto",
  89. "aes-128-gcm",
  90. "chacha20-poly1305",
  91. "none",
  92. }