Xray-core icon indicating copy to clipboard operation
Xray-core copied to clipboard

[Feature Request] Add request byte size and response byte size to the access log

Open xtlsee opened this issue 3 weeks ago • 13 comments

您好,开发者

可否添加一个功能:更加完善的访问日志格式,为访问添加 请求字节数 和 响应字节数。

比如:

2025/12/09 18:32:47.115290 from 103.*.*.*:31978 accepted tcp:www.google.com:443 [tag_in >> tag_out] email: [email protected] request_bytes: 100 response_bytes: 2000

xtlsee avatar Dec 09 '25 10:12 xtlsee

一般情况不考虑乱动日志

Fangliding avatar Dec 09 '25 11:12 Fangliding

日志是直接输出而不是等连接关闭了再输出,不过现在 Xray 确实没有针对单连接的统计,可以加一下

RPRX avatar Dec 10 '25 07:12 RPRX

对啊这本来就是做不到的 access log 抛不出来 有啥好说的 同类软件也没这种例子 哪怕开给API也没合适的调用方法

Fangliding avatar Dec 10 '25 07:12 Fangliding

现在有 access.log 和 error.log,可以加一个 stat.log,在连接关闭后把传输总字节数写进去

API 的话等完善了对单个连接的追踪后再加

RPRX avatar Dec 10 '25 07:12 RPRX

多个输出会让日志管理非常混乱 连yuhan都说不要再加type了( 这土制系统本身就不是干这些网络管理的事的

Fangliding avatar Dec 10 '25 07:12 Fangliding

至少这个功能是有用的,可以看到哪个用户的哪个连接传输了多少字节,也能找出偷跑大量流量的连接,识别潜在木马

~~就像当初我看 log 发现了 HTTPS 的明文 URL 咋在里面,一看是“迅雷下载支持”插件,我分析完就把迅雷卸了再没用过~~

RPRX avatar Dec 10 '25 08:12 RPRX

这土制系统本身就不是干这些网络管理的事的

因为被 Xray 代理后,网络管理看不到这些东西,只能看到个 REALITY,如果有个木马在偷数据,只能去找时间对应,麻烦很多

而且操作系统普遍没提供单连接统计,或者是难找、也没人去看,但 Xray 的 log 是基本都会看几眼的,接管所有流量后统计就很方便

RPRX avatar Dec 10 '25 08:12 RPRX

还真能看到 Windows系统管理器或者btop之类的是可以看某个进程对网络的占用的

Fangliding avatar Dec 10 '25 08:12 Fangliding

Windows 任务管理器有我知道,但那只是瞬时占用而不是总量统计,且不是能显示 IP 和 SNI 等信息的精确到单个连接

RPRX avatar Dec 10 '25 08:12 RPRX

总之就是管太宽了 为了网络安全排查也太偏门了 这个只是有的人喜欢看监控而已

Fangliding avatar Dec 10 '25 08:12 Fangliding

我想的是 GUI 甚至能做个图表弄个排序,把 IP 和 SNI 弄成二元组来直观地展示跑了多少流量,如果有木马在偷数据一下子就能抓出来

RPRX avatar Dec 10 '25 08:12 RPRX

总之你至少有权知道哪组 IP+SNI 跑了多少数据吧,不然哪个耗流量多哪个耗流量少都不知道

RPRX avatar Dec 10 '25 08:12 RPRX

我只是不想一个feature request论证一下有用就挂个enhancement大半年都没人动死在那而已( 而且能想到的实现都很丑 这都要存巨量的IP+SNI二元组了 隔壁DNS模块甚至还在搞隔段时间重建放缓存用的map

Fangliding avatar Dec 10 '25 08:12 Fangliding

我现在先临时这样 记录了一下

https://github.com/xtlsee/Xray-core/commit/566292b00edd83e2c468919f9065a0688633cbaf

如果是 xray-core 使用,需要将 这里注释掉

https://github.com/XTLS/Xray-core/blob/main/app/dispatcher/default.go#L519

	if accessMessage := log.AccessMessageFromContext(ctx); accessMessage != nil {
		if tag := handler.Tag(); tag != "" {
			if inTag == "" {
				accessMessage.Detour = tag
			} else if isPickRoute == 1 {
				accessMessage.Detour = inTag + " ==> " + tag
			} else if isPickRoute == 2 {
				accessMessage.Detour = inTag + " -> " + tag
			} else {
				accessMessage.Detour = inTag + " >> " + tag
			}
		}
		// log.Record(accessMessage)
	}

xtlsee avatar Dec 12 '25 06:12 xtlsee