1
0

stream_finalmask.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. {{define "form/streamFinalMask"}}
  2. <a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }"
  3. v-if="inbound.protocol == Protocols.HYSTERIA || inbound.stream.network == 'kcp'">
  4. <a-divider :style="{ margin: '5px 0 0' }"></a-divider>
  5. <a-form-item label="UDP Masks">
  6. <a-button icon="plus" type="primary" size="small"
  7. @click="inbound.stream.addUdpMask(inbound.protocol === Protocols.HYSTERIA ? 'salamander' : 'mkcp-aes128gcm')"></a-button>
  8. </a-form-item>
  9. <template v-if="inbound.stream.finalmask.udp && inbound.stream.finalmask.udp.length > 0">
  10. <a-form v-for="(mask, index) in inbound.stream.finalmask.udp" :key="index" :colon="false"
  11. :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
  12. <a-divider :style="{ margin: '0' }">
  13. UDP Mask [[ index + 1 ]]
  14. <a-icon type="delete" @click="() => inbound.stream.delUdpMask(index)"
  15. :style="{ color: 'rgb(255, 77, 79)', cursor: 'pointer' }"></a-icon>
  16. </a-divider>
  17. <a-form-item label='{{ i18n "pages.xray.outbound.type" }}'>
  18. <a-select v-model="mask.type"
  19. @change="(type) => { mask.settings = mask._getDefaultSettings(type, {}); if(inbound.stream.network === 'kcp') { inbound.stream.kcp.mtu = type === 'xdns' ? 900 : 1350; } }"
  20. :dropdown-class-name="themeSwitcher.currentTheme">
  21. <template v-if="inbound.protocol === Protocols.HYSTERIA">
  22. <a-select-option value="salamander">Salamander (Hysteria2)</a-select-option>
  23. </template>
  24. <template v-else>
  25. <a-select-option value="mkcp-aes128gcm">mKCP AES-128-GCM</a-select-option>
  26. <a-select-option value="header-dns">Header DNS</a-select-option>
  27. <a-select-option value="header-dtls">Header DTLS 1.2</a-select-option>
  28. <a-select-option value="header-srtp">Header SRTP</a-select-option>
  29. <a-select-option value="header-utp">Header uTP</a-select-option>
  30. <a-select-option value="header-wechat">Header WeChat Video</a-select-option>
  31. <a-select-option value="header-wireguard">Header WireGuard</a-select-option>
  32. <a-select-option value="mkcp-original">mKCP Original</a-select-option>
  33. <a-select-option value="xdns">xDNS</a-select-option>
  34. <a-select-option value="xicmp">xICMP</a-select-option>
  35. <a-select-option value="header-custom">Header Custom</a-select-option>
  36. <a-select-option value="noise">Noise</a-select-option>
  37. <a-select-option value="sudoku">Sudoku</a-select-option>
  38. </template>
  39. </a-select>
  40. </a-form-item>
  41. <a-form-item label="Password" v-if="['mkcp-aes128gcm', 'salamander', 'sudoku'].includes(mask.type)">
  42. <a-input v-model.trim="mask.settings.password" placeholder="Obfuscation password"></a-input>
  43. </a-form-item>
  44. <a-form-item label="Domain" v-if="['header-dns', 'xdns'].includes(mask.type)">
  45. <a-input v-model.trim="mask.settings.domain" placeholder="e.g., www.example.com"></a-input>
  46. </a-form-item>
  47. <template v-if="mask.type === 'header-custom'">
  48. <a-form-item label='Client'>
  49. <a-icon type="plus" type="primary" size="small"
  50. @click="mask.settings.client.push({rand: 0, randRange: '0-255', type: 'array', packet: []})" />
  51. </a-form-item>
  52. <template v-for="(c, index) in mask.settings.client" :key="index">
  53. <a-divider :style="{ margin: '0' }"> Client [[ index + 1 ]]
  54. <a-icon type="delete" @click="() => mask.settings.client.splice(index, 1)"
  55. :style="{ color: 'rgb(255, 77, 79)', cursor: 'pointer' }"></a-icon>
  56. </a-divider>
  57. <a-form-item label='Rand'>
  58. <a-input-number v-model.number="c.rand" />
  59. </a-form-item>
  60. <a-form-item label='Rand Range'>
  61. <a-input v-model.trim="c.randRange" placeholder="0-255" />
  62. </a-form-item>
  63. <a-form-item label='{{ i18n "pages.xray.outbound.type" }}'>
  64. <a-select v-model="c.type" :dropdown-class-name="themeSwitcher.currentTheme">
  65. <a-select-option value="array">Array</a-select-option>
  66. <a-select-option value="str">String</a-select-option>
  67. <a-select-option value="hex">Hex</a-select-option>
  68. <a-select-option value="base64">Base64</a-select-option>
  69. </a-select>
  70. </a-form-item>
  71. <a-form-item label='Packet'>
  72. <a-input v-model.trim="c.packet" placeholder="binary data" />
  73. </a-form-item>
  74. </template>
  75. <a-divider :style="{ margin: '0' }"></a-divider>
  76. <a-form-item label='Server'>
  77. <a-icon type="plus" type="primary" size="small"
  78. @click="mask.settings.server.push({rand: 0, randRange: '0-255', type: 'array', packet: []})" />
  79. </a-form-item>
  80. <template v-for="(s, index) in mask.settings.server" :key="index">
  81. <a-divider :style="{ margin: '0' }"> Server [[ index + 1 ]]
  82. <a-icon type="delete" @click="() => mask.settings.server.splice(index, 1)"
  83. :style="{ color: 'rgb(255, 77, 79)', cursor: 'pointer' }"></a-icon>
  84. </a-divider>
  85. <a-form-item label='Rand'>
  86. <a-input-number v-model.number="s.rand" />
  87. </a-form-item>
  88. <a-form-item label='Rand Range'>
  89. <a-input v-model.trim="s.randRange" placeholder="0-255" />
  90. </a-form-item>
  91. <a-form-item label='{{ i18n "pages.xray.outbound.type" }}'>
  92. <a-select v-model="s.type" :dropdown-class-name="themeSwitcher.currentTheme">
  93. <a-select-option value="array">Array</a-select-option>
  94. <a-select-option value="str">String</a-select-option>
  95. <a-select-option value="hex">Hex</a-select-option>
  96. <a-select-option value="base64">Base64</a-select-option>
  97. </a-select>
  98. </a-form-item>
  99. <a-form-item label='Packet'>
  100. <a-input v-model.trim="s.packet" placeholder="binary data" />
  101. </a-form-item>
  102. </template>
  103. </template>
  104. <template v-if="mask.type === 'noise'">
  105. <a-form-item label='Reset'>
  106. <a-input-number v-model.number="mask.settings.reset" :min="0" />
  107. </a-form-item>
  108. <a-form-item label='Noise'>
  109. <a-icon type="plus" type="primary" size="small"
  110. @click="mask.settings.noise.push({rand: '1-8192', randRange: '0-255', type: 'array', packet: '', delay: ''})" />
  111. </a-form-item>
  112. <template v-for="(n, index) in mask.settings.noise" :key="index">
  113. <a-divider :style="{ margin: '0' }"> Noise [[ index + 1 ]]
  114. <a-icon type="delete" @click="() => mask.settings.noise.splice(index, 1)"
  115. :style="{ color: 'rgb(255, 77, 79)', cursor: 'pointer' }"></a-icon>
  116. </a-divider>
  117. <a-form-item label='Rand'>
  118. <a-input v-model.trim="n.rand" placeholder="1-8192" />
  119. </a-form-item>
  120. <a-form-item label='Rand Range'>
  121. <a-input v-model.trim="n.randRange" placeholder="0-255" />
  122. </a-form-item>
  123. <a-form-item label='{{ i18n "pages.xray.outbound.type" }}'>
  124. <a-select v-model="n.type" :dropdown-class-name="themeSwitcher.currentTheme">
  125. <a-select-option value="array">Array</a-select-option>
  126. <a-select-option value="str">String</a-select-option>
  127. <a-select-option value="hex">Hex</a-select-option>
  128. <a-select-option value="base64">Base64</a-select-option>
  129. </a-select>
  130. </a-form-item>
  131. <a-form-item label='Packet'>
  132. <a-input v-model.trim="n.packet" placeholder="binary data" />
  133. </a-form-item>
  134. <a-form-item label='Delay'>
  135. <a-input v-model.trim="n.delay" placeholder="10-20" />
  136. </a-form-item>
  137. </template>
  138. </template>
  139. <template v-if="mask.type === 'sudoku'">
  140. <a-form-item label='ASCII'>
  141. <a-input v-model.trim="mask.settings.ascii" placeholder="ASCII" />
  142. </a-form-item>
  143. <a-form-item label='Custom Table'>
  144. <a-input v-model.trim="mask.settings.customTable" placeholder="Custom Table" />
  145. </a-form-item>
  146. <a-form-item label='Custom Tables'>
  147. <a-input v-model.trim="mask.settings.customTables" placeholder="Custom Tables" />
  148. </a-form-item>
  149. <a-form-item label='Padding Min'>
  150. <a-input-number v-model.number="mask.settings.paddingMin" :min="0" />
  151. </a-form-item>
  152. <a-form-item label='Padding Max'>
  153. <a-input-number v-model.number="mask.settings.paddingMax" :min="0" />
  154. </a-form-item>
  155. </template>
  156. <template v-if="mask.type === 'xicmp'">
  157. <a-form-item label='IP'>
  158. <a-input v-model.trim="mask.settings.ip" placeholder="0.0.0.0" />
  159. </a-form-item>
  160. <a-form-item label='ID'>
  161. <a-input-number v-model.number="mask.settings.id" :min="0" />
  162. </a-form-item>
  163. </template>
  164. </a-form>
  165. </template>
  166. </a-form>
  167. {{end}}