程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> .net通過獲取客戶端IP地址反查出用戶的計算機名

.net通過獲取客戶端IP地址反查出用戶的計算機名

編輯:關於ASP.NET

       要求:內部網站某一個菜單只允許規定的域用戶訪問,不能用登錄窗口,類似用戶名密碼這樣的東西。

      解決方法:用戶點擊菜單,得到IP,用NBTSTAT -A IP得到客戶端的計算機名,在後台程序中用正則過濾出計算機名進行判斷。

      下面是部分代碼和解決方法,變通還是很重要的,細節不是重點,重點是想法,當然你可以把代碼寫的更漂亮高效,^^。

      你可以新建個頁面,在後台寫上下面的代碼。

      ////////////////////////////////////////////////////////////

      if (!IsPostBack)

      {

      string strClientHostname = GetHostname(GetIP());

      if (strClientHostname == "china-2021-k90" || strClientHostname == "china-hjbai" )

      {

      bind(); //輸出結果

      }

      else

      {

      Page.ClientScript.RegisterStartupScript(this.GetType(), "Warning", "");

      }

      }

      ////////////////////////////////////////////////////////////

      //得到客戶端IP

      public string GetIP()

      {

      string uip = "";

      if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)

      {

      uip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();

      }

      else

      {

      uip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();

      }

      return uip;

      }

      ////////////////////////////////////////////////////////////

      public string GetHostname(string IP)

      {

      string dirResults = "";

      ProcessStartInfo psi = new ProcessStartInfo();

      Process proc = new Process();

      //這裡聰明的你會想到很多命令的有趣用法吧

      //psi.FileName = "ping ";

      //psi.RedirectStandardInput = false;

      //psi.RedirectStandardOutput = true;

      //psi.Arguments = "-a -n 1 " + IP;

      psi.FileName = "nbtstat ";

      psi.RedirectStandardInput = false;

      psi.RedirectStandardOutput = true;

      psi.Arguments = "-A " + IP;

      //這裡對結果進行正則過濾,你可以在CMD窗口運行DOS命令看下結果,這樣會更明了

      psi.UseShellExecute = false;

      proc = Process.Start(psi);

      dirResults = proc.StandardOutput.ReadToEnd();

      proc.WaitForExit();

      dirResults = dirResults.Replace("r", "").Replace("n", "").Replace("t", "");

      Regex reg = new Regex("china-(?:[a-z][a-z0-9_]*)*", RegexOptions.IgnoreCase | RegexOptions.Compiled);

      dirResults = dirResults.ToLower();

      Match mc = reg.Match(dirResults);

      //Response.Write(dirResults.ToLower());

      if (mc.Success)

      {

      return mc.ToString();

      }

      else

      {

      //這個是正則的另一種拼接方法,因為有些計算機名比較特殊

      string re1 = "(china)"; // Word 1

      string re2 = "([-+]d+)"; // Integer Number 1

      string re3 = "(-)"; // Any Single Character 1

      string re4 = "((?:[a-z][a-z0-9_]*))"; // Variable Name 1

      Regex r = new Regex(re1 + re2 + re3 + re4, RegexOptions.IgnoreCase | RegexOptions.Singleline);

      Match mc2 = r.Match(dirResults.ToLower());

      if (mc2.Success)

      {

      return mc2.ToString();

      }

      else

      {

      reg = new Regex("Host not found", RegexOptions.IgnoreCase | RegexOptions.Compiled);

      mc = reg.Match(dirResults);

      if (mc.Success)

      {

      return "Host not found!";

      }

      else

      {

      return "";

      }

      }

      }

      }

      //////////////////////////////////////////////////////////////

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved