成长值: 345 签到天数: 4740 天 [LV.Master]伴坛终老
|
发表于 2019/7/3 21:22
|
显示全部楼层
|阅读模式
|Google Chrome 74.0.3729.131 |Windows 10
修改pt程序nexusphp代码支持compact=1参数返回二进制文件的 ipv6 peers列表用于支持客户端互相连接下载的方法,抓包tracker来修复代码
nexusphp默认是不支持ipv6的,会导致页面做种数量和客户端返回结果不一致。
问题所在
- d8:intervali3600e12:min intervali30e8:completei67e10:incompletei0e5:peers354:q"…uZ…G…=5.J.(<.,T#’{x…e.jT.w.p.z%F7.y.zk…r.6.1W:.0T…qM.-…*.P.=…7…8…S…_.J…z.K
- .S…vp… <…!..4…1D:…s…Su…=…ps.]A.y…qo\e…A…M.1.}MY…q…]…3…xi.r.H…1.n.v…]…e…Fo…]…3…0k…=3/…=.gVn.z…#'w!..-…9.WM.:7B…H .~U…
- …uQ.=#&qQ.4…x.+.r.f…}u…p…eA.s…A…j…e
复制代码
“peers”后面的354字节二进制数据都是ipv4 peer,每个ipv4 peer含4字节ip和2字节port共6字节,所以peer个数是354/6=59。ipv6 peers二进制数据按照协议是在“peers6”节点返回,从抓包看没有。
现在的pt程序,客户端收不到ipv6地址的,只能连接ipv4
这是修改过的,可以直接让客户端拿到ipv6
如果两边都是内网ipv4,那么,就会可能导致无法连接
如果连接成功,客户端才会互相汇报本地ipv6到对方客户端进行连接
直接服务器下发列表,客户端拿到了可以直接请求,不需要先ipv4建立
announce.php文件
114行搜索
下方增加
130行搜索
- $peer_list .= pack("Nn", sprintf("%d",$longip), $row['port']);
复制代码
下方增加
- else
- {
- $ipv6_packed = inet_pton($row['ip']);
- if ($ipv6_packed)
- $peer6_list .= $ipv6_packed . pack("n", $row['port']);
- }
复制代码
147行搜索
- $resp .= "l".$peer_list."e";
复制代码
下方增加
- if ($compact == 1 && strlen($peer6_list) > 0)
- {
- $resp .= benc_str("peers6").benc_str($peer6_list);
- }
复制代码
出处:
https://github.com/wxhere/NexusPHP/commit/8827584baed639c6a1e7458af6bb778d4602d277
|
|