none
安裝憑證後無法正確取得client IP RRS feed

  • 問題

  • 過去在取得 user 端的 IP 是用 Request.UserHostAddress 或 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 的方法。
    不過現在安裝憑證後(憑證安娤於 IIS, 不是 L4)﹐原本的方式取不到client 正確的 IP﹐網路上一直沒找到在安裝憑證後取 IP的問題﹐請問安裝憑證後要怎麼樣才能抓得到 client IP 呢?

    我想過用 javascript 去抓﹐但好像js 本身並沒有什麼方法可以取得﹐網路上看到的都是 js 去呼叫一個外部的網站再取回 ip, 在intranet 無法連到外面﹐而且可能有資安問題﹐所以也只好放棄。

    註:使用的是 asp.net 4.7.2
    2021年10月14日 上午 07:36

所有回覆

  • 您可以參考這篇文件的做法:

    Get Client IP Address In ASP.NET MVC

    2021年10月14日 上午 10:39
  • 您可以參考這篇文件的做法:

    Get Client IP Address In ASP.NET MVC

    我嚐試了以下的方式

    var ip1 = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    var ip2 = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    var ip3 = System.Web.HttpContext.Current.Request.UserHostAddress;
    var strHostName = System.Net.Dns.GetHostName();
    var ip4 = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();

    ip1 = 空的
    ip2 = L4 的 IP
    ip3 = L4 的 IP
    strHostName = 主機的 HostName
    ip4 = ::1
    都沒有辦法取得實際 client ip 

    我有兩台 AP 主機﹐前面有個 L4﹐在AP 主機的IIS 還沒有安裝證前使用HTTP_X_FORWARDED_FOR 可以正確取得 IP﹐要安裝憑證時因為 L4 的等級不夠﹐所以憑證安裝在 AP 主機上﹐但這樣子在https 下就沒辦法正確取得 client ip。
    我不大明白的是 HTTP_X_FORWARDED_FOR 的值不是瀏覽器給的嗎?(還是我觀念錯了?)﹐https 封包雖然有加密﹐但到了server端不是應該可以解密嗎?為什麼安裝憑證後用https 就取不到值了?

    2021年10月15日 上午 10:22
  • 不是瀏覽器給的,早期這個是設計給 proxy 動態加入。

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2021年10月15日 上午 11:59
  • 不是瀏覽器給的,早期這個是設計給 proxy 動態加入。

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    那麼原本 HTTP_X_FORWARDED_FOR 的值可能是 L4 給的﹐因為憑證不是安裝在L4, 所以無法對加密封包填入資訊﹐這樣是合理﹐可是這樣是不是就沒有辦法取得 client 的 ip 了?沒有辦法解決嗎?就資安的角度來說不就不能確定來源了?
    2021年10月16日 下午 01:14