mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-07-11 15:16:07 +00:00
feat(reality): add live REALITY target scanner with IP/CIDR discovery
Replace the static reality-targets list with a server-side TLS 1.3 probe that checks TLS 1.3 + HTTP/2 + X25519 + a trusted certificate. - Single-domain validate auto-fills target and serverNames from the cert SAN - Discovery scans an IP/CIDR without SNI to find new targets from their certificates, deduped and ranked by feasibility then latency, private-IP guarded via netsafe - New endpoints scanRealityTarget and scanRealityTargets with RealityScanResult, plus openapigen and api-docs entries - Add scanner strings to all 13 locales - Replace deprecated AntD Alert message prop with title across the panel
This commit is contained in:
@@ -78,6 +78,8 @@ func (a *ServerController) initRouter(g *gin.RouterGroup) {
|
||||
g.POST("/getNewEchCert", a.getNewEchCert)
|
||||
g.POST("/getCertHash", a.getCertHash)
|
||||
g.POST("/getRemoteCertHash", a.getRemoteCertHash)
|
||||
g.POST("/scanRealityTarget", a.scanRealityTarget)
|
||||
g.POST("/scanRealityTargets", a.scanRealityTargets)
|
||||
g.POST("/clientIps", a.setClientIps)
|
||||
}
|
||||
|
||||
@@ -445,6 +447,29 @@ func (a *ServerController) getRemoteCertHash(c *gin.Context) {
|
||||
jsonObj(c, hashes, nil)
|
||||
}
|
||||
|
||||
// scanRealityTarget runs a live TLS 1.3 probe against the candidate REALITY
|
||||
// target and returns a structured feasibility verdict plus the cert SAN names.
|
||||
func (a *ServerController) scanRealityTarget(c *gin.Context) {
|
||||
res, err := a.serverService.ScanRealityTarget(c.PostForm("target"))
|
||||
if err != nil {
|
||||
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.scanRealityTargetError"), err)
|
||||
return
|
||||
}
|
||||
jsonObj(c, res, nil)
|
||||
}
|
||||
|
||||
// scanRealityTargets probes a batch of candidate REALITY targets (the supplied
|
||||
// comma-separated list, or the built-in seed set when empty) and returns each
|
||||
// verdict ranked by feasibility then latency.
|
||||
func (a *ServerController) scanRealityTargets(c *gin.Context) {
|
||||
res, err := a.serverService.ScanRealityTargets(c.PostForm("targets"))
|
||||
if err != nil {
|
||||
jsonMsg(c, I18nWeb(c, "pages.inbounds.toasts.scanRealityTargetError"), err)
|
||||
return
|
||||
}
|
||||
jsonObj(c, res, nil)
|
||||
}
|
||||
|
||||
// getNewVlessEnc generates a new VLESS encryption key.
|
||||
func (a *ServerController) getNewVlessEnc(c *gin.Context) {
|
||||
out, err := a.serverService.GetNewVlessEnc()
|
||||
|
||||
Reference in New Issue
Block a user