Code Monkey home page Code Monkey logo

v2ray_simple's Introduction

项目已停止开发,本想删库,但为了保留 issues 和 wiki 还是选择了归档

可以移步新项目ruci

v2ray_simple's People

Contributors

1xgkr6wq avatar e1732a364fed avatar johnshall avatar moodyhunter avatar qzydustin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

v2ray_simple's Issues

[Problem] IPv6 连接的检测好像不是那么的智能(

Describe the bug【描述 bug】

版本号为最新的 v1.2.2-beta.1,写了个启动脚本挂在 OpenWrt 上。由于是通过 IPv6 来进行连接的,而 OpenWrt 获取到 IPv6 地址有一定延迟,就导致无法正常连接。

在获取到 IPv6 地址后,无法重新连接,一直在重复 Machine HasNo ipv6 but got ipv6 request 这个错误

To Reproduce【如何复现该bug】

在无 IPv6 环境下连接,之后恢复 IPv6 环境,就会一直报这个错误

Expected behavior【预期的行为】

在 IPv6 地址获取成功后重连

Envs (please complete the following information):【系统环境】

Target Platform x86/64
固件版本 OpenWrt 21.02.2 r16495-bf0c965af0 / LuCI openwrt-21.02 branch git-22.046.85957-59c3392

Debug Log 【Debug日志】

log.txt

[Feature Request]多用户支持

Describe the solution you'd like 【具体描述一下你想要的新功能,或者你的新想法】
同一个 protocol下,支持配置多个用户/密码

Describe alternatives you've considered 【说一下你曾经尝试过 但是不好使 或者不好用 的其他办法】
目前每个protocol只能通过 uuid字段来设置一个 用户,如果要多用户,那就要多重回落,太麻烦了,根本不实用。

具体设计:

uuid字段保持不变,新增 users 项,下面是一个数组,每项 有 user 和 pass 两个字段,如果protocol是 vless/trojan这种,那么user填uuid,pass不填。

下一步要实现的功能

嗅探 tls 的 host 然后用域名进行 分流

实际上 tls 的 嗅探我 在 lazy功能 实现时 已经做到了,但是代码中在非lazy时没有任何处理。

如果要嗅探,那么一样要预读 firstPayload,

v2ray 的tls嗅探的内容是在 common/protocol/tls

另外,v2ray的 common/protocol 里有很多协议的嗅探,还包括 quic,http,bittorrent

那些再说,还是tls最重要。而且http的话 我在httpLayer里的代码早已做到。

修复 bug

修复 #46

如果这些都ok了,那么下一步也许可以考虑 实现 Tun/Tap

想尝试advLayer 为 quic 时 的 统一端口提供vlesss和trojans服务,失败。

Describe the bug【描述 bug】
縱vlesss服务配置为回落到trojans
failed in inServer proxy handshake {"handler": "0.0.0.0:8443", "error": " [ invalid version , Detail: invalid data, Data: 49 ] , with Buffer."}

To Reproduce【如何复现该bug】
配置文件
[[listen]]
tag = "vlesstls"
protocol = "vlesss"
host = "rn.wanli.bid"
ip = "0.0.0.0"
port = 8443
version = 1
xver = 1
advancedLayer = "quic"
cert = "/xl/cert/cert.crt"
key = "/xl/cert/key.key"
early = true
extra = { congestion_control = "hy", mbps = 200, hy_manual = true , hy_manual_initial_rate = 0.5 , maxStreamsInOneConn = 6}
fallback = ":8444"

[[listen]]
tag = "trojantls"
protocol = "trojans"
host = "rn.wanli.bid"
ip = "127.0.0.1"
port = 8444
advancedLayer = "quic"
cert = "/xl/cert/cert.crt"
key = "/xl/cert/key.key"
early = true

Expected behavior【预期的行为】
单独测试量个不同接口是没问题的。

是我配置不对吗?
请指教。

Envs (please complete the following information):【系统环境】

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Other 【其他】

socks5 能否设置密码之类的验证方式

刚刚去翻了一下 /proxy/socks5/socks5.go 发现有 AuthPassword 这个

image

不过在文档 和 issues 里似乎都没有提及这一块,不知道在 toml 文件里这个该怎么写

请问如何在客户端使用指定证书?

你好,
我在Cloudflare上开启了验证客户端证书的规则。然后尝试在客户端的Dial项添加cert和key的地址,并上传cert和key到服务端。即使这样,依然被Cloudflare拦截,并且服务端上没有接收到任何信息。
请问我应该如何操作才能解决这个问题?
谢谢!

和clash一样实现同一端口监听多协议

Is your feature request related to a problem? Please describe. 【说一下 你的新功能请求是否和一个问题相关】
和clash一样实现同一端口监听多协议

Describe the solution you'd like 【具体描述一下你想要的新功能,或者你的新想法】
虽然绝大多数是socks协议
但是有些软件只支持http协议
在xray的config里面必须设置两个监听端口分别监听,这对于只有一条或者两条线路来说没什么
但是如果有十几甚至几十条线路,而且要实现专线专用,就比较麻烦
因为实现专线专用必须每条线路设置单独的监听端口
这时候多协议同端口监听就比较需要了
但是xray的config里面"protocol"只能设置一种协议,这就导致端口多一倍
如果"protocol"能够同时监听两种或者多种甚至是所有,那监听的端口将会大大减少、而且配置文件也精简很多、使用过程中也会方便很多

Describe alternatives you've considered 【说一下你曾经尝试过 但是不好使 或者不好用 的其他办法】
xray中设置:
"protocol": ["vmess","socks"],
报错不能识别协议

[Bug] socks5http监听不能正确响应http

Describe the bug【描述 bug】
"tcp+socks5http" 未能正确响应http

To Reproduce【如何复现该bug】
client配置为"socks5http"
客户端wget www.baidu.com 失败。

报错: 2022/05/09 15:18:34 socks5http: http failed, will try socks5 223
2022-05-09 15:18:34.997 WARN failed in inServer proxy handshake {"handler": "0.0.0.0:9089", "error": "unsupported socks version 71"}

wget https://www.baidu.com 可以。

www.google.com类似。 指定https://可以 wget成功。

Expected behavior【预期的行为】
单独监听http代理 不会出现上述问题。

Envs (please complete the following information):【系统环境】

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Other 【其他】

Readv 严重问题,拖累速度、造成闪退

之前写readv代码时只是简单试试好不好使,从来没经过 流量巨大的 测速测试

这次测速揭露出巨大问题

tls+vless

开启readv
1771 3488
1694 3103


关闭readv
3835 3536
3475  3604


ws+tls+vless

开启readv
2906 2435
2777 2424
2782 2436


关闭readv
2823 2447
2918 2445

readv本应加速,结果现在确实减速状态;

而测试ws+vless,中间不加tls层时,服务端则是直接闪退了

2022/03/26 17:26:44 direct 127.0.0.1:49281  want to dial  tcp+direct ://54.244.7.161:443
panic: runtime error: slice bounds out of range [:1500] with capacity 935
	panic: runtime error: slice bounds out of range [:1500] with capacity 935

/v2ray_simple/utils.RecoverBuffers(...)
v2ray_simple/utils/buffers.go:116

/v2ray_simple/netLayer.put_readvMem(0x14000064d18?)
	v2ray_simple/netLayer/readv.go:53 +0xf8

总之代码我还要改改!现在大家先用 -readv=false 参数 或者

[app]
noreadv = true 

关闭readv功能

使用speedtest测速时发生闪退

下载测完,轮到上传时迟迟不出速度,一看,Windows上的程序已经退出了。再次测试时没有复现。

PS D:\rclone> D:\shortcut\verysimple.exe -c client.toml -lazy
===============================
verysimple v1.1.5-beta.1, go1.18 windows amd64
===============================
A very simple implementation of V2Ray with some innovation
Support tls, grpc, websocket, quic for all protocols.
===============================
Log Level:6
UseReadv:true
2022/04/08 14:15:39 Using Hysteria Congestion Control, max upload mbps:  8
2022/04/08 14:15:39 Using Hysteria Manual Control Mode
panic: interface conversion: interface {} is nil, not *quic.sessionState

goroutine 676 [running]:
github.com/hahahrfool/v2ray_simple/quic.(*Client).DialSubConn(0xc000000960?, {0x0?, 0x0?})
        /home/runner/work/v2ray_simple/v2ray_simple/quic/quic.go:318 +0x1bb
main.dialClient({{0xca3148, 0xc0001e02d0}, {0xca3148, 0xc0001e02d0}, {0xca6bc8, 0xc0002b0780}, {0xca6d38, 0xc0000f2e00}, {0x0, 0x0}, ...}, ...)
        /home/runner/work/v2ray_simple/v2ray_simple/main.go:1195 +0x261a
main.handshakeInserver_and_passToOutClient({{0xca3148, 0xc0001e02d0}, {0xca3148, 0xc0001e02d0}, {0xca6bc8, 0xc0002b0780}, {0xca6d38, 0xc0000f2e00}, {0x0, 0x0}, ...})
        /home/runner/work/v2ray_simple/v2ray_simple/main.go:1010 +0x25ea
main.handleNewIncomeConnection({0xca6bc8, 0xc0002b0780}, {0xca6d38?, 0xc0000f2e00?}, {0xca3148, 0xc0001e02d0}, 0x80?)
        /home/runner/work/v2ray_simple/v2ray_simple/main.go:604 +0x13bc
main.listenSer.func2({0xca3148?, 0xc0001e02d0?})
        /home/runner/work/v2ray_simple/v2ray_simple/main.go:342 +0x48
created by github.com/hahahrfool/v2ray_simple/netLayer.loopAccept
        /home/runner/work/v2ray_simple/v2ray_simple/netLayer/listen.go:37 +0xe5

[Problem]多个route的 from 指向同一个tag时的问题

Describe the bug【描述 bug】
多个route同时生效时,只有第一个生效。

To Reproduce【如何复现该bug】
见下面的issue链接

Expected behavior【预期的行为】
正确的行为是,条件最复杂的生效。

其它:

这个是另一个issue提及的。#60 (comment)

之前没思考过这个问题,现在需要研究一下。

解决办法:

实际上这不能算是bug,因为分流列表就是按顺序匹配的,匹配到就不会再进行后面的匹配,这样可以节约资源。

route的这个问题,只要把最复杂的匹配放在最前面即可。

一段时间未使用后无法上网,需重启程序

1.1.4版本,客户端配置如下

[app]
loglevel=0

[[listen]]
  tag = "my_socks5"
  protocol = "socks5"
  ip = "127.0.0.1"
  port = 1111
  version = 0

[[dial]]
  tag = "my_vless"
  protocol = "vless"
  uuid = ****
  host = ****
  ip = **my_ip**
  port = *my_port*
  version = 1
  tls = true
  advancedLayer = "quic"
  utls = true
  extra = { congestion_control = "hy", mbps = 8, hy_manual = true } 

服务端配置如下

[app]
loglevel=0

[[listen]]
  tag = "my_vless"
  protocol = "vless"
  uuid = ****
  host = ****
  ip = "0.0.0.0"
  port = *my_port*
  version = 1
  tls = true
  advancedLayer = "quic"
  cert = "****.cer"
  key = "****.key"
  extra = { congestion_control = "hy", mbps = 80, hy_manual = true }

[[dial]]
  protocol = "direct"

第一次比较快,之后比较慢的问题

不错,在linux上的测试,verysimple已经是王者了,完胜xray!README里提供的测试也是类似的情况,不过那个虚拟机性能太差,我就单独在macbook上又安装了一个ubuntu虚拟机进行测试,发现效果是类似的。

即第一次比较快,之后比较慢的问题 好像我在xray那边看到过

好像是开了nat什么的问题

具体记不清楚了

1.1.3-beta.3崩溃

使用XTLS-CORE配置为使用VS的VLESSS出站.
{
"tag": "vless-out",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "abc.com",
"port": 29433,
"users": [
{
"id": "XXX-XXX-XXX-XXX-XXXXX", //vs ID
"encryption": "none",
"flow": ""
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"allowInsecure": false
}
},
"mux": {
"enabled": false,
"concurrency": 0
}
}

当数据出站时,服务器立马崩溃.

goroutine 53 [running]:
github.com/hahahrfool/v2ray_simple/netLayer.(*UDPConn).Write(0xc000353880, {0xc000412000, 0x50, 0x8000})
github.com/hahahrfool/v2ray_simple/netLayer/udpConn.go:163 +0xee
io.copyBuffer({0x7f7f9480a778, 0xc000353880}, {0x7f7f948171f8, 0xc000101200}, {0x0, 0x0, 0x0})
io/io.go:428 +0x204
io.Copy(...)
io/io.go:385
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7f7f9480a778?, 0xc000353880}, {0x7f7f948171f8?, 0xc000101200})
github.com/hahahrfool/v2ray_simple/netLayer/relay.go:129 +0x692
github.com/hahahrfool/v2ray_simple/netLayer.Relay(0xc000360740, {0xd596f0, 0xc000101200}, {0x7f7f9480a748, 0xc000353880})
github.com/hahahrfool/v2ray_simple/netLayer/relay.go:235 +0x688
main.dialClient({{0xd5f688, 0xc00000e0e8}, {0xd5d8f8, 0xc00036c4c0}, {0xd63410, 0xc0001801e0}, {0xd62ce0, 0xc000190ea0}, {0xc00003e4e0, 0x13}, ...}, ...)
github.com/hahahrfool/v2ray_simple/main.go:1324 +0x2f14
main.handshakeInserver_and_passToOutClient({{0xd5f688, 0xc00000e0e8}, {0xd5d8f8, 0xc00036c4c0}, {0xd63410, 0xc0001801e0}, {0xd62ce0, 0xc000190ea0}, {0xc00003e4e0, 0x13}, ...})
github.com/hahahrfool/v2ray_simple/main.go:1024 +0x268a
main.handleNewIncomeConnection({0xd63410, 0xc0001801e0}, {0xd62ce0?, 0xc000190ea0?}, {0xd5f688, 0xc00000e0e8})
github.com/hahahrfool/v2ray_simple/main.go:617 +0x1378
main.listenSer.func2({0xd5f688?, 0xc00000e0e8?})
github.com/hahahrfool/v2ray_simple/main.go:360 +0x3f
created by github.com/hahahrfool/v2ray_simple/netLayer.loopAccept
github.com/hahahrfool/v2ray_simple/netLayer/listen.go:37 +0xe5

请问ws和grpc如何使用自选CDN IP?

你好,
若IP设置为自选的CDN IP, Host设置为域名,则服务器不能接收到任何信息。
请问应该如何设置才能够使用自选的CDN IP?
谢谢!


更新:
ws可以通过上述方法选择自选CDN IP,原来是我忘记在Path前加"/"了。
Grpc还是不清楚怎么设置。


更新:
都可以了。。。要注意在Cloudflare里开启Grpc选项。

最近的github action在windows平台测试时,经常会报错

can not listen on 127.0.0.1:59915: listen tcp 127.0.0.1:59915: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

但是linux和macos就没有任何问题。

而且似乎是随机发生的,每个整个测试大概会有一个测试函数出现此问题

[Problem] ults和cdn兼容性问题

Is your feature request related to a problem? Please describe. 【说一下 你的新功能请求是否和一个问题相关】
现在客户端配置文件中,地址是使用host字段。
当需要使用cdn时,可以使用ip和host字段。

但是有个问题,如果需要优选cloudflare,或者指向www.digitalocean.com来使用cdn,目前无法实现。
因为ip字段不支持域名。

Describe the solution you'd like 【具体描述一下你想要的新功能,或者你的新想法】
我认为可以分为address字段,host字段,sni字段

address:意思为目标连接的地址,可以支持ip和域名。
host:伪装域名标头,在cloudflare等cdn回源时会用到。不指定时与address相同。
SNI:在cloudflare等cdn回源时会用到。不指定时与address相同。

征集readv测速数据

根据推测,网速越快延迟越低,则可能越不需要readv, 内网单机测速实测readv具有反效果

在这里征集大家的测速数据,看看公网实际测速开启readv与关闭readv哪一种情况更快,谢谢!🙏

grpc没有 0-rtt 导致 可能被识别

之前仅仅修复了 没有 高级层存在时的 问题, 而 如果内层又有 grpc,则还是没有处理。

ws 和 quic 则因为 都实现了 0-rtt ,所以在使用0-rtt 时没什么事

而 grpc 目前的代码是可能被探测到的,因为它是先建立 连接,再建立 子stream,再发送首包数据

这个我目前感觉,似乎 v2ray/xray 也是一样的情况,所以似乎是很难解决的。

特征就是 grpc/h2 的握手流量特征。

具体我不是很懂,只是简单推测得出的可能性。而且之前确实有人报告说 grpc 被封的情况。

关于 grpc 的握手特征,可以参考

https://github.com/Dreamacro/clash/blob/master/transport/gun/gun.go

该代码是 grpc的 “gun” 的 一个 简单的 客户端实现;观察 其 initRequest 就知道,确实,每次 开启一个连接时,先单独 发送 握手包,然后再 传递 payload,而不是粘在一起。

readv内存泄漏问题 以及悬垂链接问题

最初的判断

由于绑定了系统级的 readv数组,导致golang的gc不会回收

会在下一版本修复

后续的测试

感谢群中一位热心朋友帮忙测试,发现了悬垂tcp链接问题。在客户端关闭之后,tcp链接竟然依然存在。

后来仔细思考,才想起来,作为四点链接,中间的断了还没完,还需要再切段两刀,一共切三刀才能全断

所以我修复了代码,只要一端读写出问题,两端同时Close,这样就不会出错,保证不会在任何一个Read的地方卡住。

而且后来发现,这个问题解决后,在开启readv时的内存泄漏问题也跟着消失了。看来readv的内存泄漏只是现象,不是本质

[Bug]v1.2.2-beta.1 中, 在关闭 sniffing时,会导致 tls lazy 功能卡住

Describe the bug【描述 bug】
最新代码中,在关闭 sniffing时,会导致 tls lazy 功能卡住

To Reproduce【如何复现该bug】
将examples/vlesss.client.toml 的 sniffing 那一行 注释掉,然后client和 server都开启lazy,就会发现lazy卡住了。

Expected behavior【预期的行为】
不卡

Envs (please complete the following information):【系统环境】
macm1, 最新commit (a94e896)

Config file 【配置文件,客户端服务端配置都提供】

Debug Log 【Debug日志】
开启pdd时, 客户端显示 R DefinitelyNotTLS, reasonNum: 2

分流策略 route 的 domain 多个 规则 写在 列表里时 未能按预期

Describe the bug【描述 bug】

 [[route]]
 toTag = "blocked"
 domain = ["geosite:category-ads-all","full:self.events.data.microsoft.com","domain:access-sngapm.qcloud.com"]

这样写,部分ads域名未能block

分开两行后,目测ads都bock了。

 [[route]]
 toTag = "blocked"
 domain = ["geosite:category-ads-all"]
 [[route]]
 toTag = "blocked"
 domain = ["full:self.events.data.microsoft.com","domain:access-sngapm.qcloud.com"]

另外:

 [[route]]
 toTag = "direct"
 domain = ["geosite:cn","geosite:private"]  

发现163.com没有direct,还在测试中。

To Reproduce【如何复现该bug】

Expected behavior【预期的行为】
按计划分流

Envs (please complete the following information):【系统环境】

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Other 【其他】

使用V2RAYN和SAGERNET出现的问题.

服务器配置:vlesss.server.toml

[[listen]]
tag = "my_vlesss0"
protocol = "vlesss"
uuid = "xxx-xxx-xxx-xxx-xxxxxxxx"
host = "0.0.0.0"
port = 22433
version = 0
insecure = true
cert = "key.crt"   # 这里既可以默认放在程序本身目录下,也可以指定完整路径
key = "key.key"

[[dial]]
protocol = "direct"

可以正常运行服务器.version已经是0了.只简单使用VLESS+TCP+TLS.当使用v2ray_simple WIN64客户端就没有任何问题.

==========================================
使用V2RAYN-导出配置为如下:

  ......
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "www.abc.com",
            "port": 22433,
            "users": [
              {
                "id": "xxx-xxx-xxx-xxx-xxxxxxxx",
                "alterId": 0,
                "email": "[email protected]",
                "security": "auto",
                "encryption": "none",
                "flow": ""
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "allowInsecure": true
        }
      },
      "mux": {
        "enabled": true,
        "concurrency": 8
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {
        "response": {
          "type": "http"
        }
      }
    }
  ],
........

则服务器不停显示:
2022/03/25 02:45:17 New req from xx.xx.xx.xx:53210
2022/03/25 02:45:19 direct xx.xx.xx.xx:53210 want to dial tcp+direct ://v1.mux.cool:0
2022/03/25 02:45:19 failed in dial v1.mux.cool:0 , Reason: dial tcp: lookup v1.mux.cool on 8.8.8.8:53: no such host
......
2022/03/25 02:45:20 New req from xx.xx.xx.xx:53210
2022/03/25 02:45:24 failed in inServer tls handshake 0.0.0.0:22433 tlsLayer: tls握手失败 : read tcp xx.xx.xx.xx:22433->xx.xx.xx.xx:53213: read: connection reset by peer

===============================================
以下是使用SAGERNET通过扫码后节点连接时出现的问题.显示

Supported client protocols:
vless
direct
Log Level: 1
2022/03/25 02:52:26 tcp+tls+vless is listening tcp on 0.0.0.0:22433
2022/03/25 02:52:26 New req from xx.xx.xx.xx:42830
2022/03/25 02:52:26 New req from xx.xx.xx.xx:42828
2022/03/25 02:52:27 New req from xx.xx.xx.xx:42832
2022/03/25 02:52:27 New req from xx.xx.xx.xx:42826
2022/03/25 02:52:27 direct xx.xx.xx.xx:42830 want to dial tcp+direct ://1.0.0.1:443
2022/03/25 02:52:27 direct xx.xx.xx.xx:42828 want to dial tcp+direct ://1.0.0.1:443
2022/03/25 02:52:27 direct xx.xx.xx.xx:42832 want to dial tcp+direct ://1.0.0.1:443
2022/03/25 02:52:27 New req from xx.xx.xx.xx:42816
2022/03/25 02:52:27 New req from xx.xx.xx.xx:42798
2022/03/25 02:52:28 New req from xx.xx.xx.xx:42820
2022/03/25 02:52:28 direct xx.xx.xx.xx:42816 want to dial tcp+direct ://1.0.0.1:443
2022/03/25 02:52:28 direct xx.xx.xx.xx:42798 want to dial tcp+direct ://1.0.0.1:443
2022/03/25 02:52:28 direct xx.xx.xx.xx:42826 want to dial tcp+direct ://1.0.0.1:443
fatal error: sync: RUnlock of unlocked RWMutex

goroutine 25 [running]:
runtime.throw({0x74d91d?, 0xc8522cf8ff18eda0?})
/usr/local/go/src/runtime/panic.go:992 +0x71 fp=0xc00002ef08 sp=0xc00002eed8 pc=0x432a91
sync.throw({0x74d91d?, 0x0?})
/usr/local/go/src/runtime/panic.go:978 +0x1e fp=0xc00002ef28 sp=0xc00002ef08 pc=0x45d5be
sync.(*RWMutex).rUnlockSlow(0xc000016438, 0xd3890?)
/usr/local/go/src/sync/rwmutex.go:121 +0x39 fp=0xc00002ef50 sp=0xc00002ef28 pc=0x474699
sync.(*RWMutex).RUnlock(...)
/usr/local/go/src/sync/rwmutex.go:111
github.com/hahahrfool/v2ray_simple/netLayer.RelayUDP_to_Direct.func1(0xc00000e148, 0xc00000e138?)
/Users/pi/src/projects/v2ray_simple/netLayer/udp_relay.go:285 +0x109 fp=0xc00002efc0 sp=0xc0000 2ef50 pc=0x523f69
github.com/hahahrfool/v2ray_simple/netLayer.RelayUDP_to_Direct.func2()
/Users/pi/src/projects/v2ray_simple/netLayer/udp_relay.go:293 +0x2e fp=0xc00002efe0 sp=0xc00002 efc0 pc=0x523e2e
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:1571 +0x1 fp=0xc00002efe8 sp=0xc00002efe0 pc=0x461a01
created by github.com/hahahrfool/v2ray_simple/netLayer.RelayUDP_to_Direct
/Users/pi/src/projects/v2ray_simple/netLayer/udp_relay.go:270 +0x2b8

goroutine 1 [chan receive]:
main.main()
/Users/pi/src/projects/v2ray_simple/main.go:223 +0x686

goroutine 6 [chan receive]:
github.com/hahahrfool/v2ray_simple/netLayer.(*UDP_Pipe).GetNewUDPRequest(0x0?)
/Users/pi/src/projects/v2ray_simple/netLayer/udp_relay.go:185 +0x2d
github.com/hahahrfool/v2ray_simple/netLayer.RelayUDP_to_Direct({0x7ce798?, 0xc000048f70})
/Users/pi/src/projects/v2ray_simple/netLayer/udp_relay.go:238 +0x6e
created by github.com/hahahrfool/v2ray_simple/proxy/direct.NewClient
/Users/pi/src/projects/v2ray_simple/proxy/direct/client.go:33 +0x110

goroutine 7 [chan receive]:
github.com/hahahrfool/v2ray_simple/netLayer.(*UDP_Pipe).GetNewUDPRequest(0x0?)
/Users/pi/src/projects/v2ray_simple/netLayer/udp_relay.go:185 +0x2d
github.com/hahahrfool/v2ray_simple/netLayer.RelayUDP_to_Direct({0x7ce798?, 0xc000049740})
/Users/pi/src/projects/v2ray_simple/netLayer/udp_relay.go:238 +0x6e
created by github.com/hahahrfool/v2ray_simple/proxy/direct.NewClient
/Users/pi/src/projects/v2ray_simple/proxy/direct/client.go:33 +0x110

goroutine 12 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f8818, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000080700?, 0xc0001ae000?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000080700, {0xc0001ae000, 0x642, 0x642})
/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000080700, {0xc0001ae000?, 0xc00004d740?, 0xc0001ae043?})
/usr/local/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00000e0a8, {0xc0001ae000?, 0x0?, 0x7f2ba7680108?})
/usr/local/go/src/net/net.go:183 +0x45
crypto/tls.(*atLeastReader).Read(0xc00000d5c0, {0xc0001ae000?, 0x0?, 0x71a340?})
/usr/local/go/src/crypto/tls/conn.go:784 +0x3d
bytes.(*Buffer).ReadFrom(0xc00006daf8, {0x7cd220, 0xc00000d5c0})
/usr/local/go/src/bytes/buffer.go:204 +0x98
crypto/tls.(*Conn).readFromUntil(0xc00006d880, {0x7cd660?, 0xc00000e0a8}, 0x604?)
/usr/local/go/src/crypto/tls/conn.go:806 +0xe5
crypto/tls.(*Conn).readRecordOrCCS(0xc00006d880, 0x0)
/usr/local/go/src/crypto/tls/conn.go:613 +0x116
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:581
crypto/tls.(*Conn).Read(0xc00006d880, {0xc00015e000, 0x8000, 0x8000?})
/usr/local/go/src/crypto/tls/conn.go:1284 +0x16f
io.(*multiReader).Read(0xc00000c660, {0xc00015e000, 0x8000, 0x8000})
/usr/local/go/src/io/multi.go:26 +0x9b
github.com/hahahrfool/v2ray_simple/proxy/vless.(*UserConn).Read(0xc00009e3f0, {0xc00015e000, 0x8000, 0x 8000})
/Users/pi/src/projects/v2ray_simple/proxy/vless/vless.go:229 +0x391
io.copyBuffer({0x7cde00, 0xc0000499c0}, {0x7f2b80a077f8, 0xc00009e3f0}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:426 +0x1b2
io.Copy(...)
/usr/local/go/src/io/io.go:385
net.genericReadFrom({0x7cd680?, 0xc00000e0e0?}, {0x7f2b80a077f8, 0xc00009e3f0})
/usr/local/go/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc00000e0e0, {0x7f2b80a077f8, 0xc00009e3f0})
/usr/local/go/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc00000e0e0, {0x7f2b80a077f8?, 0xc00009e3f0?})
/usr/local/go/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0x7cd680, 0xc00000e0e0}, {0x7f2b80a077f8, 0xc00009e3f0}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:412 +0x14b
io.Copy(...)
/usr/local/go/src/io/io.go:385
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7cd680?, 0xc00000e0e0}, {0x7f2b80a077f8?, 0xc000 09e3f0})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:133 +0x4ee
github.com/hahahrfool/v2ray_simple/netLayer.Relay({0x7ce950?, 0xc00009e3f0}, {0x7ced60?, 0xc00000e0e0})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:197 +0x12b
main.handleNewIncomeConnection({0x7d16b0?, 0xc0000de0c0?}, {0x7d0928, 0xc00000e0a8})
/Users/pi/src/projects/v2ray_simple/main.go:826 +0x2ecc
main.listenSer.func1({0x7d0928?, 0xc00000e0a8?})
/Users/pi/src/projects/v2ray_simple/main.go:230 +0x37
created by github.com/hahahrfool/v2ray_simple/netLayer.loopAccept
/Users/pi/src/projects/v2ray_simple/netLayer/listen.go:37 +0xca

goroutine 10 [syscall]:
os/signal.signal_recv()
/usr/local/go/src/runtime/sigqueue.go:151 +0x2f
os/signal.loop()
/usr/local/go/src/os/signal/signal_unix.go:23 +0x19
created by os/signal.Notify.func1.1
/usr/local/go/src/os/signal/signal.go:151 +0x2a

goroutine 11 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f8908, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000080680?, 0xc000020000?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Accept(0xc000080680)
/usr/local/go/src/internal/poll/fd_unix.go:614 +0x22c
net.(*netFD).accept(0xc000080680)
/usr/local/go/src/net/fd_unix.go:172 +0x35
net.(*TCPListener).accept(0xc00000c4c8)
/usr/local/go/src/net/tcpsock_posix.go:139 +0x28
net.(*TCPListener).Accept(0xc00000c4c8)
/usr/local/go/src/net/tcpsock.go:288 +0x3d
github.com/hahahrfool/v2ray_simple/netLayer.loopAccept({0x7cf908, 0xc00000c4c8}, 0xc00000c480)
/Users/pi/src/projects/v2ray_simple/netLayer/listen.go:15 +0x4b
created by github.com/hahahrfool/v2ray_simple/netLayer.ListenAndAccept
/Users/pi/src/projects/v2ray_simple/netLayer/listen.go:82 +0x345

goroutine 13 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f8728, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000080800?, 0xc000118240?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000080800, {0xc000118240, 0x205, 0x205})
/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000080800, {0xc000118240?, 0xb6be5c6c46e13891?, 0x6c28b38c390b3845?})
/usr/local/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00000e0b8, {0xc000118240?, 0x0?, 0x7f2ba7680108?})
/usr/local/go/src/net/net.go:183 +0x45
crypto/tls.(*atLeastReader).Read(0xc00000c6d8, {0xc000118240?, 0x0?, 0x71a340?})
/usr/local/go/src/crypto/tls/conn.go:784 +0x3d
bytes.(*Buffer).ReadFrom(0xc00006de78, {0x7cd220, 0xc00000c6d8})
/usr/local/go/src/bytes/buffer.go:204 +0x98
crypto/tls.(*Conn).readFromUntil(0xc00006dc00, {0x7cd660?, 0xc00000e0b8}, 0x0?)
/usr/local/go/src/crypto/tls/conn.go:806 +0xe5
crypto/tls.(*Conn).readRecordOrCCS(0xc00006dc00, 0x0)
/usr/local/go/src/crypto/tls/conn.go:613 +0x116
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:581
crypto/tls.(*Conn).Read(0xc00006dc00, {0xc000150000, 0x8000, 0x8000?})
/usr/local/go/src/crypto/tls/conn.go:1284 +0x16f
io.(*multiReader).Read(0xc00000c6a8, {0xc000150000, 0x8000, 0x8000})
/usr/local/go/src/io/multi.go:26 +0x9b
github.com/hahahrfool/v2ray_simple/proxy/vless.(*UserConn).Read(0xc00009e480, {0xc000150000, 0x8000, 0x 8000})
/Users/pi/src/projects/v2ray_simple/proxy/vless/vless.go:229 +0x391
io.copyBuffer({0x7cde00, 0xc0000499a0}, {0x7f2b80a077f8, 0xc00009e480}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:426 +0x1b2
io.Copy(...)
/usr/local/go/src/io/io.go:385
net.genericReadFrom({0x7cd680?, 0xc00000e0d0?}, {0x7f2b80a077f8, 0xc00009e480})
/usr/local/go/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc00000e0d0, {0x7f2b80a077f8, 0xc00009e480})
/usr/local/go/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc00000e0d0, {0x7f2b80a077f8?, 0xc00009e480?})
/usr/local/go/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0x7cd680, 0xc00000e0d0}, {0x7f2b80a077f8, 0xc00009e480}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:412 +0x14b
io.Copy(...)
/usr/local/go/src/io/io.go:385
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7cd680?, 0xc00000e0d0}, {0x7f2b80a077f8?, 0xc000 09e480})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:133 +0x4ee
github.com/hahahrfool/v2ray_simple/netLayer.Relay({0x7ce950?, 0xc00009e480}, {0x7ced60?, 0xc00000e0d0})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:197 +0x12b
main.handleNewIncomeConnection({0x7d16b0?, 0xc0000de0c0?}, {0x7d0928, 0xc00000e0b8})
/Users/pi/src/projects/v2ray_simple/main.go:826 +0x2ecc
main.listenSer.func1({0x7d0928?, 0xc00000e0b8?})
/Users/pi/src/projects/v2ray_simple/main.go:230 +0x37
created by github.com/hahahrfool/v2ray_simple/netLayer.loopAccept
/Users/pi/src/projects/v2ray_simple/netLayer/listen.go:37 +0xca

goroutine 14 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f8638, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000080880?, 0xc000118480?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000080880, {0xc000118480, 0x205, 0x205})
/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000080880, {0xc000118480?, 0xc00004d840?, 0xc0001184db?})
/usr/local/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00000e0c0, {0xc000118480?, 0x0?, 0x7f2ba7680108?})
/usr/local/go/src/net/net.go:183 +0x45
crypto/tls.(*atLeastReader).Read(0xc00000cd98, {0xc000118480?, 0x0?, 0x71a340?})
/usr/local/go/src/crypto/tls/conn.go:784 +0x3d
bytes.(*Buffer).ReadFrom(0xc000136278, {0x7cd220, 0xc00000cd98})
/usr/local/go/src/bytes/buffer.go:204 +0x98
crypto/tls.(*Conn).readFromUntil(0xc000136000, {0x7cd660?, 0xc00000e0c0}, 0x1af?)
/usr/local/go/src/crypto/tls/conn.go:806 +0xe5
crypto/tls.(*Conn).readRecordOrCCS(0xc000136000, 0x0)
/usr/local/go/src/crypto/tls/conn.go:613 +0x116
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:581
crypto/tls.(*Conn).Read(0xc000136000, {0xc000186000, 0x8000, 0x8000?})
/usr/local/go/src/crypto/tls/conn.go:1284 +0x16f
io.(*multiReader).Read(0xc00000cb10, {0xc000186000, 0x8000, 0x8000})
/usr/local/go/src/io/multi.go:26 +0x9b
github.com/hahahrfool/v2ray_simple/proxy/vless.(*UserConn).Read(0xc00009e510, {0xc000186000, 0x8000, 0x 8000})
/Users/pi/src/projects/v2ray_simple/proxy/vless/vless.go:229 +0x391
io.copyBuffer({0x7cde00, 0xc000049a70}, {0x7f2b80a077f8, 0xc00009e510}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:426 +0x1b2
io.Copy(...)
/usr/local/go/src/io/io.go:385
net.genericReadFrom({0x7cd680?, 0xc00000e0f0?}, {0x7f2b80a077f8, 0xc00009e510})
/usr/local/go/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc00000e0f0, {0x7f2b80a077f8, 0xc00009e510})
/usr/local/go/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc00000e0f0, {0x7f2b80a077f8?, 0xc00009e510?})
/usr/local/go/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0x7cd680, 0xc00000e0f0}, {0x7f2b80a077f8, 0xc00009e510}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:412 +0x14b
io.Copy(...)
/usr/local/go/src/io/io.go:385
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7cd680?, 0xc00000e0f0}, {0x7f2b80a077f8?, 0xc000 09e510})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:133 +0x4ee
github.com/hahahrfool/v2ray_simple/netLayer.Relay({0x7ce950?, 0xc00009e510}, {0x7ced60?, 0xc00000e0f0})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:197 +0x12b
main.handleNewIncomeConnection({0x7d16b0?, 0xc0000de0c0?}, {0x7d0928, 0xc00000e0c0})
/Users/pi/src/projects/v2ray_simple/main.go:826 +0x2ecc
main.listenSer.func1({0x7d0928?, 0xc00000e0c0?})
/Users/pi/src/projects/v2ray_simple/main.go:230 +0x37
created by github.com/hahahrfool/v2ray_simple/netLayer.loopAccept
/Users/pi/src/projects/v2ray_simple/netLayer/listen.go:37 +0xca

goroutine 16 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f8368, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000080b80?, 0x6c244d?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).RawRead(0xc000080b80, 0xc00004d820)
/usr/local/go/src/internal/poll/fd_unix.go:766 +0x145
net.(*rawConn).Read(0xc00000e0d8, 0xc89?)
/usr/local/go/src/net/rawconn.go:43 +0x45
github.com/hahahrfool/v2ray_simple/netLayer.ReadFromMultiReader({0x7cf998, 0xc00000e0d8}, {0x7cf488?, 0 xc00000c708}, {0xc0000e0300?, 0x0?, 0x0?})
/Users/pi/src/projects/v2ray_simple/netLayer/readv.go:33 +0xe6
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7f2b80a077d8?, 0xc00009e480}, {0x7cd660?, 0xc000 00e0d0})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:83 +0x550
created by github.com/hahahrfool/v2ray_simple/netLayer.Relay
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:196 +0xea

goroutine 17 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f8458, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000080a80?, 0x6c2488?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).RawRead(0xc000080a80, 0xc0001de1e0)
/usr/local/go/src/internal/poll/fd_unix.go:766 +0x145
net.(*rawConn).Read(0xc00000e0e8, 0xc88?)
/usr/local/go/src/net/rawconn.go:43 +0x45
github.com/hahahrfool/v2ray_simple/netLayer.ReadFromMultiReader({0x7cf998, 0xc00000e0e8}, {0x7cf488?, 0 xc00000c8d0}, {0xc0000e0480?, 0x0?, 0x0?})
/Users/pi/src/projects/v2ray_simple/netLayer/readv.go:33 +0xe6
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7f2b80a077d8?, 0xc00009e3f0}, {0x7cd660?, 0xc000 00e0e0})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:83 +0x550
created by github.com/hahahrfool/v2ray_simple/netLayer.Relay
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:196 +0xea

goroutine 21 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f7fa8, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000080f00?, 0xc0001f4000?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000080f00, {0xc0001f4000, 0x18e8, 0x18e8})
/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000080f00, {0xc0001f4000?, 0xc0001de160?, 0xc0001f49f9?})
/usr/local/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00000e110, {0xc0001f4000?, 0x6d?, 0x8f8?})
/usr/local/go/src/net/net.go:183 +0x45
crypto/tls.(*atLeastReader).Read(0xc00000d680, {0xc0001f4000?, 0x0?, 0x7cd360?})
/usr/local/go/src/crypto/tls/conn.go:784 +0x3d
bytes.(*Buffer).ReadFrom(0xc000137078, {0x7cd220, 0xc00000d680})
/usr/local/go/src/bytes/buffer.go:204 +0x98
crypto/tls.(*Conn).readFromUntil(0xc000136e00, {0x7cd660?, 0xc00000e110}, 0xef4?)
/usr/local/go/src/crypto/tls/conn.go:806 +0xe5
crypto/tls.(*Conn).readRecordOrCCS(0xc000136e00, 0x0)
/usr/local/go/src/crypto/tls/conn.go:613 +0x116
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:581
crypto/tls.(*Conn).Read(0xc000136e00, {0xc0001f2000, 0x1000, 0x40a7aa?})
/usr/local/go/src/crypto/tls/conn.go:1284 +0x16f
io.(*multiReader).Read(0xc00000d590, {0xc0001f2000, 0x1000, 0x1000})
/usr/local/go/src/io/multi.go:26 +0x9b
bufio.(*Reader).fill(0xc0001b3b60)
/usr/local/go/src/bufio/bufio.go:106 +0x103
bufio.(*Reader).ReadByte(0xc0001b3b60)
/usr/local/go/src/bufio/bufio.go:264 +0x2c
github.com/hahahrfool/v2ray_simple/proxy/vless.(*UserConn).readudp_withLenthHead(0xc00009e750, {0xc0002 60000, 0x10000, 0x10000?})
/Users/pi/src/projects/v2ray_simple/proxy/vless/vless.go:289 +0x1c7
github.com/hahahrfool/v2ray_simple/proxy/vless.(*UserConn).Read(0xc00009e750, {0xc000260000, 0x10000, 0 x10000})
/Users/pi/src/projects/v2ray_simple/proxy/vless/vless.go:262 +0x32d
github.com/hahahrfool/v2ray_simple/netLayer.(*UniUDP_Extractor).GetNewUDPRequest(0xc0000d3860)
/Users/pi/src/projects/v2ray_simple/netLayer/udp_relay.go:141 +0x57
github.com/hahahrfool/v2ray_simple/netLayer.RelayUDP_to_Direct({0x7ce7c0?, 0xc0000d3860})
/Users/pi/src/projects/v2ray_simple/netLayer/udp_relay.go:238 +0x6e
main.handleNewIncomeConnection({0x7d16b0?, 0xc0000de0c0?}, {0x7d0928, 0xc00000e110})
/Users/pi/src/projects/v2ray_simple/main.go:633 +0x1a28
main.listenSer.func1({0x7d0928?, 0xc00000e110?})
/Users/pi/src/projects/v2ray_simple/main.go:230 +0x37
created by github.com/hahahrfool/v2ray_simple/netLayer.loopAccept
/Users/pi/src/projects/v2ray_simple/netLayer/listen.go:37 +0xca

goroutine 19 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f8188, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000080e00?, 0xc000118900?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000080e00, {0xc000118900, 0x205, 0x205})
/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000080e00, {0xc000118900?, 0xc00004df00?, 0xc00011895b?})
/usr/local/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00000e100, {0xc000118900?, 0x0?, 0x7f2ba7680108?})
/usr/local/go/src/net/net.go:183 +0x45
crypto/tls.(*atLeastReader).Read(0xc00000d500, {0xc000118900?, 0x0?, 0x71a340?})
/usr/local/go/src/crypto/tls/conn.go:784 +0x3d
bytes.(*Buffer).ReadFrom(0xc000136978, {0x7cd220, 0xc00000d500})
/usr/local/go/src/bytes/buffer.go:204 +0x98
crypto/tls.(*Conn).readFromUntil(0xc000136700, {0x7cd660?, 0xc00000e100}, 0x1af?)
/usr/local/go/src/crypto/tls/conn.go:806 +0xe5
crypto/tls.(*Conn).readRecordOrCCS(0xc000136700, 0x0)
/usr/local/go/src/crypto/tls/conn.go:613 +0x116
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:581
crypto/tls.(*Conn).Read(0xc000136700, {0xc0001c2000, 0x8000, 0x8000?})
/usr/local/go/src/crypto/tls/conn.go:1284 +0x16f
io.(*multiReader).Read(0xc00000ce40, {0xc0001c2000, 0x8000, 0x8000})
/usr/local/go/src/io/multi.go:26 +0x9b
github.com/hahahrfool/v2ray_simple/proxy/vless.(*UserConn).Read(0xc00009e5a0, {0xc0001c2000, 0x8000, 0x 8000})
/Users/pi/src/projects/v2ray_simple/proxy/vless/vless.go:229 +0x391
io.copyBuffer({0x7cde00, 0xc000049d00}, {0x7f2b80a077f8, 0xc00009e5a0}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:426 +0x1b2
io.Copy(...)
/usr/local/go/src/io/io.go:385
net.genericReadFrom({0x7cd680?, 0xc00000e118?}, {0x7f2b80a077f8, 0xc00009e5a0})
/usr/local/go/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc00000e118, {0x7f2b80a077f8, 0xc00009e5a0})
/usr/local/go/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc00000e118, {0x7f2b80a077f8?, 0xc00009e5a0?})
/usr/local/go/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0x7cd680, 0xc00000e118}, {0x7f2b80a077f8, 0xc00009e5a0}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:412 +0x14b
io.Copy(...)
/usr/local/go/src/io/io.go:385
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7cd680?, 0xc00000e118}, {0x7f2b80a077f8?, 0xc000 09e5a0})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:133 +0x4ee
github.com/hahahrfool/v2ray_simple/netLayer.Relay({0x7ce950?, 0xc00009e5a0}, {0x7ced60?, 0xc00000e118})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:197 +0x12b
main.handleNewIncomeConnection({0x7d16b0?, 0xc0000de0c0?}, {0x7d0928, 0xc00000e100})
/Users/pi/src/projects/v2ray_simple/main.go:826 +0x2ecc
main.listenSer.func1({0x7d0928?, 0xc00000e100?})
/Users/pi/src/projects/v2ray_simple/main.go:230 +0x37
created by github.com/hahahrfool/v2ray_simple/netLayer.loopAccept
/Users/pi/src/projects/v2ray_simple/netLayer/listen.go:37 +0xca

goroutine 20 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f8098, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000080e80?, 0xc000118b40?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000080e80, {0xc000118b40, 0x205, 0x205})
/usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000080e80, {0xc000118b40?, 0x298569ef784887a6?, 0xb8bed2dd916804c0?})
/usr/local/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00000e108, {0xc000118b40?, 0x0?, 0x7f2ba7680108?})
/usr/local/go/src/net/net.go:183 +0x45
crypto/tls.(*atLeastReader).Read(0xc00000d0c8, {0xc000118b40?, 0x0?, 0x71a340?})
/usr/local/go/src/crypto/tls/conn.go:784 +0x3d
bytes.(*Buffer).ReadFrom(0xc000136cf8, {0x7cd220, 0xc00000d0c8})
/usr/local/go/src/bytes/buffer.go:204 +0x98
crypto/tls.(*Conn).readFromUntil(0xc000136a80, {0x7cd660?, 0xc00000e108}, 0x0?)
/usr/local/go/src/crypto/tls/conn.go:806 +0xe5
crypto/tls.(*Conn).readRecordOrCCS(0xc000136a80, 0x0)
/usr/local/go/src/crypto/tls/conn.go:613 +0x116
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:581
crypto/tls.(*Conn).Read(0xc000136a80, {0xc0001d0000, 0x8000, 0x8000?})
/usr/local/go/src/crypto/tls/conn.go:1284 +0x16f
io.(*multiReader).Read(0xc00000d080, {0xc0001d0000, 0x8000, 0x8000})
/usr/local/go/src/io/multi.go:26 +0x9b
github.com/hahahrfool/v2ray_simple/proxy/vless.(*UserConn).Read(0xc00009e630, {0xc0001d0000, 0x8000, 0x 8000})
/Users/pi/src/projects/v2ray_simple/proxy/vless/vless.go:229 +0x391
io.copyBuffer({0x7cde00, 0xc000049da0}, {0x7f2b80a077f8, 0xc00009e630}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:426 +0x1b2
io.Copy(...)
/usr/local/go/src/io/io.go:385
net.genericReadFrom({0x7cd680?, 0xc00000e128?}, {0x7f2b80a077f8, 0xc00009e630})
/usr/local/go/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc00000e128, {0x7f2b80a077f8, 0xc00009e630})
/usr/local/go/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc00000e128, {0x7f2b80a077f8?, 0xc00009e630?})
/usr/local/go/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0x7cd680, 0xc00000e128}, {0x7f2b80a077f8, 0xc00009e630}, {0x0, 0x0, 0x0})
/usr/local/go/src/io/io.go:412 +0x14b
io.Copy(...)
/usr/local/go/src/io/io.go:385
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7cd680?, 0xc00000e128}, {0x7f2b80a077f8?, 0xc000 09e630})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:133 +0x4ee
github.com/hahahrfool/v2ray_simple/netLayer.Relay({0x7ce950?, 0xc00009e630}, {0x7ced60?, 0xc00000e128})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:197 +0x12b
main.handleNewIncomeConnection({0x7d16b0?, 0xc0000de0c0?}, {0x7d0928, 0xc00000e108})
/Users/pi/src/projects/v2ray_simple/main.go:826 +0x2ecc
main.listenSer.func1({0x7d0928?, 0xc00000e108?})
/Users/pi/src/projects/v2ray_simple/main.go:230 +0x37
created by github.com/hahahrfool/v2ray_simple/netLayer.loopAccept
/Users/pi/src/projects/v2ray_simple/netLayer/listen.go:37 +0xca

goroutine 23 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f7dc8, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000081100?, 0x6c244d?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).RawRead(0xc000081100, 0xc0001de020)
/usr/local/go/src/internal/poll/fd_unix.go:766 +0x145
net.(*rawConn).Read(0xc00000e130, 0xc88?)
/usr/local/go/src/net/rawconn.go:43 +0x45
github.com/hahahrfool/v2ray_simple/netLayer.ReadFromMultiReader({0x7cf998, 0xc00000e130}, {0x7cf488?, 0 xc00000d0f8}, {0xc0000e0900?, 0x0?, 0x0?})
/Users/pi/src/projects/v2ray_simple/netLayer/readv.go:33 +0xe6
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7f2b80a077d8?, 0xc00009e630}, {0x7cd660?, 0xc000 00e128})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:83 +0x550
created by github.com/hahahrfool/v2ray_simple/netLayer.Relay
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:196 +0xea

goroutine 24 [IO wait]:
internal/poll.runtime_pollWait(0x7f2b809f7cd8, 0x72)
/usr/local/go/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000081200?, 0x6c244d?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).RawRead(0xc000081200, 0xc0001de140)
/usr/local/go/src/internal/poll/fd_unix.go:766 +0x145
net.(*rawConn).Read(0xc00000e140, 0xc89?)
/usr/local/go/src/net/rawconn.go:43 +0x45
github.com/hahahrfool/v2ray_simple/netLayer.ReadFromMultiReader({0x7cf998, 0xc00000e140}, {0x7cf488?, 0 xc00000d368}, {0xc0000e0a80?, 0x0?, 0x0?})
/Users/pi/src/projects/v2ray_simple/netLayer/readv.go:33 +0xe6
github.com/hahahrfool/v2ray_simple/netLayer.TryCopy({0x7f2b80a077d8?, 0xc00009e6c0}, {0x7cd660?, 0xc000 00e138})
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:83 +0x550
created by github.com/hahahrfool/v2ray_simple/netLayer.Relay
/Users/pi/src/projects/v2ray_simple/netLayer/relay.go:196 +0xea

测速时ubuntu中,使用lazy时, 上传测不到速度 问题

最新代码 (55c41951376ed900a2cc5de04227f3cc356489b4)ubuntu arm64 虚拟机 测试中,客户端SpliceRead W方向 出问题,没有被触发
而且在ubuntu测试中,上传测不到速度,同样发现客户端SpliceRead W方向 出问题,没有被触发

有时候刷新页面,就发现 speed-go页面无法正常加载;但是又是随机的,有可能等待一阵子之后,又能加载了

但是 上传始终是测不到速度的;

刷新页面问题似乎在加载远程页面时是不易发生的,所以似乎和一切发生的太快有关

经排查,排除了 添加 runtime.Gosched()的问题。无 runtime.Gosched() 一样会出相同问题

关键问题是,我在macos里完全碰不到这个bug。暂时无法领悟到bug的原因,也许和go1.18有关??

v1.1.9~v1.2.0 致力于解决的问题

添加 log 的 配置文件自定义 的toml配置

在v1.1.9-alpha.1 , 重构了代码; 在之后的代码中,要进一步重构,以解决一些高级层的问题。

考虑使用 build tag 选择性 编译 高级层。因为 quic和 grpc这两个的依赖包特别大,严重增大了可执行文件的体积。

高级层 应该抽象出 一个 interface,便于调用,这样就不用在明示引用 任何包 的情况下 去使用 高级层了。

v1.2.0 将被打造为一个 超级稳定超级无敌的 阶段性版本,所以我们要提前在 v1.1.9 作准备。

编译出的vs运行时的一些问题

继上一个 issue #36 之后,我通过 GitHub Action 编译了一个静态链接 amd64 静态链接版本的。
verysimple_linux_amd64.zip
也能正常跑起来,但刚刚用 screen 开了个子窗口跑了一会,进程就炸了。

以下是 log 文件, vs_log_client* 的是 vs 生成的,log.txt 是我复制的控制台报错。

vs_log_client.txt
log.txt
vs_log_client (2).txt
vs_log_client (3).txt

看报错,似乎是 geosite 的问题,但是我刚刚又重新下了一遍 geosite,报错依旧。

image

vlesss ws手动访问ws地址

Describe the bug【描述 bug】
vlesss ws手动访问ws地址
例如https://domain/wspath
浏览器显示handshake error: bad "Connection" header

Expected behavior【预期的行为】
返回handshake error: bad "Connection" header是一个特征吗? 还是我配置出了问题
如果可以回落是不是隐蔽性更高一点

当然,复杂随机的path照理来说也挺安全的。

[Bug] iics在 quic 等 mux的 advlayer时 输出日志会导致闪退

Describe the bug【描述 bug】
socks5http 无法正常工作。

To Reproduce【如何复现该bug】
wget http://www.google.com / wget www.google.com 均无法获取数据,客户端报错:

{"L":"INFO ","T":"220510 083227.253","M":"New Accepted Conn","from":"127.0.0.1:50031","handler":"tcp+socks5http://0.0.0.0:9089"}
{"L":"WARN ","T":"220510 083227.254","M":"failed in inServer proxy handshake","handler":"0.0.0.0:9089","error":"unsupported socks version 71"}
{"L":"INFO ","T":"220510 083228.254","M":"New Accepted Conn","from":"127.0.0.1:50034","handler":"tcp+socks5http://0.0.0.0:9089"}
{"L":"WARN ","T":"220510 083228.254","M":"failed in inServer proxy handshake","handler":"0.0.0.0:9089","error":"unsupported socks version 71"}

wget https://www.google.com时,客户端正常响应,服务端挂掉:

2022-05-10 08:32:32.407 INFO Listening Super AdvLayer {"protocol": "udp+tls+quic+trojan", "addr": "0.0.0.0:8443"}
panic: unknown field type: { 0 0 }

goroutine 35 [running]:
go.uber.org/zap/zapcore.Field.AddTo({{0x0, 0x0}, 0x0, 0x0, {0x0, 0x0}, {0x0, 0x0}}, {0xc6bf20, 0xc00024e8c0})
go.uber.org/[email protected]/zapcore/field.go:180 +0xb34
go.uber.org/zap/zapcore.addFields(...)
go.uber.org/[email protected]/zapcore/field.go:210
go.uber.org/zap/zapcore.consoleEncoder.writeContext({0xc603a0?}, 0xc00020f500, {0xc000127400, 0x4, 0x1?})
go.uber.org/[email protected]/zapcore/console_encoder.go:141 +0x175
go.uber.org/zap/zapcore.consoleEncoder.EncodeEntry({0xc000056800?}, {0x0, {0xc0968aa8538bfbc6, 0x1e04b596c9, 0x1079fc0}, {0x0, 0x0}, {0xb618ce, 0x7}, {0x0, ...}, ...}, ...)
go.uber.org/[email protected]/zapcore/console_encoder.go:119 +0x6d4
go.uber.org/zap/zapcore.(*ioCore).Write(0xc00023fad0, {0x0, {0xc0968aa8538bfbc6, 0x1e04b596c9, 0x1079fc0}, {0x0, 0x0}, {0xb618ce, 0x7}, {0x0, ...}, ...}, ...)
go.uber.org/[email protected]/zapcore/core.go:86 +0x7c
go.uber.org/zap/zapcore.(*CheckedEntry).Write(0xc00021e480, {0xc000127400, 0x4, 0x4})
go.uber.org/[email protected]/zapcore/entry.go:220 +0x1d9
github.com/e1732a364fed/v2ray_simple.(*iicsZapWriter).Write(0xc0002cf7a0, {0xc0000dadf0?, 0xb618ce?, 0x0?})
github.com/e1732a364fed/v2ray_simple/iics.go:39 +0xe5
github.com/e1732a364fed/v2ray_simple.dialClient({0x0, {0x0, 0x0}, {0xc682e8, 0xc0002d2cc0}, {0xc6bc80, 0xc00021e540}, {0xc6c6c0, 0xc00021e600}, {0x0, ...}, ...}, ...)
github.com/e1732a364fed/v2ray_simple/main.go:909 +0x595
github.com/e1732a364fed/v2ray_simple.dialClient_andRelay({0x0, {0x0, 0x0}, {0xc682e8, 0xc0002d2cc0}, {0xc6bc80, 0xc00021e540}, {0xc6c6c0, 0xc00021e600}, {0x0, ...}, ...}, ...)
github.com/e1732a364fed/v2ray_simple/main.go:1299 +0x339
github.com/e1732a364fed/v2ray_simple.passToOutClient({0x0, {0x0, 0x0}, {0xc682e8, 0xc0002d2cc0}, {0xc6bc80, 0xc00021e540}, {0xc6c6c0, 0xc00021e600}, {0x0, ...}, ...}, ...)
github.com/e1732a364fed/v2ray_simple/main.go:842 +0x21f0
github.com/e1732a364fed/v2ray_simple.handshakeInserver_and_passToOutClient({0x0, {0x0, 0x0}, {0xc682e8, 0xc0002d2cc0}, {0xc6bc80, 0xc00021e540}, {0xc6c6c0, 0xc00021e600}, {0x0, ...}, ...})
github.com/e1732a364fed/v2ray_simple/main.go:503 +0x286
created by github.com/e1732a364fed/v2ray_simple.ListenSer.func1
github.com/e1732a364fed/v2ray_simple/main.go:115 +0x6f

Expected behavior【预期的行为】

Envs (please complete the following information):【系统环境】

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Other 【其他】

所有issue和 PR 尽量用中文(愤怒版)

你们就不要掩饰了,根据社会工程学所有参与的人大概率都是**人,而且大多数人的github的名称一看就是华人,而且你们的其他项目一般也含有中文,就不要自欺欺人了好吧

我们面向世界的话,要让全世界学中文,而不是反过来,不要自己给自己人添堵。以后可以考虑添加英文,但那也要以中文为主。

现在本项目还没达到装逼的程度,不要自以为是了。

就算你觉得是”约定“,没有装逼,那么我现在再次告诉你,本项目【约定】要尽量用中文

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.