TlsSniPattern.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Net;
  3. namespace FastGithub.Configuration
  4. {
  5. /// <summary>
  6. /// Sni自定义值表达式
  7. /// @domain变量表示取域名值
  8. /// @ipadress变量表示取ip
  9. /// @random变量表示取随机值
  10. /// </summary>
  11. public struct TlsSniPattern
  12. {
  13. /// <summary>
  14. /// 获取表示式值
  15. /// </summary>
  16. public string Value { get; }
  17. /// <summary>
  18. /// 无SNI
  19. /// </summary>
  20. public static TlsSniPattern None { get; } = new TlsSniPattern(string.Empty);
  21. /// <summary>
  22. /// 域名SNI
  23. /// </summary>
  24. public static TlsSniPattern Domain { get; } = new TlsSniPattern("@domain");
  25. /// <summary>
  26. /// IP值的SNI
  27. /// </summary>
  28. public static TlsSniPattern IPAddress { get; } = new TlsSniPattern("@ipaddress");
  29. /// <summary>
  30. /// 随机值的SNI
  31. /// </summary>
  32. public static TlsSniPattern Random { get; } = new TlsSniPattern("@random");
  33. /// <summary>
  34. /// Sni自定义值表达式
  35. /// </summary>
  36. /// <param name="value">表示式值</param>
  37. public TlsSniPattern(string? value)
  38. {
  39. this.Value = value ?? string.Empty;
  40. }
  41. /// <summary>
  42. /// 更新域名
  43. /// </summary>
  44. /// <param name="domain"></param>
  45. public TlsSniPattern WithDomain(string domain)
  46. {
  47. var value = this.Value.Replace(Domain.Value, domain, StringComparison.OrdinalIgnoreCase);
  48. return new TlsSniPattern(value);
  49. }
  50. /// <summary>
  51. /// 更新ip地址
  52. /// </summary>
  53. /// <param name="address"></param>
  54. public TlsSniPattern WithIPAddress(IPAddress address)
  55. {
  56. var value = this.Value.Replace(IPAddress.Value, address.ToString(), StringComparison.OrdinalIgnoreCase);
  57. return new TlsSniPattern(value);
  58. }
  59. /// <summary>
  60. /// 更新随机数
  61. /// </summary>
  62. public TlsSniPattern WithRandom()
  63. {
  64. var value = this.Value.Replace(Random.Value, Environment.TickCount64.ToString(), StringComparison.OrdinalIgnoreCase);
  65. return new TlsSniPattern(value);
  66. }
  67. /// <summary>
  68. /// 转换为文本
  69. /// </summary>
  70. /// <returns></returns>
  71. public override string ToString()
  72. {
  73. return this.Value;
  74. }
  75. }
  76. }