iT邦幫忙

1

php 取得IP的問題

php
  • 分享至 

  • xImage

各位大神好:
小弟遇到了一個抓取IP的問題想要跟大神們請教,我有一段php抓取用戶ip的code原本運作好好的但是最近遇到怪事

一樣的code
架設在godaddy上的服務取得的ip是 ipv4
但是架設在GCP上的服務取得的ip是 ipv6 (windows server xampp)
我想讓架設在GCP上的服務一樣取得ipv4的格式 不知道大神們有沒有頭緒 感謝

code 如下:

public static function GetIP()
    {
        foreach (array(
            'HTTP_CLIENT_IP',
            'HTTP_X_FORWARDED_FOR',
            'HTTP_X_FORWARDED',
            'HTTP_X_CLUSTER_CLIENT_IP',
            'HTTP_FORWARDED_FOR',
            'HTTP_FORWARDED',
            'REMOTE_ADDR',
        ) as $key) {
            if (array_key_exists($key, $_SERVER) === true) {
                foreach (explode(',', $_SERVER[$key]) as $ip) {
                    if (filter_var($ip, FILTER_VALIDATE_IP) !== false) {
                        return $ip;
                    }
                }
            }
        }
    }
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

4
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2020-04-14 16:39:27
最佳解答

一般會發生這樣的事。有時要注意的是,是否有用了像是
proxy
負載處理
cdn

當有設定以上的東西。如果在其設定上沒處理好ip轉發。
就沒辦法獲得實際的來源ip。

因為並不太清楚你的主機規劃。所以只能大約的猜想可能是這樣的問題。
當然,其實你可以先直接輸出$_SERVER看看

能不能看到實際的ip存在。
或許已經有轉發了。大多數來說,有時轉發的ip可能會用另外的名稱命名。

浩瀚星空不愧是大神!!
看起來應該就是CFCDN造成的 在同一個GCP上用沒有掛CDN的網域來做測試 可以順利取得自己的ipv4ip。

想再問一個問題 就是這個掛CF的服務會記錄使用者的IP 但是看紀錄有些還是會抓到ipv4 是因為這些紀錄來源沒有經過CF嗎?

0

像這樣嗎 ?

http://www.ublink.org/index.php/ipv6

https://ithelp.ithome.com.tw/upload/images/20200414/20001416SuN9Vfgowi.png

裏面放個 IPv4 的頁面就可以了

看更多先前的回應...收起先前的回應...

門神JanusLin大大 請問一下 裏面放個 IPv4 的頁面就可以了 是什麼意思?

我的code 可以抓到用戶的IP 只是不知道為什麼 那段code放到GCP的服務上變成了IPv6的格式

這有點難解釋
簡單說
他 IPv6 你 IPv6 就看到 IPv6
他 IPv4 你 IPv6/v4 他看到你就是 IPv4

意思是 我要設定伺服器只支援ipv4 這我就會只看到ipv4的ip了是嘛 @@?

Yes

我要發表回答

立即登入回答