我在維護中的程式碼~發現一個問題,他這句抓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()
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...
找到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方式管理網站~那我改程式碼也沒有用~
答案就給你了~
如果是雲端與地端互打API的話,還要小心,地端網管有可能開port的ip跟出去的ip不同,所以一定要問清楚,出去的IP跟他給的IP Port可能不同。不然叫自己程式自己判斷查ip,結果都打不通,才知道出去跟進去不同路。
恩~不過我只是純粹要解決訪客IP抓錯的問題~
我再把JavaScript改成我自己JQ常用方式~也是能抓到訪客IP呢~
<script>
/*Ajax即時互動*/
function Run_Ajax(URL) {
URL = URL.replace(/&/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。
就是要找一下就是了。
㊣浩瀚星空㊣
可惜~我不是網管~哈~我沒有權限~
只能從改程式碼下手
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 用的