TcpRoute , TCP 层的路由器。对于 TCP 连接自动从多个线路(电信、联通、移动)、多个域名解析结果中选择最优线路。

Related tags

Network TcpRoute2
Overview

TcpRoute2

Build Status release GitHub license platform

TcpRoute , TCP 层的路由器。对于 TCP 连接自动从多个线路(允许任意嵌套)、多个域名解析结果中选择最优线路。

TcpRoute 使用激进的选路策略,对 DNS 解析获得的多个IP同时尝试连接,同时使用多个线路进行连接,最终使用最快建立的连接。支持 TcpRoute 级别 Hosts 文件,支持黑白名单。提供代理、hosts 信誉度功能,只通过不安全的代理转发 https 等加密连接,提高安全性。当配合 redsocks、Proxifier 作为全局代理时可以启动“强制TcpRoute Dns解析”,强制将浏览器本地 DNS 解析改为代理服务器进行DNS解析来更好的优化网络连接,避免 Dns 污染造成的网络故障。

增加了反运营商 http 劫持功能,有两种方式,简易拆包反劫持及ttl反劫持。

通过 socks5 代理协议对外提供服务。

代理功能拆分成了独立的库,详细代理url格式及选项请参见 ProxyClient,目前支持直连、socks4、socks4a、socks5、http、https 等线路。其中 socks5 支持用户名、密码认证,http、https 支持用户名、密码基本认证。

安装

releases 有各个系统的 zip 包。根据系统下载对应的 zip 文件。解压后复制 config.toml.example 为 config.toml ,并根据 toml 内说明配置好上游代理即可。

Windows 下有图形界面,TcpRoute2-windows-gui-386.zip、TcpRoute2-windows-gui-amd64.zip 即带图形界面的版本。

配置

默认使用当前目录下的 config.toml 文件。

# TcpRoute2 配置文件
# https://github.com/GameXG/TcpRoute2
# 为 TOML 格式,格式说明:https://segmentfault.com/a/1190000000477752

# TcpRoute 监听地址
# 目前只对外提供 socks5 协议。
#
# addr = "127.0.0.1:7070"
# 默认值,表示监听 127.0.0.1 的 7070 端口,仅本机使用 TcpRoute 时建议这样配置。
# 将浏览器代理设置为 socks5 127.0.0.1:7070 即可使用 TcpRoute 代理访问网络。
#
# addr = ":7070"
# 监听所有 ip 地址的 7070 端口,允许其他计算机使用 TcpRoute 访问网络时建议这样配置。
# 将浏览器代理设置为 socks5 TcpRoute计算机IP:7070 即可使用 TcpRoute 代理访问网络。

addr="127.0.0.1:7070"


####################
# 客户端dns解析纠正功能
####################
# 当发现浏览器等客户端进行了本地dns解析时本功能将强制转换为 TcpRoute 进行dns解析。
# 使用 redsocks、Proxifier 实现全局代理时,应用程序会进行本地dns解析,启用这个功能将强制为代理进行dns解析。
# 开启这个功能将避免应用程序本地dns解析时无法避免 dns 污染的问题,同时代理负责DNS解析也能更好的优化网络访问。
#
# chrome 默认是远端dns解析,当不使用 redsocks、Proxifier 时不需要这个功能。
# firefox 很早之前默认是本地 dns 解析,不过可以修改为远端dns解析。目前是什么情况就不知道了。
#
# https 协议下 TcpRoute 是通过 SNI 功能来获得的目标网站域名。
# 因为 WinXP 系统下 IE 所有版本都不支持 SNI 功能,所以 windows xp IE 下 https 强制远端解析功能无效。
#
# 例子:
# PreHttpPorts=[80,]
# PreHttpsPorts=[443,]
# 这个是默认值,对 80 端口的 http 请求启用,对 443 端口的 tls 连接启用。
#
# PreHttpPorts=[0,]
# PreHttpsPorts=[0,]
# 关闭这个功能
#
# 原理:
# TcpRoute 接收到目的地址是域名的请求将不执行“客户端dns解析纠正功能”,
# 但当目的地址是 ip 时,将会读取客户端发出的请求,http 读取 hosts 字段获得域名,https 通过 SNI 功能获得域名。
# 之后将目标网站ip替换为域名,再执行转发操作。


####################
# 线路
####################
#
# TcpRoute 将根据一定的策略使用这里指定的线路(上游代理)将收到的请求请求转发出去。
#
# 目前的策略是 TcpPing ,即同时使用多个线路建立连接,最终使用最快建立连接的线路处理请求。
# 当某条线路访问某网站出现异常(响应超时、连接重置等)时将会被记录下来,下次访问同一网站时将跳过这个线路。
# 允许通过黑白名单指定每个线路允许、拒绝访问指定的网站。
#
# 目前上游代理支持 直连、http、https、socks4、socks4a、socks5 及 ss 协议,其中 http、https、socks5、ss 支持密码认证。
# 注意:直连也必须手工指定,当不指定时将不会使用直连转发请求。
#
##########
# 线路(上游代理)配置说明
##########
# [[UpStreams]]
#
# Name="direct"
# 线路名字,主要是日志使用。默认值为 ProxyUrl 项的内容。
#
#
# ProxyUrl="direct://0.0.0.0:0000"
# 线路(上游代理) URL
# 提供代理的类型、地址、用户认证方式等信息。
# 默认值为:"direct://0.0.0.0:0000"
#
# 支持 直连、http、https、socks4、socks4a、socks5 等协议,其中 http、https、socks5等支持密码认证。
# 允许多层嵌套代理。代理部分已经拆分成了独立的库,详细配置信息可以到 https://github.com/GameXG/ProxyClient 参看。
#
# 可以通过参数指定一些特殊选项,例如,https 代理是否验证服务器 tls 证书。
# 参数格式为:?参数名1=参数值1&参数名2=参数值2
# 例如:https://123.123.123.123:8088?insecureskipverify=true
#     全体协议可选参数: upProxy=http://145.2.1.3:8080 用于指定代理的上层代理,即代理嵌套。默认值:direct://0.0.0.0:0000
#
# 支持的代理协议:
# http 代理 http://123.123.123.123:8088
#     可选功能: 用户认证功能。格式:http://user:[email protected]:8080
#     可选参数:standardheader=false true表示 CONNNET 请求包含标准的 Accept、Accept-Encoding、Accept-Language、User-Agent等头。默认值:false
#
# https 代理 https://123.123.123.123:8088
#     可选功能: 用户认证功能,同 http 代理。
#     可选参数:standardheader=false 同上 http 代理
#     可选参数:insecureskipverify=false true表示跳过 https 证书验证。默认false。
#     可选参数:domain=域名 指定https验证证书时使用的域名,默认为 host:port
#
# socks4 代理 socks4://123.123.123.123:5050
#     注意:socks4 协议不支持远端 dns 解析
#
# socks4a 代理 socks4a://123.123.123.123:5050
#
# socks5 代理 socks5://123.123.123.123:5050
#     可选功能:用户认证功能。支持无认证、用户名密码认证,格式同 http 代理。
#
# 等代理
#
# 直连 direct://0.0.0.0:0000
#     可选参数: LocalAddr=0.0.0.0:0 表示tcp连接绑定的本地ip及端口,默认值 0.0.0.0:0。
#     可选参数: SplitHttp=false true 表示拆分 http 请求(分多个tcp包发送),可以解决简单的运营商 http 劫持。默认值:false 。
#              原理是:当发现目标地址为 80 端口,发送的内容包含 GET、POST、HTTP、HOST 等关键字时,会将关键字拆分到两个包在发送出去。
#              注意: Web 防火墙类软件、设备可能会重组 HTTP 包,造成拆分无效。目前已知 ESET Smart Security 会造成这个功能无效,即使暂停防火墙也一样无效。
#              G|ET /pa|th H|TTTP/1.0
#              HO|ST:www.aa|dd.com
#     可选参数: sleep=0  建立连接后延迟多少毫秒发送数据,配合 ttl 反劫持系统时建议设置为10置50。默认值 0 。
#
# DnsResolve=true
# 是否执行本地dns解析,只建议直连、socks4 线路设置为 true 。
# 设置为 true 时将由 TcpRoute 进行本地 DNS 解析,目前主要是同时使用本地操作系统dns解析及 TcpRoute hosts dns解析。
# 解析获得多个IP时将会同时建立到多个ip的连接,最终使用最快建立连接的ip。
# 设置为 false 时将由上游代理负责dns解析。建议 http、https、socks4a、socks5 等代理都设置为 false 。
# 默认值 false
#
#
# Credit=0
# 线路的信誉度
# 代理线路不安全时建议使用这个选项。
# 当信誉度低于 0 时将不会通过这个线路建立明文协议(http、ftp、stmp等)的连接。
# 各协议需要的信誉度:https://github.com/GameXG/TcpRoute2/blob/master/netchan/dialchan_filter.go#L19
# 默认值 0
#
#
# Sleep=80
# 使用本线路前等待的时间(单位毫秒)
# 主要目的是降低上游代理的负担。
# 建议直连线路设置为 0 ,代理线路设置为 80(毫秒) 。
# 国内 baidu、qq tcping一般是30ms,这里设置为80ms(0.08秒),
# 可以使得大部分国内站点不会尝试通过代理访问,降低上游代理的负担。
# 0.08秒的延迟很低,并且建立连接后会缓存最快连接记录,不会再次延迟,所以不建议删除。
# 当目标网站匹配域名白名单、黑名单,即手工指定线路时,Sleep 参数无效。
# 默认值 0
#
#
# CorrectDelay=0
# 修正延迟
# 某协议缺陷,协议并不会报告是否连接到了目标网站,所以无法获得真实的建立到到目标网站的耗时。
# 无法获得准确的到目标网站的耗时将使得 tcpping 策略无法准确的评估各个线路的速度,所以增加了这个选项用来手工修正。
# tcpping 策略评估最快建立连接的线路时会以 “建立连接的实际耗时 + CorrectDelay” 进行评估,选出最快建立连接的线路。
#
#
######
# 域名白名单
######
# 当前线路的域名白名单(线路级别),白名单内的域名将只从当前线路转发。
# 当一个域名同时存在多个线路白名单内时,将会同时从多个线路尝试建立连接。
# 单个线路可以配置多个白名单,每个白名单一个 [[UpStreams.Whitelist]] 即可。
# 当不存在 [[UpStreams.Whitelist]] 项目时即表示不配置白名单。
# 当目标网站匹配域名白名单、黑名单,即手工指定线路时,线路的 Sleep 参数无效。
#
# [[UpStreams.Whitelist]]
#
# Path="direct.txt"
# 允许本地文件及 http 、https 白名单文件。
# 本地路径是相对路径时,实际路径是相对于 config.toml 文件所在目录。TcpRoute 会检测 hosts 文件修改并自动重新载入。
# http、https 域名文件将按 UpdateInterval 间隔定时更新。
# 不允许单个 [[UpStreams.Whitelist]] 下面出现多个 Path 指定多个白名单文件。
# 多个白名单需要分别放到不同的 [[UpStreams.Whitelist]] 下面。
# 默认值:必填
#
# Path="https://raw.githubusercontent.com/renzhn/MEOW/master/doc/sample-config/direct"
# 感谢 renzhn MEOW 维护的境内网站白名单
#
# Path="https://raw.githubusercontent.com/GameXG/TcpRoute2/master/direct.txt"
# 感谢 puteulanus 整理的 unblock youku 最小国内网站白名单。
#
#
# UpdateInterval="24h"
# 网络 hosts 文件更新间隔
# 最小有效值 1 分钟, 格式为:"1.5h" or "2h45m". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
# 下载失败时 UpdateInterval 不会生效,将等待 1 分钟重试。
# 默认值: "24h"
#
#
# Type="suffix"
# 域名类型
# 指定域名文件的匹配类型
# base 完整匹配,默认值。即 www.abc.com 只匹配 www.abc.com ,不匹配 aaa.www.abc.com 。
# suffix 后缀匹配。即 abc.com 匹配 abc.com、www.abc.com、aaa.www.abc.com,不匹配 aaaabc.com。
#     注意,想匹配 *.cn 的域名请直接使用 cn ,而不要使用 .cn ,程序内部会自动增加"."。
# pan 泛解析匹配。即 *.abc.com 匹配 www.abc.com 、aaa.www.abc.com。不匹配 .abc.com。?.abc.com 匹配 a.abc.com。
# regex 正则匹配。即 ^.+?.com$ 匹配 www.abc.com 、aaa.www.abc.com。注意:完整匹配时不要忘记 ^$ 。
# 默认值:"base"
#
######
# 域名黑名单
######
# 同域名白名单
# [[UpStreams.Blacklist]]
# 同白名单。
#
# Path="proxy.txt"
#
# Path="https://raw.githubusercontent.com/renzhn/MEOW/master/doc/sample-config/proxy"
# 感谢 renzhn MEOW 维护的网站黑名单
#
# UpdateInterval="24h"
# Type="suffix"


# 直连线路例子:
# 注意:直连也必须手工指定,当不指定时将不会使用直连转发请求。
[[UpStreams]]
Name="direct"
ProxyUrl="direct://0.0.0.0:0000"
DnsResolve=true
# DnsResolve 表示是否执行本地dns解析,直连线路建议指定为 true。

# 直连线路域名白名单
# 各个线路的白名单、黑名单是独立的,可以通过多个 [[UpStreams.Whitelist]] 指定多个白名单。
[[UpStreams.Whitelist]]
Path="https://raw.githubusercontent.com/GameXG/TcpRoute2/master/direct.txt"
# 感谢 puteulanus 整理的 unblock youku 最小国内网站白名单。
UpdateInterval="24h"
Type="suffix"

# 代理线路例子:
[[UpStreams]]
Name="proxy1"
ProxyUrl="socks5://123.123.123.123:5050"
Credit=0
# Credit 表示代理信誉度,低于0的将不会通过当前线路转发明文协议(http、ftp等)的请求。
Sleep=80
# Sleep表示使用本线路前等待的时间,单位毫秒。
CorrectDelay=0
# CorrectDelay 表示当前线路修正延迟,某协议建议设置为 50-100 之间的值,非某协议代理设置为 0。


####################
# Hosts 功能
####################
# 独立与操作系统的 hosts,只对于代理生效。
# 允许通过多个 [[hosts]] 项来同时使用多个 hosts 文件 。
#
# [[Hosts]]
#
# Path="hosts/racaljk_hosts.txt"
# hosts 路径,同域名白名单,允许本地、http、https文件。
# 默认值:必填
#
# Path="https://raw.githubusercontent.com/racaljk/hosts/master/hosts"
# 感谢 https://github.com/racaljk/hosts 项目维护 hosts
#
#
# Type="base"
# hosts 域名类型,同域名白名单。标准的 hosts 文件都是 base 类型。
# 默认值:"base"
#
#
# UpdateInterval="24h"
# 网络 hosts 文件更新间隔
# 最小有效值 1 分钟, 格式:"1.5h" or "2h45m". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
# 下载失败时 UpdateInterval 不会生效,将等待 1 分钟重试。
# 默认值:"24h"
#
#
# Credit=-100
# hosts 信誉度
# 同线路信誉信誉度,对于小于 0 的 hosts文件将只用于 https 等自带加密的协议。
# 在某些情况下为了防止 http 明文协议分析阻断连接,建议设置为小于 0 的值。
# 默认值:0

# 一个例子
[[Hosts]]
Path="https://raw.githubusercontent.com/racaljk/hosts/master/hosts"
# 感谢 https://github.com/racaljk/hosts 项目维护 hosts
Credit=-100

强制代理服务器 DNS 解析功能

redsocks、Proxifier 全局代理及部分应用会执行本地DNS解析,这样将无法很好的执行优化。启用这个功能后 TcpRoute2 将在发现客户端执行了本地 DNS 解析时强制改为代理服务器进行DNS解析来更好的优化网络连接。

解决了路由器通过 redsocks 配置成全局透明代理时无法应对dns污染的问题。

由于 https 协议是通过 SNI 功能来获得的目标网站域名,所以 WinXP 系统下 IE 所有版本都无法使用 https 强制远端解析功能。

信誉度功能

增加了代理信誉度、dns信誉度的功能,对于信誉度低的代理将只允许 https 、smtp ssl 等本身支持服务器认证的协议。这样使用不安全的代理也能比较安全。

Hosts 功能

增加了代理级别的 hosts 文件,支持本地及网络hosts文件。通过hosts即使在不存在上层代理的情况下也可以优化网络访问。hosts 文件同样也有信誉度功能。

感谢 https://github.com/racaljk/hosts 项目维护 hosts 。

白名单、黑名单功能

允许指定的域名走指定的线路,指定的域名不走指定的线路。 黑白名单是线路级别的,而不是全局的,每个线路都有自己的黑白名单。

感谢 https://github.com/renzhn/MEOW 维护了国内域名白名单。

防运营商 HTTP 劫持功能

拆包反劫持功能

通过拆分 http 请求到多个 tcp 包来实现简易http反劫持功能,只能应付简单的http劫持。 通过 SplitHttp 选项开启,默认关闭。 注意:部分杀毒软件、防火墙会重组 http 请求tcp包,造成这个功能无效。

基本不会造成性能损耗。

实现原理:当目标端口是80时,发出的请求一旦包含 GET、POST、HTTP、HOST则会被拆分到多个TCP包发送。

ttl 反劫持功能

ttl 反劫持是独立的程序,需要单独启动ttl反劫持程序,并将直连线路的 sleep 设置为10至50之间的值。

实现原理:当发现 http 连接建立时,将会发送错误数据、连接重置命令混淆http连接。通过设置 ttl 值使得错误数据、重置命令不会到达目标网站,只会在网络中传递,经过并干扰可能存在的http劫持系统。

sleep 的目的是建立连接后不立刻发送数据,而是等待 ttl 反劫持程序发送混淆内容后再发送实际数据。 一般ttl反劫持程序发送混淆数据的耗时为10-30毫秒,sleep设置为大于这个值即可。

ttl 反劫持程序地址:https://github.com/GameXG/ProxyClient/tree/master/ttl

具体细节

  • 对 DNS 解析获得的多个IP同时尝试连接,最终使用最快建立的连接。
  • 同时使用直连及代理建立连接(可设置延迟),最终使用最快建立的连接。
  • 缓存10分钟上次检测到的最快线路方便以后使用。
  • 解析不存在域名获得域名纠错IP,并添加到 IP黑名单
Issues
  • 5.0升到5.8之后大量无法访问的网站被交给了直连

    5.0升到5.8之后大量无法访问的网站被交给了直连

    背景: 本地运营商有DNS劫持,并且所有不存在域名都会被返回搜狗搜索的IP。 内网设备上有TCP查询的防污染DNS,本机、路由器的DNS服务器均设置的是那台内网设备的IP地址。 运行环境的系统设置DNS指向的是它本机,在CMD中nslookup可以看到正确结果。 症状: 从5.0升级到5.8之后,大量网页无法打开,log显示包括各种谷歌域名在内的各种请求全部选择了直连,同时出现了大量试图连接故障IP的信息。

    因为所有的东西现在都是跑在一台XP上,调试很麻烦。大致的猜测是在判断线路时发生了DNS污染,导致原本无法连接的请求的IP被运营商污染成了搜狗的,结果请求全部分配给了直连。但是本机、运行环境以及网关的DNS设置均指向的是抗污染的自建DNS,这个污染发生在哪里非常迷。。退回5.0之后症状消失。

    opened by puteulanus 11
  • 指定hosts时报错

    指定hosts时报错

    本地有简单的HTTP服务, http://127.0.0.1/file/hosts.txt 的内容为一行 127.0.0.1 localhost 。 在配置中指定本地hosts报错,删除后错误消失。 格式完全相同的 pgl.yoyo.org 的hosts不会引发问题。

    顺便,指定与配置文件同目录的 whitelist.txt (Path="whitelist.txt")之后似乎并没有加载白名单,在加入 google.com 之后依然可以正常访问。尝试过重启软件,依旧如此。

    新加的几个功能的配置建议做一下判断,当缺少子项或者某选项不存在时,使用默认值启动,或者输出特定的错误信息后退出。比如[[Hosts]]不存在时启动过程中会直接崩溃掉,必需在同目录新建一个hosts指定才可以顺利运行,但实际上hosts应该不属于必选配置。

    配置文件为:

    [[Hosts]]
    Path="http://127.0.0.1/file/hosts.txt"
    Type="base"
    UpdateInterval="24h"
    
    [[Hosts]]
    Path="http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext"
    Type="base"
    UpdateInterval="24h"
    

    报错信息:

    panic: runtime error: invalid memory address or nil pointer dereference
    [signal 0xc0000005 code=0x0 addr=0x0 pc=0x50a4fa]
    
    goroutine 26 [running]:
    github.com/gamexg/TcpRoute2/ufile.(*UFile).loop_watcher(0x110d4600)
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:283 +
    0x6a
    github.com/gamexg/TcpRoute2/ufile.(*UFile).loop.func2(0x110d4600, 0x11150c20)
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:270 +
    0x21
    created by github.com/gamexg/TcpRoute2/ufile.(*UFile).loop
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:272 +
    0x90
    
    goroutine 1 [runnable, locked to thread]:
    syscall.Syscall(0x71a28cd3, 0x2, 0x734, 0x7fffffff, 0x0, 0x92d48, 0x0, 0x1b9e)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/runtime/syscall_windo
    ws.go:128 +0x4a
    syscall.listen(0x734, 0x7fffffff, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/syscall/zsyscall_wind
    ows.go:1464 +0x5f
    syscall.Listen(0x734, 0x7fffffff, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/syscall/syscall_windo
    ws.go:745 +0x35
    net.(*netFD).listenStream(0x110e1ce0, 0x311f4850, 0x1115a8a0, 0x7fffffff, 0x0, 0
    x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/sock_posix.go:166
     +0x205
    net.socket(0x73362c, 0x3, 0x2, 0x1, 0x0, 0x0, 0x311f4850, 0x1115a8a0, 0x0, 0x0,
    ...)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/sock_posix.go:76
    +0x184
    net.internetSocket(0x73362c, 0x3, 0x311f4850, 0x1115a8a0, 0x0, 0x0, 0x0, 0x0, 0x
    0, 0x0, ...)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/ipsock_posix.go:1
    60 +0xe6
    net.ListenTCP(0x73362c, 0x3, 0x1115a8a0, 0x311f4830, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/tcpsock_posix.go:
    329 +0x15b
    net.Listen(0x73362c, 0x3, 0x110dadb0, 0xc, 0x0, 0x0, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/dial.go:395 +0x38
    0
    main.(*Server).ListAndServe(0x110d3050, 0x0, 0x0)
            /home/travis/gopath/src/github.com/GameXG/TcpRoute2/server.go:65 +0x63
    main.main()
            /home/travis/gopath/src/github.com/GameXG/TcpRoute2/main.go:84 +0x8e3
    
    goroutine 5 [chan receive]:
    github.com/golang/glog.(*loggingT).flushDaemon(0x8da1e0)
            /home/travis/gopath/src/github.com/golang/glog/glog.go:882 +0x61
    created by github.com/golang/glog.init.1
            /home/travis/gopath/src/github.com/golang/glog/glog.go:410 +0x21d
    
    goroutine 17 [runnable]:
    github.com/gamexg/TcpRoute2/netchan.(*hostsDns).loop(0x1113c340, 0x110d4f00, 0x1
    10d2db0)
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/netchan/dnschan_host
    s.go:169
    created by github.com/gamexg/TcpRoute2/netchan.(*hostsDns).Config
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/netchan/dnschan_host
    s.go:163 +0xcce
    
    goroutine 7 [semacquire]:
    sync.runtime_Semacquire(0x11150c2c)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/runtime/sema.go:43 +0
    x26
    sync.(*WaitGroup).Wait(0x11150c20)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/sync/waitgroup.go:126
     +0xa4
    github.com/gamexg/TcpRoute2/ufile.(*UFile).loop(0x110d4600)
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:274 +
    0x9c
    created by github.com/gamexg/TcpRoute2/ufile.NewUFile
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:81 +0
    x209
    
    goroutine 8 [runnable]:
    github.com/gamexg/TcpRoute2/netchan.(*hostsDns).loop(0x1113c340, 0x110d4600, 0x1
    10d24e0)
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/netchan/dnschan_host
    s.go:169
    created by github.com/gamexg/TcpRoute2/netchan.(*hostsDns).Config
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/netchan/dnschan_host
    s.go:163 +0xcce
    
    goroutine 9 [runnable]:
    github.com/gamexg/TcpRoute2/netchan.searchBlackIP()
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/netchan/dnschan.go:7
    0
    created by github.com/gamexg/TcpRoute2/netchan.init.1
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/netchan/dnschan.go:6
    7 +0x24a
    
    goroutine 10 [runnable]:
    github.com/go-fsnotify/fsnotify.(*Watcher).readEvents(0x110d2b70)
            /home/travis/gopath/src/github.com/go-fsnotify/fsnotify/windows.go:373
    created by github.com/go-fsnotify/fsnotify.NewWatcher
            /home/travis/gopath/src/github.com/go-fsnotify/fsnotify/windows.go:46 +0
    x2d5
    
    goroutine 11 [runnable]:
    github.com/gamexg/TcpRoute2/ufile.(*UFile).loop(0x110d4f00)
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:261
    created by github.com/gamexg/TcpRoute2/ufile.NewUFile
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:81 +0
    x209
    
    goroutine 12 [runnable]:
    github.com/gamexg/TcpRoute2/ufile.(*UFile).down(0x110d4f00, 0x110d4fc0, 0x0, 0x1
    0)
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:116
    created by github.com/gamexg/TcpRoute2/ufile.(*UFile).Add
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:211 +
    0x57d
    
    goroutine 13 [select]:
    net/http.(*Transport).getConn(0x11110a80, 0x11110ee0, 0x0, 0x11124300, 0x4, 0x11
    150950, 0xf, 0x0, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/transport.go
    :554 +0x533
    net/http.(*Transport).RoundTrip(0x11110a80, 0x11110ee0, 0xaf, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/transport.go
    :228 +0x3b9
    net/http.send(0x11110ee0, 0x311f4288, 0x11110a80, 0x111245a0, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/client.go:22
    0 +0x40a
    net/http.(*Client).send(0x8d9fe0, 0x11110ee0, 0x5c, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/client.go:14
    3 +0xf5
    net/http.(*Client).doFollowingRedirects(0x8d9fe0, 0x11110ee0, 0x7ccc90, 0x0, 0x0
    , 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/client.go:38
    0 +0x9bd
    net/http.(*Client).Get(0x8d9fe0, 0x11124300, 0x5c, 0x110d2bd0, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/client.go:30
    6 +0x92
    net/http.Get(0x11124300, 0x5c, 0x11159f9c, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/client.go:28
    1 +0x3f
    github.com/gamexg/TcpRoute2/ufile.(*UFile).down(0x110d4f00, 0x110d5040, 0x0, 0x0
    )
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:133 +
    0x241
    created by github.com/gamexg/TcpRoute2/ufile.(*UFile).Add
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:211 +
    0x57d
    
    goroutine 14 [select]:
    net.lookupIPDeadline(0x11150950, 0xc, 0xce2ad31a, 0xe, 0x7a56c0, 0x8da060, 0x0,
    0x0, 0x0, 0x0, ...)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/lookup.go:109 +0x
    5d3
    net.internetAddrList(0x73362c, 0x3, 0x11150950, 0xf, 0xce2ad31a, 0xe, 0x7a56c0,
    0x8da060, 0x0, 0x0, ...)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/ipsock.go:252 +0x
    584
    net.resolveAddrList(0x735550, 0x4, 0x73362c, 0x3, 0x11150950, 0xf, 0xce2ad31a, 0
    xe, 0x7a56c0, 0x8da060, ...)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/dial.go:153 +0x36
    4
    net.(*Dialer).Dial(0x110d4380, 0x73362c, 0x3, 0x11150950, 0xf, 0x0, 0x0, 0x0, 0x
    0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/dial.go:209 +0x15
    0
    net.(*Dialer).Dial-fm(0x73362c, 0x3, 0x11150950, 0xf, 0x0, 0x0, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/transport.go
    :38 +0x58
    net/http.(*Transport).dial(0x11110a80, 0x73362c, 0x3, 0x11150950, 0xf, 0x0, 0x0,
     0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/transport.go
    :499 +0x68
    net/http.(*Transport).dialConn(0x11110a80, 0x0, 0x11124300, 0x4, 0x11150950, 0xf
    , 0x0, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/transport.go
    :596 +0x1619
    net/http.(*Transport).getConn.func4(0x11110a80, 0x0, 0x11124300, 0x4, 0x11150950
    , 0xf, 0x110d5100)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/transport.go
    :549 +0x4d
    created by net/http.(*Transport).getConn
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/http/transport.go
    :551 +0x20d
    
    goroutine 16 [runnable, locked to thread]:
    syscall.Syscall6(0x71a22899, 0x4, 0x1113de80, 0x0, 0x11152ee4, 0x11152e3c, 0x0,
    0x0, 0xc, 0x1113de80, ...)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/runtime/syscall_windo
    ws.go:139 +0x4a
    syscall.GetAddrInfoW(0x1113de80, 0x0, 0x11152ee4, 0x11152e3c, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/syscall/zsyscall_wind
    ows.go:1670 +0x77
    net.newLookupIP(0x11150950, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/lookup_windows.go
    :118 +0x126
    net.glob.func15(0x7ccc0c, 0x11150950, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/hook.go:10 +0x44
    net.lookupIPDeadline.func1(0x0, 0x0, 0x0, 0x0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/lookup.go:106 +0x
    58
    internal/singleflight.(*Group).doCall(0x8d9e00, 0x110d2cc0, 0x11150950, 0xc, 0x1
    11509b0)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/internal/singleflight
    /singleflight.go:93 +0x21
    created by internal/singleflight.(*Group).DoChan
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/internal/singleflight
    /singleflight.go:86 +0x30d
    
    goroutine 18 [runnable]:
    github.com/go-fsnotify/fsnotify.(*Watcher).readEvents(0x110d2e10)
            /home/travis/gopath/src/github.com/go-fsnotify/fsnotify/windows.go:373
    created by github.com/go-fsnotify/fsnotify.NewWatcher
            /home/travis/gopath/src/github.com/go-fsnotify/fsnotify/windows.go:46 +0
    x2d5
    
    goroutine 19 [runnable]:
    github.com/gamexg/TcpRoute2/ufile.(*UFile).loop(0x110d5480)
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:261
    created by github.com/gamexg/TcpRoute2/ufile.NewUFile
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:81 +0
    x209
    
    goroutine 20 [runnable]:
    github.com/gamexg/TcpRoute2/ufile.(*UFile).down(0x110d5480, 0x110d56c0, 0x0, 0x1
    )
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:116
    created by github.com/gamexg/TcpRoute2/ufile.(*UFile).Add
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:211 +
    0x57d
    
    goroutine 21 [runnable]:
    github.com/gamexg/TcpRoute2/ufile.(*UFile).down(0x110d5480, 0x110d5740, 0x0, 0x1
    )
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:116
    created by github.com/gamexg/TcpRoute2/ufile.(*UFile).Add
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:211 +
    0x57d
    
    goroutine 22 [runnable]:
    main.(*DialClients).loop(0x110d2de0, 0x110d5480)
            /home/travis/gopath/src/github.com/GameXG/TcpRoute2/upstream_dialclients
    .go:170
    created by main.(*DialClients).Config
            /home/travis/gopath/src/github.com/GameXG/TcpRoute2/upstream_dialclients
    .go:165 +0xaaf
    
    goroutine 23 [runnable]:
    net.(*ioSrv).ProcessRemoteIO(0x110eab48)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/fd_windows.go:135
    
    created by net.startServer
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/fd_windows.go:238
     +0xc9
    
    goroutine 24 [chan receive, locked to thread]:
    net.(*ioSrv).ProcessRemoteIO(0x110eab50)
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/fd_windows.go:138
     +0xcc
    created by net.startServer
            /home/travis/.gimme/versions/go1.5.linux.amd64/src/net/fd_windows.go:240
     +0x11e
    
    goroutine 25 [runnable]:
    github.com/gamexg/TcpRoute2/ufile.(*UFile).loop.func1(0x110d4600, 0x11150c20)
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:265
    created by github.com/gamexg/TcpRoute2/ufile.(*UFile).loop
            /home/travis/gopath/src/github.com/gamexg/TcpRoute2/ufile/ufile.go:268 +
    0x6b
    
    opened by puteulanus 9
  • 永远不会直连 和 下线的socks5代理长时间影响连通性 和 GoAgent支持

    永远不会直连 和 下线的socks5代理长时间影响连通性 和 GoAgent支持

    问题1:永远不会直连

    • 前提:配置过 direct (Credit>0),继承了COW的黑白名单, 白名单(suffix)里有 .cn 别的都是纯Upstream
    • 测试地址: http://ip.cn
    • 路由结果:走了个台湾的shadowsocks出去

    问题2:下线的socks5代理长时间影响连通性

    • 情景1:有一个速度比较快的socks5上游突然挂了
    • 症候:当时访问的走这个代理的网站在N分钟之内继续缓存到这个代理导致一直连不上 直到这个线路被标记为经常故障线路
    • 情景2:socks5对应的shadowsocks服务器集体更新
    • 症候:所有线路变成经常故障线路持续N分钟 被迫重启路由器

    问题3:走HTTP上游代理时日志里没有任何体现

    • 大概没什么多说的吧...

    问题4:配合使用GoAgent的时候报错

    • 前提:加了允许不正常证书的flag
    • 报错: 错误:TLS 协议握手错误:tls: oversized record received with length 20527

    问题5:日志里出现大量没被替换的占位符

    • 例子: %v %v(%v):%v dialCreadit=%v ipCredit=%v 信任度低,拒绝访问。 tcp [censored-host] [censored-host] [censored-port] -1 -1
    opened by wfjsw 7
  • 对于 配置文件 的内容不太理解

    对于 配置文件 的内容不太理解

    addr="127.0.0.1:7070"

    [[UpStreams]] Name="direct" ProxyUrl="direct://0.0.0.0:0000" DnsResolve=true

    [[UpStreams]] Name="SS1" ProxyUrl="ss://method:[email protected]:5050" DnsResolve=false

    [[UpStreams]] Name="SS2" ProxyUrl="ss://method:[email protected]:5050" DnsResolve=false

    Credit=0

    Sleep=80

    CorrectDelay=50

    提问:

    对于 浏览器 有插件的,第一个 [[UpStreams]] ,direct(直连) 是不是可以不用保留了? 不过保留也没所谓,毕竟也许有些站也许能直连了,就更快了。。。

    对吗?

    再: “ 直连 direct://0.0.0.0:0000/?LocalAddr=123.123.123.123:0 ”,后面这个 “?LocalAddr=123.123.123.123:0” 是啥意思?

    SS 不支持 TCP Fast Open , One Time Auth ?

    “[[UpStreams]]” 这个 及 对应参数 需要 每一个代理地址 都写一遍?对吗?感觉怪怪的。。。(如上配置没错吧?) (感觉有些繁琐。。。以后版本会作简化不?)

    这样的格式会不会比较不好?

    Proxy = direct, DnsResolve(需要的功能加上“,”隔开填上功能名,不启用的直接留空不写。)

    Proxy = http, http://123.123.123.123:8088 Proxy = https, https://123.123.123.123:8088 Proxy = socks4, socks4://123.123.123.123:5050 Proxy = socks4a, socks4a://123.123.123.123:5050 Proxy = socks5, socks5://123.123.123.123:5050, upProxy=http://145.2.1.3:8080 Proxy = ss, ss://method:[email protected]:5050, TCPFastOpen, OneTimeAuth

    这样如何,方便大量添加代理地址。。。

    opened by laincat 5
  • TcpRoute2 只监听在 IPv4 上,开启 DNS 纠错功能也会返回 IPv6 的地址

    TcpRoute2 只监听在 IPv4 上,开启 DNS 纠错功能也会返回 IPv6 的地址

    当设置 TcpRoute2 的监听地址为 0.0.0.0 时,此时实际上 TcpRoute2 会监听在 ::: 这个 IPv6 的地址上,如果此时开启 dns 纠错功能,会返回一些 IPv6 的地址,如:

    tcp 0 0 :::7373 :::* LISTEN 20582/TcpRoute2-lin

    为 scontent-hkg3-1.xx.fbcdn.net:443 找到了最快的稳定连接 [2a03:2880:f002:110:face:b00c:0:3]:443 ,线路:[UNIQUE-HK]

    而实际上代理是不支持 IPv6 连接的,这样会导致很长时间都打不开目标网站。

    即使强制它只监听在 127.0.0.1 这样的地址上,仍然会返回 IPv6的地址:

    为 gp3.googleusercontent.com:443 找到了最快的稳定连接 [2404:6800:4005:802::2001]:443 ,线路:[GY-HK1].

    1. 能否区分下 0.0.0.0 和 ::: 这两种监听地址?或是增加一个全局的 IPv6 开关?
    2. 能否在监听 IPv4 地址,同时开启 dns 纠错时,不返回 IPv6 的解析结果?
    opened by rampageX 4
  • 手工指定线路功能

    手工指定线路功能

    #27

    顺便希望可以有一个指定某些网站走某一条线路的列表。应用场景包括无论如何都希望直连的网站(网易云音乐等)与登录验证中包含了IP信息的网站(某些VPS管理面板)。 前者即使因为本地网络环境波动造成使用代理打开较快,但不是国内IP无法正常播放的特性使打开速度没有意义。后者在多个二级代理的延迟排名变化造成IP变动时会要求重新登录,造成不便。

    opened by GameXG 4
  • 免代理访问 G

    免代理访问 G

    好吧,其实就是类似于修改hosts文件。 扫描得到google的ip,然后使用这个ip进行访问。

    原理是google的ip足够多,目前并没有全部封锁。

    实际测试过程: 1.在vps上面使用 https://github.com/GameXG/TlsScanner 扫描google ip 段开放的443端口,并获得证书信息。 2.对每个扫描到的ip本地尝试连接,并验证证书信息。 3.整理连接成功的ip,通过httpDNS提供给 TcpRoute2 使用。

    测试结果: 1.发现很多 ip 测试时没问题,但是实际使用时就无法使用了。 2.很多ip虽然证书上面支持某些域名,但实际使用时并不支持。例如:youtube 视频文件、chrome 同步

    计划的解决办法: 对于问题1,目前是实际使用时同时连接多个ip,总有一个可以用。后期计划在进行多次过滤来过滤掉不稳定的ip。 对于问题2就不太好办了,只能挨个挨个分析出问题的地方,然后尝试增加验证。或者干脆自己不实现这个功能,而是对接到现存的hosts文件。

    问题2的另一个解决方案是只使用dns解析获得的ip,而不是自己扫描。dns可以尝试通过多地dns解析来获得更多的ip,由于 ip 是dns解析获得的出问题的可能性很小。

    opened by GameXG 4
  • 关于配置文件的问题。

    关于配置文件的问题。

    [[UpStreams]] 和 [[Hosts]] 有多条线路,多个 hosts 的话。除了链接本身必须填写外。

    其它参数 也必须都重复填写吗?

    例如是这样?

    [[UpStreams]]
    Name="proxy 1"
    ProxyUrl="socks5://1.1.1.1:5050"
    Credit=0
    Sleep=80
    CorrectDelay=0
    [[UpStreams]]
    Name="proxy 2"
    ProxyUrl="socks5://2.2.2.2:5050"
    Credit=0
    Sleep=80
    CorrectDelay=0
    

    还是这样?

    [[UpStreams]]
    Name="proxy 1"
    ProxyUrl="socks5://1.1.1.1:5050"
    [[UpStreams]]
    Name="proxy 2"
    ProxyUrl="socks5://2.2.2.2:5050"
    
    Credit=0
    Sleep=80
    CorrectDelay=0
    
    opened by laincat 3
  • 建议 accept 出错时尝试让出运行权

    建议 accept 出错时尝试让出运行权

    diff --git a/server.go b/server.go
    index e5bff82..c578ecc 100644
    --- a/server.go
    +++ b/server.go
    @@ -5,6 +5,7 @@ import (
            "net"
            "io"
            "log"
    +       "runtime"
     )
    
     //
    @@ -76,21 +77,12 @@ func (srv *Server) Server() error {
                    rw, e := ln.Accept()
                    if e != nil {
                            if ne, ok := e.(net.Error); ok && ne.Temporary() {
    -                               if tempDelay == 0 {
    -                                       tempDelay = 5 * time.Millisecond
    -                               } else {
    -                                       tempDelay *= 2
    -                               }
    -                               if max := 1 * time.Second; tempDelay > max {
    -                                       tempDelay = max
    -                               }
    -                               log.Printf("Accept error: %v; retrying in %v", e, tempDelay)
    -                               time.Sleep(tempDelay)
    +                               log.Printf("Accept error: %v", e)
    +                               runtime.Gosched()
                                    continue
                            }
                            return e
                    }
    -               tempDelay = 0
    
                    go srv.handlerConn(rw)
            }
    
    opened by jinguoli 3
  • Connection reset 的判断问题

    Connection reset 的判断问题

    比如 http://j.mp/pmx_installagent ,在我这里直接访问是这样的:

    curl 'http://j.mp/pmx_installagent' -v
    *   Trying 69.58.188.46...
    * Connected to j.mp (69.58.188.46) port 80 (#0)
    > GET /pmx_installagent HTTP/1.1
    > Host: j.mp
    > User-Agent: curl/7.43.0
    > Accept: */*
    > 
    * Recv failure: Connection reset by peer
    * Closing connection 0
    curl: (56) Recv failure: Connection reset by peer
    

    貌似因为连接可以正常建立,TcpRoute2将它判断为了能正常访问,所以走了直连。

    建议参考一下cow的设计:

    COW 将以下错误认为是墙在作怪:

    • 服务器连接被重置 (connection reset)
    • 创建连接超时
    • 服务器读操作超时

    无论是普通的 HTTP GET 等请求还是 CONNECT 请求,失败后 COW 都会自动重试请求。(如果已经有内容发送回 client 则不会重试而是直接断开连接。)

    用连接被重置来判断被墙通常来说比较可靠,超时则不可靠。COW 每隔半分钟会尝试估算合适的超时间隔,避免在网络连接差的情况下把直连网站由于超时也当成被墙。 COW 默认配置下检测到被墙后,过两分钟再次尝试直连也是为了避免误判。

    顺便希望可以有一个指定某些网站走某一条线路的列表。应用场景包括无论如何都希望直连的网站(网易云音乐等)与登录验证中包含了IP信息的网站(某些VPS管理面板)。 前者即使因为本地网络环境波动造成使用代理打开较快,但不是国内IP无法正常播放的特性使打开速度没有意义。后者在多个二级代理的延迟排名变化造成IP变动时会要求重新登录,造成不便。

    opened by puteulanus 3
  • httpProxy 无法使用

    httpProxy 无法使用

    本来计划前段使用nginx 处理ssl,然后转发到后端的 httpProxy 处理代理请求,但是这样还是碰到了 nginx 不支持 CONNECT 的问题。

    本来计划把前端的 ngixn 替换成 haproxy ,不过最后还是没有切换。主要问题是 haproxy docker 动态路由需要的组件比较多,麻烦;haproxy 不处理tls的话就无法缓存http了,后端是apache,慢连接性能不好;而且 以后单独使用 httpProxy 还需要搭配 haproxy 太不方便了。

    最后考虑还是将 httpProxy 改为 httpsProxy ,由自身作为 tls 前段,根据 SNI 来确定是自身处理还是转发到 nginx 处理。

    opened by GameXG 3
  • 如下场景能否使用TcpRoute2?

    如下场景能否使用TcpRoute2?

    现在有这样一个场景: 局域网里的电脑a,b,c,...使用代理,都通过电脑AA上公网。 现在AA电脑有一些限制,不允许一些APP(APP1,APP2,...)上网,其他APP允许上网。 作为电脑b,能否在b上面装一些工具或者进行些设置(不在AA上设置和安装工具),让APP1,APP2,像其他APP一样,也能上网。

    我尝试tcpRoute2配置了一下,但是没有成功,不知道是我配置有问题,还是这种方式不可行? ####################### addr="127.0.0.1:7070" #代理线路例子: [[UpStreams]] Name="proxyLB" ProxyUrl="https://aaaa:[email protected]:1086?domain=cccc.cn" Credit=0 #Credit 表示代理信誉度,低于0的将不会通过当前线路转发明文协议(http、ftp等)的请求。 Sleep=80 #Sleep表示使用本线路前等待的时间,单位毫秒。 CorrectDelay=0 #CorrectDelay 表示当前线路修正延迟,ss 协议建议设置为 50-100 之间的值,非 ss 协议代理设置为 0。

    ####################### TcpRoute2 version 0.5.12 2020/10/05 18:37:47 未配置是否启用 客户端dns解析纠正功能,默认将在发现浏览器进行了dns本地解析时强制改为为代理服务器进行dns解析。 2020/10/05 18:37:50 线路 proxyLB 连接 www.baidu.com:80 失败,错误:无法连接代理服务器 10.1.101.1:1086 ,错误:dial tcp :0->10.1.101.1:1086: connectex: An operation was attempted on something that is not a socket. 2020/10/05 18:37:50 协议处理错误:无法连接目标网站( www.baidu.com:80 ),详细错误:所有线路建立连接失败。 2020/10/05 18:38:23 [DNS]未发现 DNS 域名纠错功能,无需屏蔽纠错 IP 。 #######################

    opened by luoyanghero 1
  • HTTP拆包方案貌似无效,请教我怎么玩转ttl 混淆

    HTTP拆包方案貌似无效,请教我怎么玩转ttl 混淆

    RT

    我的栗子 [UpStreams]] Name="direct" ProxyUrl="direct://0.0.0.0:0000" DnsResolve=true Credit=0 Sleep=80 CorrectDelay=0 SplitHttp=true

    直连线路域名白名单

    各个线路的白名单、黑名单是独立的,可以通过多个 [[UpStreams.Whitelist]] 指定多个白名单。

    [[UpStreams.Whitelist]] Path="chinalist.txt" Type="suffix"

    但似乎没效果了,;;;相对TTL,怎么用,请教教我。GO语言不懂

    opened by myjlpt 0
  • 待解决的问题

    待解决的问题

    本地dns解析自带广告过滤功能,所以的广告隐私域名ip全部解析为127.0.0.1。问题在下面,应该丢弃连接127.0.0.1:

    2017/11/07 20:08:11 线路 direct 连接 push.zhanzhang.baidu.com:80 失败,错误:dial tcp :0->127.0.0.1:80: connectex: No connection could be made because the target machine actively refused it. 2017/11/07 20:08:11 线路 direct 连接 bdimg.share.baidu.com:80 失败,错误:dial tcp :0->127.0.0.1:80: connectex: No connection could be made because the target machine actively refused it. 2017/11/07 20:08:11 线路 proxy1 连接 bdimg.share.baidu.com:80 失败,错误:请求代理服务器建立连接失败:socks5代理服务器 命令响应错误,ver=0 2017/11/07 20:08:11 协议处理错误:无法连接目标网站( bdimg.share.baidu.com:80 ),详细错误:所有线路建立连接失败。 2017/11/07 20:08:11 线路 proxy1 连接 push.zhanzhang.baidu.com:80 失败,错误:请求代理服务器建立连接失败:socks5代理服务器 命令响应错误,ver=0 2017/11/07 20:08:11 协议处理错误:无法连接目标网站( push.zhanzhang.baidu.com:80 ),详细错误:所有线路建立连接失败。

    opened by moorn 0
Releases(v0.5.14)
Owner
GameXG
GameXG
Multiplexer over TCP. Useful if target server only allows you to create limited tcp connections concurrently.

tcp-multiplexer Use it in front of target server and let your client programs connect it, if target server only allows you to create limited tcp conne

许嘉华 3 May 27, 2021
TCP output for beats to send events over TCP socket.

beats-tcp-output How To Use Clone this project to elastic/beats/libbeat/output/ Modify elastic/beats/libbeat/publisher/includes/includes.go : // add i

ichx 1 May 20, 2022
Tcp chat go - Create tcp chat in golang

TCP chat in GO libs Go net package and goroutines and channels tcp tcp or transm

amirbahador 0 Feb 5, 2022
Chisel is a fast TCP/UDP tunnel, transported over HTTP, secured via SSH.

Chisel is a fast TCP/UDP tunnel, transported over HTTP, secured via SSH. Single executable including both client and server. Written in Go (golang). Chisel is mainly useful for passing through firewalls, though it can also be used to provide a secure endpoint into your network.

Jaime Pillora 7.4k Jun 29, 2022
A library to simplify writing applications using TCP sockets to stream protobuff messages

BuffStreams Streaming Protocol Buffers messages over TCP in Golang What is BuffStreams? BuffStreams is a set of abstraction over TCPConns for streamin

Sean Kelly 249 Jun 6, 2022
🚀Gev is a lightweight, fast non-blocking TCP network library based on Reactor mode. Support custom protocols to quickly and easily build high-performance servers.

gev 中文 | English gev is a lightweight, fast non-blocking TCP network library based on Reactor mode. Support custom protocols to quickly and easily bui

徐旭 1.4k Jun 26, 2022
Send network packets over a TCP or UDP connection.

Packet is the main class representing a single network message. It has a byte code indicating the type of the message and a []byte type payload.

Aero 70 Jun 26, 2022
TCP proxy, highjacks HTTP to allow CORS

portproxy A shitty TCP proxy that relays all requests to a local port to a remote server. portproxy -port 8080 -raddr google.com:80 Will proxy all TC

Antoine Grondin 50 May 5, 2022
golang tcp server

TCPServer Package tcp_server created to help build TCP servers faster. Install package go get -u github.com/firstrow/tcp_server Usage: NOTICE: OnNewMe

null 415 Jun 2, 2022
A TCP Server Framework with graceful shutdown, custom protocol.

xtcp A TCP Server Framework with graceful shutdown,custom protocol. Usage Define your protocol format: Before create server and client, you need defin

xfx 132 Jun 5, 2022
Small TCP benchmarking tool in Go-lang

Simple TCP benchmark tool in Go =============================== This package provides simple command line tool to benchmark number of concurrent TCP

Kris Kovalik 14 Aug 16, 2021
A little library for turning TCP connections into go channels.

netutils By Tim Henderson ([email protected]) This is a little library that was part of a larger project that I decided to pull out and make public.

Tim Henderson 11 Aug 13, 2020
A TCP throughput measuring tool written in Go language

tcpmeter - a tool for measuring TCP upload and download speeds and RTT latency. Build go build Run start the server on the remote machine: tcpmeter -s

Skip Tavakkolian 39 Apr 17, 2022
:alarm_clock: :fire: A TCP proxy to simulate network and system conditions for chaos and resiliency testing

Toxiproxy Toxiproxy is a framework for simulating network conditions. It's made specifically to work in testing, CI and development environments, supp

Shopify 8.2k Jun 22, 2022
开箱即用的基于命令的消息处理框架,让 websocket 和 tcp 开发就像 http 那样简单

Cmd Srv 开箱即用的基于命令的消息处理框架,让 websocket 和 tcp 开发就像 http 那样简单

Eyas 19 Apr 13, 2022
eBPF based TCP observability.

TCPDog is a total solution from exporting TCP statistics from Linux kernel by eBPF very efficiently to store them at your Elasticsearch or InfluxDB da

Mehrdad Arshad Rad 189 Jun 16, 2022
A small TCP proxy written in Go

tcp-proxy A small TCP proxy written in Go This project was intended for debugging text-based protocols. The next version will address binary protocols

Jaime Pillora 627 Jun 28, 2022
netscanner - TCP/UDP scanner to find open or closed ports

netscanner netscanner - TCP/UDP scanner to find open or closed ports installation you have to run this command to install the program $ go get github.

R4yan 199 Jun 17, 2022
HTTP(S)/WS(S)/TCP Tunnels to localhost using only SSH.

An open source serveo/ngrok alternative.

Antonio Mika 2.8k Jun 24, 2022