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

服务器有多个 IP,如何在发请求的时候自己选择使用哪个 IP?

  •  
  •   kaiki · 65 天前 · 675 次点击
    这是一个创建于 65 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景是服务器向目标发送请求,但是目标限制了每个 IP 每秒的请求数量,所以需要在发送请求的时候使用不同的 IP 来提高效率。
    用的 PHP 的 guzzle
    6 条回复    2021-11-19 00:06:14 +08:00
    eason1874
        1
    eason1874  
       65 天前   ❤️ 1
    一、在 options 里传入 curl 配置
    https://docs.guzzlephp.org/en/stable/faq.html?highlight=curl#how-can-i-add-custom-curl-options

    CURLOPT_RESOLVE 配置解析,配合 CURLOPT_DNS_USE_GLOBAL_CACHE 和 CURLOPT_DNS_CACHE_TIMEOUT 禁用 DNS 缓存(不然可能不生效)

    二、直接把请求 URL 的域名替换成 IP ,同时把域名添加到请求 headers 的 Host
    ochatokori
        2
    ochatokori  
       65 天前 via Android
    @eason1874 #1 楼主是服务器有多张网卡,想要服务器通过不同网卡发送请求到目标吧。不是目标有多个 ip 。
    eason1874
        3
    eason1874  
       65 天前
    @ochatokori #2 原来这样,那我理解错了。我以为是对方有多个节点,节点有 CC 防护。那我说的方法不管用
    starrys
        4
    starrys  
       65 天前
    代理服务器监听 0.0.0.0 ,然后通过不同 IP 代理访问?
    kaiki
        5
    kaiki  
    OP
       65 天前
    @starrys 有简单直接的操作方法吗,我也想的是用代理
    kaiki
        6
    kaiki  
    OP
       65 天前
    问题解决,用 squid ,配置写

    # set out - ip 配置出口 IP
    acl ip01 myip xxx.xxx.xxx.x01
    acl ip02 myip xxx.xxx.xxx.x02
    acl ip03 myip xxx.xxx.xxx.x03
    ……
    acl ip0n myip xxx.xxx.xxx.x0n
    #set out-ip 多公网 IP 关键配置
    tcp_outgoing_address xxx.xxx.xxx.x01 ip01
    tcp_outgoing_address xxx.xxx.xxx.x02 ip02
    tcp_outgoing_address xxx.xxx.xxx.x03 ip03
    ……
    tcp_outgoing_address xxx.xxx.xxx.x0n ip0n

    xxx.xxx.xxx.xxx 替换成服务器自己的 IP

    GuzzleHttp\Client 的$config 加上
    'proxy' => 'xxx.xxx.xxx.xxx:8888'
    的代理就行了,程序每次取一个地址来用,用随机或者固定的算法自己发挥吧。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2343 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 05:25 · PVG 13:25 · LAX 21:25 · JFK 00:25
    ♥ Do have faith in what you're doing.