如何获取执行 PHP 的 IP 地址? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
babytomas
V2EX    PHP

如何获取执行 PHP 的 IP 地址?

  •  
  •   babytomas Apr 17, 2014 4223 views
    This topic created in 4396 days ago, the information mentioned may be changed or developed.
    例如目前有一个 PHP 网站是 baidu.com

    如何分辨 baidu.com 的分发网络中、真正执行 PHP 的 IP 是哪个?
    12 replies    2015-01-16 03:41:20 +08:00
    fatpa
        1
    fatpa  
       Apr 17, 2014
    去 header 里面取
    XadillaX
        2
    XadillaX  
       Apr 17, 2014   1
    去header里面取,有多种可能。如果是nginx反向代理,大家约定俗成的是X-Forwarded-For,如果是CloudFlare的话,是CF-Connecting-IP。等等等等。

    自己写几个if判断下就好了。
    raincious
        3
    raincious      Apr 17, 2014
    这信息不会告诉你的。执行程序机器的IP在CDN网络中就算出于安全考虑也不会泄露出来,这也是分发网络的意义。

    除非你在Header上标注好,比如header('X-Processor: ' . gethostname() . ': ' . $_SERVER['SERVER_ADDR']);

    但是如果是别人的程序,别想了,人家就是为了隐藏真实IP才这么做的。

    当然,如果对方的网站会使用其他服务,那么可以通过那个得到真实的IP地址,比如查网站发出的邮件,看源信,里面会有服务器的公网IP地址。
    wdlth
        4
    wdlth  
       Apr 17, 2014
    这种问法本身就很奇怪,你要获取别人网站后端的IP?你怎么知道别人是不是集群,有没有缓存,有没有负载均衡,是公网IP还是内网IP。就像各种Appengine,都是集群的,你不会知道下次是哪台机去执行。
    babytomas
        5
    babytomas  
    OP
       Apr 17, 2014
    @XadillaX 有通用一点的办法不 。。
    @raincious 有的 CDN 不用这个,不过求问如果对方没有把 IP 放在这里或者说自己定义了一个咋办 。。
    @fatpa 对的,信息的确是会被 CDN 隐藏 。。但是我觉得应该有更通用的方法 。。。所以好奇问一下 。。


    @wdlth 即使是集群、有缓存、有负载均衡,他们执行 PHP 的 IP 也不能瞬间变动吧?
    XadillaX
        6
    XadillaX  
       Apr 17, 2014 via Android
    @babytomas 一般cdn都会把真实ip放一个字段里面。而且通常在其官网文档或者faq都会提吧
    raincious
        7
    raincious  
       Apr 17, 2014
    好吧,我真的不明白这个问题了。可能我一开始就没看清。


    如果你是要求得到访问客户端的IP地址,那么2楼的答复就是对的。各个CDN的约定不一样,只能用IF搞定,没有通用方式。

    X-Forwarded-For是一种不安全的方式,需要另外配置来保证安全。原理是自己维护一个受信IP地址列表,然后从最后一台转发请求的服务器开始搜索,看服务器是否在受信列表里,如果不在则认为IP地址是客户端的地址。

    我自己有一个粗糙的实现方法,在https://github.com/raincious/facula/blob/master/src/Facula/Base/Prototype/Core/Request.php#L494

    配置文件就像这样:
    https://github.com/raincious/facula/blob/master/examples/BasicStart/privated/Configurations/Primary.php#L82


    如果你是想得到真正执行PHP程序然后返回给客户端的那台服务器的IP地址,3楼我的答案是对的。
    babytomas
        8
    babytomas  
    OP
       Apr 17, 2014
    @XadillaX
    @raincious

    主要是想获得后端 IP
    wdlth
        9
    wdlth  
       Apr 17, 2014
    @babytomas 除非你能一层层的进到它的前端去看,否则你不会知道,不过你也很难知道,特别是有多层代理的情况下。或者你能上传并执行PHP代码……
    babytomas
        10
    babytomas  
    OP
       Apr 18, 2014
    @wdlth 多层代理的话会不会把 IP 储存在什么地方的不?那有没有其他的方法可以获取后端 IP 呢?
    konakona
        11
    konakona  
       Apr 18, 2014
    http://blog.crazyphper.com/?p=1753
    我这里写的很清楚。
    loveminds
        12
    loveminds  
       Jan 16, 2015 via iPhone
    如果你能上传php文件到这个后端,很简单,curl一下
    About     Help     Advertise     Blog     API     FAQ     Solana     971 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 57ms UTC 23:23 PVG 07:23 LAX 16:23 JFK 19:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86