iT邦幫忙

0

詢問取得訪客IP問題

  • 分享至 

  • xImage

我在維護中的程式碼~發現一個問題,他這句抓IP,為何會是抓伺服器IP? 例如是192.168.3.1
而不是訪客IP 114.33.189.100 之類?!
因為我不是維護伺服器的人~我只是把程式碼修改後送給維護伺服器做發佈

\\在View檢視頁
@Request.UserHostAddress

是什麼原因造成的呢?
1.虛擬機?
2.這句其實是只抓伺服器IP?那真正抓 Client IP的語法是?
3.其他?

我不確定這句是否也會是伺服器IP? 192.168.3.1

HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString()
看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2024-03-26 12:43:39 檢舉
這個是不是你反向代理伺服器的IP?
伺服器不是我管的~我只修程式碼問題~
內部打卡用的網站~只有用IP登入~沒有買網域~
所以你講的~只有架伺服器的IT部門才知道😒
froce iT邦大師 1 級 ‧ 2024-03-27 08:04:03 檢舉
去問啊,搞不好動動嘴對方就知道怎麼配合了。
用GET去拿IP,有時候會遇到其他的問題。
哈~好唷~基本上那位網管本身也很忙~也要出差去各縣市改硬體的機台電路~
我只能等他有空跟我回了~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
DennisLu
iT邦研究生 1 級 ‧ 2024-03-26 13:38:41
最佳解答

192.168.3.1 有可能是 GW
假設你的對外服務,網管使用NAT的方式開放外部連入Server,
所有進來的流量,Server取到的IP來源都是GW的。

如果是使用port forward的方式,就會是來源IP。

通常習慣上服務的伺服器也不會設 1 或 254,網路防火牆閘道比較常用。

用NAT的話,你很難從進來後的應用來確認來源,
因為進來的IP,應用的紀錄永遠都是你的GW。
只能從防火牆紀錄查到,難調查。
架站習慣上用port forward。

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

原來如此@@~

那我只有想到一個變招@@...應該有用
用前端JavaScript去抓我的IP

例如去這個網站抓 訪客IP
https://www.whatismyip.com.tw/tw/

再回傳到我的網站記錄訪客IP.../images/emoticon/emoticon06.gif

找到Javascript取得的方法了~
來源:
https://www.delftstack.com/zh-tw/howto/javascript/get-ip-address-javascript/

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
async function getIpClient() {
  try {
    const response = await axios.get('https://api.ipify.org?format=json');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

getIpClient();
</script>

如果網管是用NAT方式管理網站~那我改程式碼也沒有用~/images/emoticon/emoticon04.gif
答案就給你了~

DennisLu iT邦研究生 1 級 ‧ 2024-03-26 16:09:13 檢舉

如果是雲端與地端互打API的話,還要小心,地端網管有可能開port的ip跟出去的ip不同,所以一定要問清楚,出去的IP跟他給的IP Port可能不同。不然叫自己程式自己判斷查ip,結果都打不通,才知道出去跟進去不同路。

恩~不過我只是純粹要解決訪客IP抓錯的問題~
我再把JavaScript改成我自己JQ常用方式~也是能抓到訪客IP呢~

<script>
    /*Ajax即時互動*/
    function Run_Ajax(URL) {
        URL = URL.replace(/&amp;/ig, "&");
        var returnStatus = "";
        $.ajax({
            url: URL, type: "GET", async: false, global: true
            , success: function (data) {
                console.log(data);
            }
        })
        return returnStatus;
    }
    Run_Ajax("https://api.ipify.org");
</script>

我記得GW一般也是會轉發實體IP。
就是要找一下就是了。

㊣浩瀚星空㊣
可惜~我不是網管~哈~我沒有權限~
只能從改程式碼下手/images/emoticon/emoticon02.gif

0
rogeryao
iT邦超人 8 級 ‧ 2024-03-26 10:16:26

我先測試 這句看看吧~

Request.ServerVariables

一個禮拜只能送程式碼更新一次(哈^^a

0

1.虛擬機?

虛擬機、CDN、PROXY,都有可能抓的不是實際的來源IP。
一般來說這還得看相關來源機是否有做轉發IP的動作。
如果沒有的話,你怎麼拿都會拿不到。
這可以檢查一下 SERVER值的 HTTP_X_FORWARDED_FOR ,看有沒有多個IP
大多數有的話,那還是有轉發實體IP過來的。但並不是絕對性就是了

2.這句其實是只抓伺服器IP?那真正抓 Client IP的語法是?

asp.net我不熟,沒辦法回答你

3.其他?

像是有使用 cloudflare 。它本身也有PROXY的特性,如果打開的話。
你也只能抓到 cloudflare 的IP。而非實際IP。
不過 cloudflare 本身也有注意到這個問題,所以他也有轉發一些如下的標頭值過來

HTTP_CF_CONNECTING_IP 訪客IP
HTTP_CF_IPCOUNTRY 來源國家
HTTP_CF_RAY 這啥我忘了,自已去查
HTTP_CF_VISITOR 這好像是 http 還是 https 的判斷。似乎是給那種 443->80 用的

好呀~我全都試試看~
不然~我用手機登入也是抓 192.168.3.1 ~很奇怪....

我要發表回答

立即登入回答