V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wuxiao2522
V2EX  ›  问与答

求批量验证 http 代理可用性的方法

  •  
  •   wuxiao2522 · 2016-06-28 15:26:57 +08:00 · 5365 次点击
    这是一个创建于 3069 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前手里有一批 http 代理服务器, ip:port 的形式,但是需要用户和密码登陆(已有),怎样才能有效、快速的验证其可用性?搜了一圈,只找到不需要用户密码登陆的相关软件。
    30 条回复    2017-04-05 18:20:08 +08:00
    shiny
        1
    shiny  
       2016-06-28 16:12:33 +08:00 via iPhone   ❤️ 1
    写小段代码验证下,没多少行代码
    wuxiao2522
        2
    wuxiao2522  
    OP
       2016-06-28 16:14:57 +08:00
    @shiny 可是不会编程。
    boter
        3
    boter  
       2016-06-28 16:16:47 +08:00 via iPhone   ❤️ 1
    10 年前有个花刺代理 天天在家换 IP 玩
    johnny23
        4
    johnny23  
       2016-06-28 16:36:12 +08:00 via iPhone   ❤️ 1
    同上 花刺代理 现在还可以用呢
    schezukNewTos
        5
    schezukNewTos  
       2016-06-28 16:52:05 +08:00   ❤️ 1
    bash:
    curl -m 5 "baidu.com" -x ip:port 2>/dev/null |grep -c "www.baidu.com"
    cmd:
    curl -m 5 "baidu.com" -x ip:port 2>nul |find /C "www.baidu.com"
    schezukNewTos
        6
    schezukNewTos  
       2016-06-28 16:55:58 +08:00   ❤️ 1
    bash: ```
    curl -m 5 "baidu.com" -x [PROTOCOL://]HOST[:PORT] -U USER[:PASSWORD] 2>/dev/null |grep -c "www.baidu.com"
    ```
    cmd: ```
    curl -m 5 "baidu.com" -x [PROTOCOL://]HOST[:PORT] -U USER[:PASSWORD] 2>nul |find /C "www.baidu.com"
    ```
    wuxiao2522
        7
    wuxiao2522  
    OP
       2016-06-28 19:20:13 +08:00
    @boter
    @johnny23 花刺不支持用户名和密码认证
    wuxiao2522
        8
    wuxiao2522  
    OP
       2016-06-28 19:29:47 +08:00
    @schezukNewTos 例如 curl -m 5 “ baidu.com ” -x 1.1.1.1:80 -U 1234:1234 2>/dev/null |grep -c "www.baidu.com" 返回 0 ,何解?
    wuxiao2522
        9
    wuxiao2522  
    OP
       2016-06-28 19:51:41 +08:00
    @schezukNewTos 大概是不是这么个意思:拉取 baidu.com 的 metal2 次,通过-x ip:port -U user:pwd 代理。 结果重定向到 null ,然后管道到 grep -c "www.baidu.com"字符串的数量?
    terence4444
        10
    terence4444  
       2016-06-28 19:54:59 +08:00 via iPhone
    10 几年前我用代理猎手验证百度首页上的字符串…
    wuxiao2522
        11
    wuxiao2522  
    OP
       2016-06-28 20:02:22 +08:00
    @terence4444 麻烦看清题目,代理是需要用户名和密码认证的。
    wuxiao2522
        12
    wuxiao2522  
    OP
       2016-06-28 20:09:46 +08:00
    @schezukNewTos 管道后面的参数没起作用,加不加输出一样,另外还是没办法批量检测呀?麻烦告知你的思路。
    gimp
        13
    gimp  
       2016-06-28 20:12:51 +08:00
    访问
    http://icanhazip.com/
    http://ifconfig.me/ip

    不是本机 IP 就代表代理可行
    wuxiao2522
        14
    wuxiao2522  
    OP
       2016-06-28 20:15:58 +08:00
    @gimp 批量,亲。亲,批量。
    shiny
        15
    shiny  
       2016-06-28 20:34:23 +08:00   ❤️ 1
    @wuxiao2522 给我几个代理的例子,我可以给你写个 node.js 的验证
    wuxiao2522
        16
    wuxiao2522  
    OP
       2016-06-28 20:45:39 +08:00
    @shiny 抱歉,由于这些代理是内部的,不能共享。可否给你公共代理,没有认证的这种让你测试?然后我加上正确的用户名密码,就可以了。比如 http://www.xicidaili.com/这上面的代理服务器,本身是不需要认证的,但是你任意加上用户名和密码,也是能通过的。
    shiny
        17
    shiny  
       2016-06-28 20:51:02 +08:00   ❤️ 1
    @wuxiao2522
    输入一个 txt ,每行格式 http://username:password@proxyserver:port
    然后输出可用的代理 txt ,每行一个。

    这样的设计怎么样?
    wuxiao2522
        18
    wuxiao2522  
    OP
       2016-06-28 21:07:21 +08:00
    @shiny 可以的。
    schezukNewTos
        19
    schezukNewTos  
       2016-06-28 22:53:05 +08:00   ❤️ 1
    @wuxiao2522

    当代理正常, curl 输出应为百度跳转页:
    <html>
    <meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
    </html>
    如果代理错误可能返回含"baidu.com"的页面,或无返回,但不会返回"www.baidu.com"

    -m 五秒超时;-x 代理;-U 代理认证;
    2>/dev/null 或 2>nul : stderr 输出到*nix 和 dos 空文件(不然你会看到下载进度)

    管道右侧获取包含"www.baidu.com"的行数。
    代理错误一般会有 0 行( false ),正确一般会有 1 行( true ), 2 行以上是脚本出漏洞了。
    schezukNewTos
        20
    schezukNewTos  
       2016-06-28 22:55:15 +08:00
    然后批量的话你可以改写成 bash 函数啊,或者批处理 call 之类的。
    我反正会直接把结果复制到 excel 里……
    schezukNewTos
        21
    schezukNewTos  
       2016-06-28 22:57:26 +08:00
    而且写脚本你也可以用 excel 的(笑)
    kn007
        22
    kn007  
       2016-06-28 22:58:25 +08:00
    关注
    shiny
        23
    shiny  
       2016-06-28 23:51:09 +08:00   ❤️ 1
    @wuxiao2522 先装个 node.js ,然后在命令行输入 npm i proxy-filter -g
    然后在命令行输入: pfilter --input 代理列表.txt --output 想要保存的有效列表名称.txt
    pfilter -h 查看更多可用命令,包括 代理连接超时时间和同时并发数。

    开源到了 https://github.com/daijie/proxy-filter
    lslqtz
        24
    lslqtz  
       2016-06-29 00:04:54 +08:00 via iPhone   ❤️ 1
    测试代理访问 vps 时能访问,且 IP 不是本机即可。
    ETiV
        25
    ETiV  
       2016-06-29 01:58:59 +08:00   ❤️ 1
    *现在的年轻人还真是衣来伸手饭来张口呢*

    推荐个服务 httpbin.org

    http_proxy=http://{PROXY_USER}:{PROXY_PASSWORD}@{PROXY_IP}:{PROXY_PORT} curl --connect-timeout 10 http://httpbin.org/ip

    访问成功会得到:
    {
    "origin": "某个.I.P.地址"
    }

    对比一下 origin 是不是上面的 PROXY_IP 就好了. 如果超时,就表示代理不通。

    如果想知道代理 IP 是不是所谓高度匿名的,可以用 http://httpbin.org/get 这个接口,看 headers 里有没有什么 X-Real-IP 、 X-Forwared-For 之类的。

    这服务同时可以用 https 访问,所以也可以用来验证代理服务器是否支持 HTTP Connect ~
    johnny23
        26
    johnny23  
       2016-06-29 08:17:04 +08:00 via iPhone   ❤️ 1
    @wuxiao2522 支持啊 我上次刷票买了一堆代理 IP 里面就有的 他自动加载会识别的
    wuxiao2522
        27
    wuxiao2522  
    OP
       2016-06-29 09:25:08 +08:00
    @schezukNewTos
    @shiny 已测试成功,感谢!
    wuxiao2522
        28
    wuxiao2522  
    OP
       2016-06-29 09:40:00 +08:00
    @ETiV 同样测试成功,感谢


    @shiny 写的 node.js 脚本是最好用的一种方法。
    jqw1992
        29
    jqw1992  
       2016-06-29 09:43:42 +08:00
    访问百度什么,可以访问网站,有正确返回数据的 就是对的
    fingerstyle
        30
    fingerstyle  
       2017-04-05 18:20:08 +08:00
    nc 扫端口验证 tcp 状态, curl 请求返回值验证 http 状态,两次验证通过后确认代理线路正常,亲测有效。尤其适合做梯子多线路检测。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3012 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:53 · PVG 18:53 · LAX 02:53 · JFK 05:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.