熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 10:40:03  來源: .NET編程 

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

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

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

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

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

  if (!IsPostBack)

  {

  string strClientHostname = GetHostname(GetIP());

  if (strClientHostname == "chinak" || strClientHostname == "chinahjbai" )

  {

  bind(); //輸出結果

  }

  else

  {

  PageClientScriptRegisterStartupScript(thisGetType() "Warning" "");

  }

  }

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

  //得到客戶端IP

  public string GetIP()

  {

  string uip = "";

  if (HttpContextCurrentRequestServerVariables["HTTP_VIA"] != null)

  {

  uip = HttpContextCurrentRequestServerVariables["HTTP_X_FORWARDED_FOR"]ToString();

  }

  else

  {

  uip = HttpContextCurrentRequestServerVariables["REMOTE_ADDR"]ToString();

  }

  return uip;

  }

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

  public string GetHostname(string IP)

  {

  string dirResults = "";

  ProcessStartInfo psi = new ProcessStartInfo();

  Process proc = new Process();

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

  //psiFileName = "ping ";

  //psiRedirectStandardInput = false;

  //psiRedirectStandardOutput = true;

  //psiArguments = "a n " + IP;

  psiFileName = "nbtstat ";

  psiRedirectStandardInput = false;

  psiRedirectStandardOutput = true;

  psiArguments = "A " + IP;

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

  psiUseShellExecute = false;

  proc = ProcessStart(psi);

  dirResults = procStandardOutputReadToEnd();

  procWaitForExit();

  dirResults = dirResultsReplace("\r" "")Replace("\n" "")Replace("\t" "");

  Regex reg = new Regex("china(?:[az][az_]*)*" RegexOptionsIgnoreCase | RegexOptionsCompiled);

  dirResults = dirResultsToLower();

  Match mc = regMatch(dirResults);

  //ResponseWrite(dirResultsToLower());

  if (mcSuccess)

  {

  return mcToString();

  }

  else

  {

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

  string re = "(china)"; // Word

  string re = "([+]\\d+)"; // Integer Number

  string re = "()"; // Any Single Character

  string re = "((?:[az][az_]*))"; // Variable Name

  Regex r = new Regex(re + re + re + re RegexOptionsIgnoreCase | RegexOptionsSingleline);

  Match mc = rMatch(dirResultsToLower());

  if (mcSuccess)

  {

  return mcToString();

  }

  else

  {

  reg = new Regex("Host not found" RegexOptionsIgnoreCase | RegexOptionsCompiled);

  mc = regMatch(dirResults);

  if (mcSuccess)

  {

  return "Host not found!";

  }

  else

  {

  return "";

  }

  }

  }

  }

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


From:http://tw.wingwit.com/Article/program/net/201311/14258.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.