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

ip 检测网站判 IP 的方法是什么?

  •  
  •   lirau ·
    ray007great · 2015-04-04 13:52:29 +08:00 · 7045 次点击
    这是一个创建于 3317 天前的主题,其中的信息可能已经有所发展或是发生改变。

    挂了vpn后,更改自己路由(国内线路强制走国内)。
    www.ip138.com和www.ip.cn测试ip,前者变为国内ip(电信运营商分配的),后者依然是国外(vpn商自己的ip)。
    然后就忽然思考着检测网站的运作原理了,是什么原理?
    v2ex检测我的ip是电信运营商提供的ip。

    42 条回复    2015-04-08 01:34:12 +08:00
    extreme
        1
    extreme  
       2015-04-04 14:09:07 +08:00   ❤️ 1
    目标服务器所获取到的IP是直接与目标HTTP服务器进行TCP通讯的IP。

    太抽象?

    A寄信给B,说想了解一些东西,于是在信封的发件人处写上了自己的地址,收件人处写上了B的地址。
    B收到信后,写好了回复的内容,在信封收件人处写上A的地址,发件人处写上自己的地址。
    最后A收到了B的回信,得到了自己想要的东西。

    A寄信给C,但怕C知道自己的地址,可是又想收到回复,于是找了一个负责转发信件的D,在信件上写了说想了解一些东西,附带C的地址和自己的地址,把信件发送给D,D在信封的发件人处写上了D的地址,收件人处写上了C的地址。
    C收到信后,写好了回复的内容,在信封收件人处写上了D的地址,发件人处写上自己的地址。
    D收到了C的回信,然后把信寄到了A的地址,最后A得到了自己想要的东西。
    surftheair
        2
    surftheair  
       2015-04-04 14:23:57 +08:00
    你路由的问题吧,可能这个网站的IP你正好设到国内的路由了
    lirau
        3
    lirau  
    OP
       2015-04-04 14:24:02 +08:00
    @extreme 就是自己发送的http请求的数据包里有自己的IP地址吗。那通过VPN后这个地址有被更改吗?2个网站的测试结果不同说明有一个是用了更科学的检测方法吗
    lirau
        4
    lirau  
    OP
       2015-04-04 14:26:49 +08:00
    @surftheair 就是您认为2个网站的测试方法应该是一样的了。不是很懂路由。是通过我的http请求里写的IP测试的吗,那为什么路由能影响检测结果?请求不应该是浏览器包装然后发送的,为什么还跟以后要走的线路有关?
    surftheair
        5
    surftheair  
       2015-04-04 14:29:57 +08:00
    @lirau 都是一样的。我的意思是,你不是设置了不同的IP走不同的路由么?可能是你这两个IP走的路由不一样。你看一下route print,或者tracert一下检测服务器的IP,看看走的哪条路由。
    NeoAtlantis
        6
    NeoAtlantis  
       2015-04-04 14:39:13 +08:00
    有个东西叫TCP协议吧。。。

    v2ex难道是这样的社区了么……
    fems
        7
    fems  
       2015-04-04 15:04:29 +08:00   ❤️ 1
    @lirau 走国内还是国外路由,要看你的DNS返回对应网站的IP地址是国内还是国外IP,前者貌似都是国内IP,后者我这里是日本linode的IP23.239.1.72 li679-72.members.linode.com
    jerryjhou
        8
    jerryjhou  
       2015-04-04 15:16:08 +08:00 via iPad   ❤️ 1
    没一个说到点上的
    IP.cn在新加坡OAH有一台服务器,你的DNS成了国外的,所以解析出的IP是新加坡的。
    根据路由表,新加坡IP还是会走VPN,所以你就只能看到VPN的IP
    Showfom
        9
    Showfom  
       2015-04-04 15:21:29 +08:00 via iPhone
    ip.cn 由国外节点,所以你DNS不是国内的时候就解析到国外节点了,正常的
    Showfom
        10
    Showfom  
       2015-04-04 15:22:27 +08:00 via iPhone
    @jerryjhou 是的。。。看上面的人没自己去考察九在讨论了也是无语
    omi4399
        11
    omi4399  
       2015-04-04 15:55:21 +08:00
    IP.cn在国外有服务器啊,路由表里把他判定为国外线路了,于是你就翻墙啦
    bobopu
        12
    bobopu  
       2015-04-04 18:01:04 +08:00 via iPhone
    @Showfom
    @omi4399
    @jerryjhou ip.cn和ip138.com哪个访问量大,哪个准确?
    Showfom
        13
    Showfom  
       2015-04-04 18:30:46 +08:00 via iPhone   ❤️ 1
    @bobopu 都不准确,最准确的是 @gaochunhui 老师做的 ipip.net
    KexyBiscuit
        14
    KexyBiscuit  
       2015-04-04 19:06:50 +08:00 via Android
    xieyudi1990
        15
    xieyudi1990  
       2015-04-04 21:19:04 +08:00 via iPhone
    不是在TCP里, 而是在IP头里有一个源IP的字段. 是靠那个检测的.

    写过协议栈的路过.
    bobopu
        16
    bobopu  
       2015-04-04 21:26:39 +08:00 via iPhone
    @Showfom 我说这两个哪个访问量大
    Showfom
        17
    Showfom  
       2015-04-04 21:50:43 +08:00
    @bobopu 想也不用想,小白都用 ip138 这个是最不专业的 IP 查询网站,不信的话,你在终端下对比

    curl ipip.net
    curl ip.cn
    curl ip138.com
    ryd994
        18
    ryd994  
       2015-04-04 23:59:27 +08:00 via Android   ❤️ 1
    书读得太少,想得太多。
    好好学个网络入门,就全懂了
    geeti
        19
    geeti  
       2015-04-05 01:41:10 +08:00
    你路由设置有问题。
    把你的路由表发上来看看
    sNullp
        20
    sNullp  
       2015-04-05 04:07:28 +08:00
    @Showfom curl 了这三个网站,然后呢?
    geeti
        21
    geeti  
       2015-04-05 10:40:15 +08:00
    @sNullp 他本意是想通过curl来直观的看这几个网站给你展示的ip,但这几个网站的域名都不支持curl直接返回IP。
    比如curl curlmyip.com 就可以。
    geeti
        22
    geeti  
       2015-04-05 10:41:36 +08:00
    @sNullp 错了。是说前两个都可以curl出直观的ip,而ip138很烂,给你返回的是html源代码
    sNullp
        23
    sNullp  
       2015-04-05 10:41:45 +08:00
    @geeti 哦原来是这个意思。
    curl返回 ip 我一般用 ifconfig.me
    geeti
        24
    geeti  
       2015-04-05 10:42:50 +08:00
    @sNullp ifconfig.me很慢啊
    sNullp
        25
    sNullp  
       2015-04-05 10:43:07 +08:00
    @geeti 这只能说明 ip138 没有对 curl 的 UA 做特殊处理。。。当然他数据库是很烂,但是刚才还以为他的意思是靠 curl 就能得到数据库的大小。
    sNullp
        26
    sNullp  
       2015-04-05 10:44:38 +08:00
    @geeti 追求速度的话我用 ip.appspot.com
    mingyun
        27
    mingyun  
       2015-04-05 10:52:18 +08:00
    geeti
        28
    geeti  
       2015-04-05 10:58:19 +08:00
    @sNullp 这个好,google的必须首选
    wdlth
        29
    wdlth  
       2015-04-05 11:41:43 +08:00
    http://whatismyip.akamai.com/
    我用的是这个……
    bdnet
        30
    bdnet  
       2015-04-05 11:55:33 +08:00
    Web服务器会获取Request的IP,至于线路经过了几层,线路不同,都会影响web服务器拿的的ip。
    cnbeining
        31
    cnbeining  
       2015-04-05 12:39:52 +08:00
    不同站的方法还真可能不一样。

    例如:

    schezuk
        32
    schezuk  
       2015-04-05 13:28:43 +08:00   ❤️ 1
    discuz的办法https://github.com/Discuz-X/DiscuzX/blob/Common/uc_client/model/base.php
    ···
    function init_var() {
    $this->time = time();
    $cip = getenv('HTTP_CLIENT_IP');
    $xip = getenv('HTTP_X_FORWARDED_FOR');
    $rip = getenv('REMOTE_ADDR');
    $srip = $_SERVER['REMOTE_ADDR'];
    if($cip && strcasecmp($cip, 'unknown')) {
    $this->onlineip = $cip;
    } elseif($xip && strcasecmp($xip, 'unknown')) {
    $this->onlineip = $xip;
    } elseif($rip && strcasecmp($rip, 'unknown')) {
    $this->onlineip = $rip;
    } elseif($srip && strcasecmp($srip, 'unknown')) {
    $this->onlineip = $srip;
    }
    preg_match("/[\d\.]{7,15}/", $this->onlineip, $match);
    $this->onlineip = $match[0] ? $match[0] : 'unknown';
    $this->app['appid'] = UC_APPID;
    }
    ···
    loveminds
        33
    loveminds  
       2015-04-05 14:35:07 +08:00
    @Showfom CZ88现在也还行了,我长期在给他们更新大量数据
    loveminds
        34
    loveminds  
       2015-04-05 14:43:41 +08:00
    @cnbeining 你这个是自己设置的PTR?
    @Showfom 我提交的准确度还行吧 基本上都能到楼
    香港 星步互联数据中心(上环文咸西街59-67号金日集团中心2层)
    香港 亚洲数据有限公司(青山公路491号嘉力工业中心)
    香港互联虚拟化有限公司数据中心(九龙新蒲岗大有街31号善美工业大厦1604室)
    北京互联互通科技有限公司兆维IDC机房(朝阳区酒仙桥路6号院1号楼)
    msg7086
        35
    msg7086  
       2015-04-05 16:33:59 +08:00
    @cnbeining 贝宁叔又在乱玩PTR了。不考虑用一下 gfw.red 后缀么→_→
    paulgao
        36
    paulgao  
       2015-04-05 20:18:29 +08:00
    以 PHP 为例,IPIP.NET 的客户端 IP 目前以 REMOTE_ADDR 为准了。HTTP_X_FORWARDED_FOR 实在是不敢信任了,尤其在中国这种小运营商乱搞的情况下。
    Showfom
        37
    Showfom  
       2015-04-05 23:07:23 +08:00 via iPhone
    @loveminds 么么哒
    loveminds
        38
    loveminds  
       2015-04-06 12:19:01 +08:00
    @bobopu 123cha比较大
    loveminds
        39
    loveminds  
       2015-04-06 13:05:55 +08:00
    @msg7086 他们什么地方可以自己玩儿PTR呢,美国?
    msg7086
        40
    msg7086  
       2015-04-06 18:44:11 +08:00 via iPhone
    @loveminds 有些商家设ptr不查正向解析,很容易被玩坏…
    loveminds
        41
    loveminds  
       2015-04-07 14:14:12 +08:00
    @msg7086 我记得设过,香港某机房
    xxx.hosted.by.yvonne.lu
    paulgao
        42
    paulgao  
       2015-04-08 01:34:12 +08:00
    @loveminds 不知道你的数据都是从哪里来的?愿意不愿意分享一下呢?:)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2367 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 15:00 · PVG 23:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.