نحوه به دست آوردن آدرس IP بازدیدکنندگان و Location آنها توسط #C

شنبه 2 آبان 1394

در این مقاله نحوه به دست آوردن آدرس IP بازدیدکننده سایت و همچنین نام هاست یا همان نام کامپیوتر او را به دست آورده و نمایش خواهیم داد

نحوه به دست آوردن آدرس IP بازدیدکنندگان و Location آنها توسط #C

برای به دست آوردن آدرس  Ip بازدید کنندگان و Location آنها روش های مختلفی وجود دارد .در این مقاله از دو روش استفاده خواهد شده.

یک پروژه ASP.net Web Application ایجاد کنید یک صفحه به نام IP ایجاد کنید .کدهای مربوط به صفحه طراحی این صفحه به صورت زیر است .

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>یافتن آدرس IP و نام هاست</title>
</head>
<body dir="rtl">
    <form id="form1" runat="server">
        <a href="http://barnamenevisan.org"><h3>برنامه نویسان :مرجع تخصصی برنامه نویسان</h3></a>
      
    <div style="font-weight:bold; border:1px;">
        آدرس IP شما : 
        <asp:Label ID="lbl1"  runat="server" Text=""></asp:Label>
         <br /><br />
       
        نام کامپیوتر/نام هاست : <asp:Label ID="lbl2" runat="server" Text=""></asp:Label>
        <br /><br />
        آدرس IP شما در پشت پراکسی : <asp:Label ID="lbl3" runat="server" Text=""></asp:Label>
        <br />
        <br />
        <hr />
        <hr />
       آدرسURL که با کمک کلاسIPHostGenerator به دست می آید  &nbsp;:&nbsp; <asp:Label ID="lbl4" runat="server" Text=""></asp:Label>
        <br />
       آدرس IP که با کلاس IPHostGenerator به دست می آید&nbsp;&nbsp;&nbsp;
        :&nbsp;&nbsp;
        <asp:Label ID="lbl5" runat="server" Text=""></asp:Label>
        </div>
    </form>
</body>
</html>

در قسمت کد صفحه   و در Page_Load کد های زیر را وارد می کنیم تا در هر یک از Lable ها آدرسهای مختلفی  از جمله آدرس IP ، نام کامپیوتر یا همان نام هاست، و آدرس Ip در پشت پراکسی سرور چاپ شود.

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

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // To find IP address of a machine behind LAN you can use this code
            string strHostName = Dns.GetHostName();
            IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);

            lbl1.Text = Convert.ToString(ipEntry.AddressList[1]);
            lbl2.Text = Convert.ToString(ipEntry.HostName);


            //Find IP Address Behind Proxy Or Client Machine In ASP.NET
            string IPAdd = string.Empty;
            IPAdd = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

            if (string.IsNullOrEmpty(IPAdd))
            {
                IPAdd = Request.ServerVariables["REMOTE_ADDR"];
                lbl3.Text = IPAdd;
            }
            IPHostGenerator ip=new IPHostGenerator();

            lbl4.Text = ip.GetCurrentPageUrl();
            lbl5.Text = ip.GetVisitorDetails();
        }
    }
}

البته از انجایی که پروژه ما بر روی اینترنت قرار ندارد و فقط یک برنامه و وبسایت local است آدرس IP به درستی نمایش داده نمیشود.

روش دیگر این است که کلاس زیر را به پروژه اضافه کرده و از توابع آن برای به دست آوردن ادرس استفاده کنیم .کد مربوط به کلاس به صورت زیر است .

 public class IPHostGenerator
    {

        internal string GetCurrentPageUrl()
        {
            return HttpContext.Current.Request.Url.AbsoluteUri;
        }
        internal string GetVisitorDetails()
        {
            string varIPAddress = string.Empty;
            string varVisitorCountry = string.Empty;
            string varIpAddress = string.Empty;
            varIpAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (string.IsNullOrEmpty(varIpAddress))
            {
                if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
                {
                    varIpAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                }
            }

            //varIPAddress = (System.Web.UI.Page)Request.ServerVariables["HTTP_X_FORWARDED_FOR"];    
            if (varIPAddress == "" || varIPAddress == null)
            {
                if (HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] != null)
                {
                    varIpAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
            }
            //varIPAddress = Request.ServerVariables["REMOTE_ADDR"];    
            return varIpAddress;
        }

        internal DataTable GetLocation(string varIPAddress)
        {
            WebRequest varWebRequest = WebRequest.Create("http://freegeoip.net/xml/" + varIPAddress);
            WebProxy px = new WebProxy("http://freegeoip.net/xml/" + varIPAddress, true);
            varWebRequest.Proxy = px;
            varWebRequest.Timeout = 2000;
            try
            {
                WebResponse rep = varWebRequest.GetResponse();
                XmlTextReader xtr = new XmlTextReader(rep.GetResponseStream());
                DataSet ds = new DataSet();
                ds.ReadXml(xtr);
                return ds.Tables[0];
            }
            catch
            {
                return null;
            }
        }

        internal string GetMachineNameUsingIPAddress(string varIpAdress)
        {
            string machineName = string.Empty;
            try
            {
                IPHostEntry hostEntry = Dns.GetHostEntry(varIpAdress);

                machineName = hostEntry.HostName;
            }
            catch (Exception ex)
            {
                // Machine not found...    
            }
            return machineName;
        }    

در این کلاس ابتدا تابع GetCurrentPageUrl نوشته شده است این تابع آدرس Url صفحه را به دست می آورد .در تابع GetVisitorDetails آدرس Ip ویزیتور به دست آورده می شود.

در تابع بعدی یعنی GetLocation همانطور که از نام آن مشخص است Location ویزیتور به دست می اید و تابع آخر یعنی تابع GetMachineNameUsingIPAddress نام کامپیوتر یا هاست مورد نظر که همان بازدید کننده سایت است به دست می آید.

برای اجرای Sample فایل WebApplication1.csproj را در ویژوال استودیو باز کنید.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید