2011年3月7日 星期一

模擬Javascript取得client IP

有朋友問在LoadBalance後的ASP.NET程式取得的Client IP都是LB的虛擬IP,這是因為後面的LB之後,Client的Request會先傳送到LB的Server,再透過LB往後傳送到真實的Server,所以透過ASP.NET的Request.UserHostAddress會抓取到的是虛擬IP。針對這個問題我想到的有兩種解決方案,第一透過RIA程式,例如Silverlight或Flex之類的程式抓取ClientIP後,再透過操作dom物件塞到html dom,這樣submit的時候就能取得;第二種做法是找一台不在LB後面的機器,也就是用IP可以直接access到的server,在這一台server提供一個模擬Javascript寫出hidden的欄位,其值再給予Client IP即可(因該Server不在LB後面所以Request.UserHostAddress可以正確抓取Client IP),以下示範第二種做法使用ASP.NET實做。