iT邦幫忙

0

ASP.NET MVC 網站專案 訪客 IP address 問題

取得遠端用戶端的 IP 主機位址

得遠端用戶端的 DNS 名稱

我使用上面兩種方法都只會抓取到內網IP 哪一台電腦 例如:192.168.X.1 抓得到

可是外網訪客連接時,訪客的IP只會顯示我架站伺服器主機的IP,該從哪邊修正可以正確抓取訪客的IP呢?

補充:我覺得應該不是程式碼的問題,是否伺服器上要做什麼設定?
使用 VMware 安裝 作業系統:WINDOWS SERVER 2016
APE.NET MVC 開發的網站 使用 IIS發行網站

看更多先前的討論...收起先前的討論...
fillano iT邦超人 1 級 ‧ 2021-12-07 12:00:34 檢舉
網路架構?iis設定?
fillano iT邦超人 1 級 ‧ 2021-12-07 12:23:25 檢舉
另外就是快速檢查一下X-Forward-For標頭有沒有資訊
是否在學校或公司這種有上百台電腦,要配合網管的設定呢?
fillano iT邦超人 1 級 ‧ 2021-12-07 14:35:09 檢舉
我是說你的伺服器主機。
windows server 2016
用IIS 架設成功 已經可以讓所有人連到我的網站了
froce iT邦大師 1 級 ‧ 2021-12-07 15:24:21 檢舉
看看IIS能不能轉發 X-Forward-For 這個header。
我不用IIS所以不清楚詳細步驟。
1
Samuel
iT邦新手 1 級 ‧ 2021-12-07 11:19:23

Samuel 是否在學校或公司這種有上百台電腦,要配合網管的設定呢?

1
copemoe
iT邦新手 3 級 ‧ 2021-12-07 16:23:38

最近網路上找的 剛好用到專案上
IIS
ASP.NET Web Forms C#

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string vClientIP = GetIPAddress();//取得ClientIP 
        Response.Write(vClientIP);

    }

    //Get Ip Address
    protected string GetIPAddress()
    {
        System.Web.HttpContext context = System.Web.HttpContext.Current;
        string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        if (!string.IsNullOrEmpty(ipAddress))
        {
            string[] addresses = ipAddress.Split(',');
            if (addresses.Length != 0)
            {
                return addresses[0];
            }
        }
        return context.Request.ServerVariables["REMOTE_ADDR"];
    }
}

還是會抓到 ipv4 預設閘道

copemoe 大大這樣用實測可以抓到客戶端的IP嗎?

copemoe我用手機網路連 會抓到 我架設網站伺服器主機上的 ipv4 預設閘道 與 DHCP伺服器 的IP (我伺服器ipv4 預設閘道 與 DHCP伺服器 是同一個IP)

0
Mars
iT邦新手 4 級 ‧ 2021-12-08 08:50:00

我這邊有一些取 ip 的方法給你參考,看有沒有你需要的

/// <summary>
/// 取得本機 IP Address
/// </summary>
/// <returns></returns>
public static List<string> GetHostIPAddress()
{
	List<string> lstIPAddress = new List<string>();
	IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName());
	foreach (IPAddress ipa in IpEntry.AddressList)
	{
		if (ipa.AddressFamily == AddressFamily.InterNetwork)
			lstIPAddress.Add(ipa.ToString());
	}
	return lstIPAddress;
}

/// <summary>
/// 取得遠端呼叫者ip
/// </summary>
/// <returns></returns>
public string GetClientIP()
{
	string ClientIP = "";
	if (Request.ServerVariables["HTTP_VIA"] == null)
	{
		ClientIP = Request.ServerVariables["REMOTE_ADDR"].ToString();
	}
	else
	{
		ClientIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
	}
	ClientIP = ClientIP.Replace("::1", "127.0.0.1");
	return ClientIP;
}

/// <summary>
/// 取得外網 IP Address
/// </summary>
/// <returns></returns>
public static string GetExtranetIPAddress()
{
	HttpWebRequest request = HttpWebRequest.Create("http://www.whatismyip.com.tw") as HttpWebRequest;
	request.Method = "GET";
	request.ContentType = "application/x-www-form-urlencoded";
	request.UserAgent = "Mozilla/5.0";
	string ip = string.Empty;
	WebResponse response = request.GetResponse();
	using (StreamReader reader = new StreamReader(response.GetResponseStream()))
	{
		string result = reader.ReadToEnd();
		string pattern = @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}";
		ip = Regex.Match(result, pattern).ToString();
	}
	return ip;
}
看更多先前的回應...收起先前的回應...

跑 GetExtranetIPAddress() 裡面的 WebResponse response = request.GetResponse(); 會出現 基礎連接已關閉: 連接意外關閉

Mars iT邦新手 4 級 ‧ 2021-12-08 09:51:07 檢舉

我記得是對方安全性協定提昇的關係,可以加入此段程式碼

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

或是參考這篇文章

https://www.twblogs.net/a/5b7ced4c2b71770a43dd2e6d

我把 HttpWebRequest request = HttpWebRequest.Create("http://ipinfo.io/ip") as HttpWebRequest;
做修改可以順利執行,可是取得的IP並不是客戶端的IP 而是 我伺服器的IP

Mars 我用手機網路連 會抓到 我架設網站伺服器主機上的 ipv4 預設閘道 與 DHCP伺服器 的IP (我伺服器ipv4 預設閘道 與 DHCP伺服器 是同一個IP)

我要發表回答

立即登入回答