V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yitalin
V2EX  ›  PHP

PHP 反向代理访问任意网站源码来了_Any-Proxy

  •  
  •   yitalin · 2021-02-14 20:44:36 +08:00 · 10724 次点击
    这是一个创建于 1139 天前的主题,其中的信息可能已经有所发展或是发生改变。
    折腾了一天,有点舍不得,还是发出来造福大家吧。
    搭建好的地址可以共享一下
    顺便取了个名字:Any-Proxy
    源码: https://github.com/yitd/Any-Proxy

    预览页面 https://turl.chat/ (不定时关闭)

    输入 http://www.ip38.com/ 就浏览 ip38.com

    也可以直接 http://turl.chat/http://加域名

    如 : http://turl.chat/http://www.ip38.com/

    你可以直接在当前链接后面输入 *q 退出当前页面返回首页
    可直接在此域名后面加上链接地址访问,如 https://turl.chat/http://ip38.com
    支持 POST 、cookie,不复杂的站点可以登录 测试 dnsdun 可以
    65 条回复    2024-01-24 13:35:34 +08:00
    Tink
        1
    Tink  
       2021-02-14 21:11:30 +08:00 via Android
    502
    pems002
        2
    pems002  
       2021-02-14 21:23:28 +08:00 via iPhone
    star 了
    hundan
        3
    hundan  
       2021-02-14 21:23:40 +08:00 via iPhone
    折腾了一天 有点不舍得 吗...
    freakxx
        4
    freakxx  
       2021-02-14 22:14:42 +08:00   ❤️ 2
    。。。。这跟 php 有啥关系,就是做个 nginx 反代而已
    qanniu
        5
    qanniu  
       2021-02-14 22:45:30 +08:00
    Google 可以登录吗?
    Ranying
        6
    Ranying  
       2021-02-14 23:04:09 +08:00
    纯 php 才有可能在虚拟主机等环境大规模应用。
    个人要用还是在首页加个登录验证比较好。
    ferock
        7
    ferock  
       2021-02-14 23:16:32 +08:00 via iPhone
    晚点看看
    terranboy
        8
    terranboy  
       2021-02-15 00:08:58 +08:00
    这东西 10 年前就有了吧 还不如 nginx
    yitalin
        9
    yitalin  
    OP
       2021-02-15 00:18:36 +08:00
    @terranboy
    张口就来?
    十年前的可不会在搜索引擎下智能联想
    十年前的可不支持 cookie 、post
    Nginx 可不能在 url 后面变地址就改变反代地址
    chinvo
        10
    chinvo  
       2021-02-15 00:22:23 +08:00 via iPhone   ❤️ 5
    关键字 www proxy

    确实是十年甚至二十年前就有的东西

    不过确实是单 Nginx 实现不了
    lijialong1313
        11
    lijialong1313  
       2021-02-15 00:52:22 +08:00
    我记得有人用 php 做 ngrok……要不 LZ 考虑考虑,搞个完整替换?
    caola
        12
    caola  
       2021-02-15 00:55:12 +08:00
    不用说功能上,就拿你的代码来说,就是不严谨的,
    比如:不检查参数就直接用、单双引号不规范使用
    NSAgold
        13
    NSAgold  
       2021-02-15 01:06:12 +08:00 via Android
    让我想起了上古时代的 PHPProxy 和 webproxy 类软件
    yitalin
        14
    yitalin  
    OP
       2021-02-15 01:06:33 +08:00
    @caola 我不是程序员,这些都是自学的,能用就行。。。
    yitalin
        15
    yitalin  
    OP
       2021-02-15 01:10:57 +08:00
    @NSAgold 没错。以前还有用来免流的,现在各种 ssr/v2 这些 这写就变冷门了,但也还是有点用的
    jinliming2
        16
    jinliming2  
       2021-02-15 02:20:52 +08:00
    @yitalin #9 还真不是张口就来,十年前我就用类似的东西上 FB 来着,登录肯定是 Post+Cookie 都有的吧
    binux
        17
    binux  
       2021-02-15 02:35:56 +08:00 via Android
    想当年 GFW 还没有关键词匹配。。。可见这个技术有多古老
    justyy
        18
    justyy  
       2021-02-15 03:04:57 +08:00   ❤️ 1
    lmmortal
        19
    lmmortal  
       2021-02-15 07:53:38 +08:00 via iPhone
    挺不错的 支持
    Ptu2sha
        20
    Ptu2sha  
       2021-02-15 08:04:46 +08:00   ❤️ 1
    9 楼 十年前是 2011 年啊 人人网都挂了
    Seanfuck
        21
    Seanfuck  
       2021-02-15 11:44:43 +08:00 via iPhone
    用 socks 弄更好点
    systemcall
        22
    systemcall  
       2021-02-15 12:16:07 +08:00
    以前的梯子就是这个样子,一些网站的样式会乱套
    连 Flash 这种毒瘤都能跑,post cookies 之类的想必是支持的
    那个时候墙的工作原理很简单,一般的也就是 DNS 污染,定期更新 hosts 就可以看油管。那个时候 Google 还可以直接上
    agdhole
        23
    agdhole  
       2021-02-15 13:45:58 +08:00   ❤️ 1
    hefish
        24
    hefish  
       2021-02-15 14:59:08 +08:00
    我记得 20 年前,我们翻墙就用一个 perl 写的 cgi,架设在台湾的服务器上,首页就是一个输入框,输入地址,然后点击 go,就访问了那个地址。 这个 cgi 还能替换<form 里面的 action,当然那时候没有啥 ajax,所以肯定是不支持 ajax 里的替换的。
    AstroProfundis
        25
    AstroProfundis  
       2021-02-15 15:44:13 +08:00
    ladypxy
        26
    ladypxy  
       2021-02-15 16:08:23 +08:00 via iPhone
    这玩意确实 10 多年前就有……后来发现 goagent 就换了。还有人记得 goagent 不
    abcd191898105
        27
    abcd191898105  
       2021-02-15 17:09:13 +08:00
    如果不配置 https 那就好了,you2 替代可以
    mscb
        28
    mscb  
       2021-02-15 17:22:38 +08:00 via Android
    确实是 10 年前流行的东西
    BingoXuan
        29
    BingoXuan  
       2021-02-15 18:48:34 +08:00 via Android
    当年很流行的在线代理,大概真的就是十年前
    rekulas
        30
    rekulas  
       2021-02-15 19:46:20 +08:00   ❤️ 1
    思路没问题,但是太简陋了,随便一测就出问题,想做完善的可以参考下 glype proxy, 10 年前同事就基于这个框架实现了极其完善的网页代理,不过现在都没什么用了代理方式变了
    yitalin
        31
    yitalin  
    OP
       2021-02-15 21:15:46 +08:00
    @abcd191898105 如你所愿。已经可以 http 了
    yitalin
        32
    yitalin  
    OP
       2021-02-15 21:27:52 +08:00
    @rekulas 刚测试了。这种太卡了。哪些地方有问题可以告知下。
    Lemeng
        33
    Lemeng  
       2021-02-15 21:51:02 +08:00
    给你个 star
    yitalin
        34
    yitalin  
    OP
       2021-02-15 22:25:10 +08:00
    @AstroProfundis 这东西到目前都不支持 cookie
    helionzzz
        35
    helionzzz  
       2021-02-15 22:33:01 +08:00
    @ladypxy goagent 之前是真好用
    0x0F
        36
    0x0F  
       2021-02-16 02:21:52 +08:00   ❤️ 3
    讲道理,什么玩意就十年前写不出来了,就不支持 cookie 不支持 post 的了,合着十年前的程序员都是傻子到你这突然灵光了?我寻思十年前 nginx+php5.3 的流行阶段这样的玩意不知道多少人造过这种轮子了,别说 php 了,啥语言不就是实现个 curl 么,还整的是到目前都不支持 cookie,用 socket 不香实属掩耳盗铃井底观天,我看不到就是没有呗,我没用过就是不行呗?
    我是 13 年注册的 V2EX,偶尔上来看个帖,自学自学来跟人讨论没啥问题,别人说啥自己听有意见说就完了,搞得自己是真多厉害,实在是忍不住了,阿弥陀佛。
    yitalin
        37
    yitalin  
    OP
       2021-02-16 03:25:25 +08:00
    @0x0F 真不得了呢?以前有谁不知道似的?你找一个功能跟我这个一样的来?搁这找存在感来了? 13 年注册不得了?还特意说明?笑死 d 了
    yitalin
        38
    yitalin  
    OP
       2021-02-16 04:11:28 +08:00
    @0x0F 你先给我找一个 cookie 存需要代理 host 的、链接添加指定字符即清除 cookie 返回首页的反向代理出来再 bb ?我寻思这个思路这么多年也没有人做出来啊。你在这打这么多字来叫显得你有文化?你现在去试试市面上 php 的反代,浏览大一点的网页看看是不是很卡?我寻思十年前有人做手机了,十年后就不能有人做智能手机了?真是有 bing
    KasuganoSoras
        39
    KasuganoSoras  
       2021-02-16 05:57:09 +08:00   ❤️ 2
    楼主,想的还是太简单了,你考虑过一个问题么
    如果我访问 https://turl.chat/https://turl.chat/ 会发生什么?
    如果我访问 https://turl.chat/https://turl.chat/https://turl.chat/https://turl.chat/ 又会发生什么?如果我频繁请求会发生什么?

    所以你这只能算个玩具,连基本的请求控制都没有
    你的代码非常多地方都不严谨,变量类型没有任何判断,肉眼能看到的问题就好几处。
    还有,如果这玩意搭在能访问内网的机器上,我是不是还能通过 https://turl.chat/http://192.168.1.1/ 这样的方式去扫你的内网?如果内网机器有弱密码情况,分分钟整台服务器就给拿下了,真不是开玩笑
    所以 LZ 还是虚心一点吧,不要刚学会点入门级 PHP 就这么飘了,戾气别这么重,多学点不是什么坏事
    yitalin
        40
    yitalin  
    OP
       2021-02-16 06:12:44 +08:00 via iPhone
    @KasuganoSoras 你说的第一种情况不会发生,有判断,第二个问题但是值得考虑,学习了
    blless
        41
    blless  
       2021-02-16 08:25:11 +08:00 via Android
    中间人嘛,说得好听是代理。说得难听那就是中间人了。不是针对楼主啊,网上发的链接大家还是留个心眼不要点,尤其还登陆点啥来着
    bao3
        42
    bao3  
       2021-02-16 08:33:02 +08:00 via iPhone
    突然,就觉得自己是互联网老毒物了……2009 年,还自己搭建过 php proxy,上各种网站……一晃好久了。
    baoshuo
        43
    baoshuo  
       2021-02-16 08:33:08 +08:00
    楼主的代码我觉得还只能算是娱乐性质的,真要在生产环境用分分钟炸掉

    虽然我的 PHP 水平没有那么好,但是也能看出来一些错误,比如楼上(#39 )所说的扫内网,还有代码里单双引号的不正确使用,等等

    然后我看了看楼主的仓库,第一眼让我看见的就是 `Add files via upload` 。这要么说明楼主比较懒,要么说明楼主不会 Git



    然后各个 Commit 的标题让我成功相信了楼主不会用 Git,即使会用也应该处于刚入门的阶段

    如果楼主是刚入门的话,我觉得应该去学一些有变量类型的语言(比如 C++),这样对以后的习惯养成有很大帮助
    systemcall
        44
    systemcall  
       2021-02-16 09:04:18 +08:00 via Android
    @ladypxy #26
    Google 中国的那些服务器停了就没法用了。以前 Google 中国的那些服务器还是开的的时候,可以白嫖 Google 的国际专线,北京-美国的专线
    markgor
        45
    markgor  
       2021-02-16 09:39:49 +08:00
    要不考虑下替换插入下<base>标签?
    yitalin
        46
    yitalin  
    OP
       2021-02-16 10:31:25 +08:00 via iPhone
    @baoshuo 不会啊,我不会写代码,所有问题都是百度的,代码都是复制粘贴拼接的
    yitalin
        47
    yitalin  
    OP
       2021-02-16 10:32:05 +08:00 via iPhone
    @markgor 为什么需要这个呢?不是没必要了吗?
    nalzok
        48
    nalzok  
       2021-02-16 10:48:53 +08:00   ❤️ 1
    @KasuganoSoras 其实我觉得问题不是楼主不虚心,你看八楼说的 “这东西 10 年前就有了吧 还不如 nginx”。从这句话里我没看出有什么有建设性的意见(哪个十年前的仓库值得楼主学习呢? NGINX 相比楼主的项目又有什么优越性呢?),完全就是在 bully 罢了。楼主写的东西再粗糙,他也是想和大家分享自己的作品,结果这么多人都在说 “你写的就是个没用的垃圾”,换作谁会高兴啊。我觉得你的评论就很好,人家的代码有什么问题直接提出就行了,讲那些没用的干嘛 = =
    markgor
        49
    markgor  
       2021-02-16 15:28:24 +08:00
    @yitalin
    请忽略我,找到问题了,源站资源存在防盗链的就 GG 了,一开始以为是相对路径的原因
    Tining
        50
    Tining  
       2021-02-16 22:22:52 +08:00
    本来想部署一下。。感觉要不等大佬更新
    yitalin
        51
    yitalin  
    OP
       2021-02-16 22:33:00 +08:00 via iPhone
    @Tining 更新得差不多了,搭吧,有建议可以回复
    KasuganoSoras
        52
    KasuganoSoras  
       2021-02-17 11:08:53 +08:00
    看到你今天更新了,顺带回一下
    https://github.com/yitd/Any-Proxy/blob/main/index.php#L53
    虽然你做了对内网的判断,判断 host 是否是内网地址,但是,你没有对 host 进行解析操作,也就是说,如果我随便找个域名解析到 192.168.1.1 这样的地址去,还是可以继续扫内网。

    另外
    https://github.com/yitd/Any-Proxy/blob/main/index.php#L3
    不应该去判断是否有 X-Forward-For Header,因为可以随意伪造,只要我每次伪造随机的 Header,就可以无限刷,无视掉你这一部分的判断,并且因为你这一部分还会把请求的 IP 写入 Redis,所以我甚至还可以通过给 Header 塞超长的数据 + 大量请求塞爆 Redis,让主机内存爆满。

    继续改进吧
    KasuganoSoras
        53
    KasuganoSoras  
       2021-02-17 11:16:38 +08:00
    当你试着去解决了域名解析,Header 伪造这些问题后,你就会发现,其实你写的东西和你所说市面上那些慢的要死、浏览网页一卡一卡的代理软件的速度差不到哪去。之所以那些软件速度不快,是因为人家的软件在设计的时候就考虑到了加密、安全以及各种各样的问题,而不是单纯的就做个转发。因为没人愿意把一套不安全的软件部署在自己的生产服务器上。
    yitalin
        54
    yitalin  
    OP
       2021-02-17 14:39:04 +08:00 via Android
    @KasuganoSoras 那是我测试站点用的判断代码,忘了删除。域名解析速度的影响可以忽略不计吧,另外 X-Forward-For Header 是针对 cdn 的,加了 cdn 只有这个才能拿到客户端 IP
    yitalin
        55
    yitalin  
    OP
       2021-02-17 14:41:09 +08:00 via Android
    @KasuganoSoras 感谢指点。
    ywisax
        56
    ywisax  
       2021-02-17 17:09:09 +08:00   ❤️ 1
    差不多十年前,我有个朋友就是做这种项目的,wap 浏览器,wml to html 部分还是我写的。。。
    挺好玩的,深入搞这个项目对于 HTTP 的细节了解程度应该会提升很大。
    aoerboquartz
        57
    aoerboquartz  
       2021-02-17 17:15:37 +08:00
    楼主做的挺好的,楼主自己都说了,他是自学,不是科班出身,语言符号不规范等等都是正常的,大家就不要嘲讽。楼主 继续完善好代码。
    whoami9894
        58
    whoami9894  
       2021-02-17 18:19:54 +08:00
    @yitalin #38
    态度还挺冲,逗笑我了
    KasuganoSoras
        59
    KasuganoSoras  
       2021-02-17 18:34:00 +08:00
    今天下午没事干,重新整理了一遍你的代码,把发现的几个问题都修复了,另外规范了一下命名,已经给你提 PR 了,有空去看看吧
    gtchan13579
        60
    gtchan13579  
       2021-02-18 09:06:28 +08:00
    无法访问域名+端口号的,感觉用处不大
    q1angch0u
        61
    q1angch0u  
       2021-02-18 14:07:50 +08:00
    yitalin
        62
    yitalin  
    OP
       2021-02-18 18:42:51 +08:00 via Android
    @q1angch0u 这方面不太了解,有办法解决吗
    huobazi
        63
    huobazi  
       2021-02-20 15:47:22 +08:00
    十五六年前,全胜同学拿 1bu.com 这个玉米玩了一次超级反代,强奸了 google baidu 数以万万计的收录,反代出的江湖啊、论坛啊也是可以登陆发帖的。
    t6attack
        64
    t6attack  
       2021-10-08 10:31:16 +08:00
    搜索时索引到了这个帖子,该说的楼上都已经说了。
    目前最先进的在线代理技术是 jsproxy,同样出自 v 友之手。楼上已经有人提到了。
    原帖: https://www.v2ex.com/t/551536
    项目地址: https://github.com/EtherDream/jsproxy
    lijiangang886
        65
    lijiangang886  
       65 天前
    艹,楼主直接 github 账号都删掉了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2428 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 15:57 · PVG 23:57 · LAX 08:57 · JFK 11:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.