如上所述,在做了很多尝试之后错误我仍然坚持这一点,直到现在我发现的所有引用仍然无法解决这个问题,因为我根本无法获得真正的计算机名称,而是我之前尝试的大多数示例将返回服务器名称或最接近的将返回“10”无论它捕获了多少用户。我正在为我的系统创建一个日志功能,到目前为止我可以获得域名,用户IP地址,用户ID,如下面的代码所示:
请有人指导我如何获得“用户计算机名称”... TQ Everyone
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Mail;
using System.IO;
using System.Globalization;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using Microsoft.SharePoint;
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 〜
{
SPSite spSite = SPContext.Current.Site;
SPSite spConvSite = new SPSite("www.mywebsite.com");
SPWeb spWeb = SPContext.Current.Web;
SPWeb spConvWeb = spConvSite.OpenWeb();
SPUser spUser = spWeb.CurrentUser;
string strDateLogCreated = DateTime.Now.ToString("ddMMyyyy-hhmmsstt", CultureInfo.InvariantCulture);
string LogFolder = "D:\\Logs\\Client";
string[] LocalComputerName = System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
String ecn = System.Environment.MachineName;
string domainName = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
string hostName = Dns.GetHostName();
IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
string testHost = ipProperties.HostName;
string testDomain = ipProperties.DomainName;
string strLocalIPAddress = HttpContext.Current.Request.UserHostAddress.ToString();
string hName = "";
System.Net.IPHostEntry host = new System.Net.IPHostEntry();
host = System.Net.Dns.GetHostEntry(HttpContext.Current.Request.ServerVariables["REMOTE_HOST"]);
//Split out the host name from the FQDN
if (host.HostName.Contains("."))
{
string[] sSplit = host.HostName.Split('.');
hName = sSplit[0].ToString();
}
else
{
hName = host.HostName.ToString();
}
//return hName;
StreamWriter swLogFile = File.AppendText(String.Format(@"{0}\Client-{1}.log", LogFolder, strDateLogCreated));
swLogFile.WriteLine("*** Date & Time : " + DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture));
swLogFile.WriteLine("*** Initiated By : " + spUser.Name.ToString());
swLogFile.WriteLine("*** LAN ID : " + spUser.LoginName.ToString());
swLogFile.WriteLine("*** Computer Name : " + LocalComputerName[0].ToString());
swLogFile.WriteLine("*** IP Address : " + strLocalIPAddress.ToString());
swLogFile.WriteLine("---------------------------------------------------");
swLogFile.WriteLine(DateTime.Now.ToString("hh:mm:ss tt", CultureInfo.InvariantCulture) + " - " + "Successfully captured.");
swLogFile.WriteLine("=====================================================================================================");
swLogFile.WriteLine("Test 1 : " + domainName.ToString());
swLogFile.WriteLine("Test 2 : " + hostName.ToString());
swLogFile.WriteLine("Test 3 : " + testHost.ToString());
swLogFile.WriteLine("Test 4 : " + System.Environment.GetEnvironmentVariable("COMPUTERNAME"));
swLogFile.WriteLine("Test 5 : " + System.Net.Dns.GetHostEntry(Request.ServerVariables["REMOTE_HOST"]).HostName);
swLogFile.WriteLine("Test 6 : " + hName.ToString());
swLogFile.Flush();
}
输出示例如下:
Date & Time : 18/02/2013 11:45:26 AM
Initiated By : USER NAME
LAN ID : DOMAIN\ID99999
Computer Name : 10 //I don't get the real user computer name here!
IP Address : 99.999.99.999
//-----------------------------------//
11:45:26 AM - Successfully captured.
//===================================//
Test 1 : DOMAIN.COMPANYDOMAIN.com
Test 2 : SERVERNAME
Test 3 : SERVERNAME
Test 4 : SERVERNAME
Test 5 : 99.999.99.999
Test 6 : 10 //Also return the same result
更新:
我设法现在得到了答案,答案链接到我在另一篇文章中的答案:
https://stackoverflow.com/a/38953637/1785641
上面链接中Kelsey帖子的更新版本:
$(function GetInfo() {
var network = new ActiveXObject('WScript.Network');
alert('User ID : ' + network.UserName + '\nComputer Name : ' + network.ComputerName + '\nDomain Name : ' + network.UserDomain);
document.getElementById('<%= currUserID.ClientID %>').value = network.UserName;
document.getElementById('<%= currMachineName.ClientID %>').value = network.ComputerName;
document.getElementById('<%= currMachineDOmain.ClientID %>').value = network.UserDomain;
});
要存储该值,请添加以下控件:
<asp:HiddenField ID="currUserID" runat="server" /> <asp:HiddenField ID="currMachineName" runat="server" /> <asp:HiddenField ID="currMachineDOmain" runat="server" />
你也可以从后面这样打电话:
Page.ClientScript.RegisterStartupScript(this.GetType(), "MachineInfo", "GetInfo();", true);
答案 0 :(得分:0)
嗯,您将LocalComputerName
设置为
System.Net.Dns.GetHostEntry(
Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' })
如果将其更改为:
会发生什么System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"])
如果您最终获得了IP地址,请尝试使用nslookup
,看看您是否获得了主机名。如果不这样做,则问题出在DNS解析中。
顺便说一下,实际IP地址是以10.
开头吗?
答案 1 :(得分:0)
我现在关闭了,这是我的.ascx文件的代码:
<style type="text/css">
.hiddenText
{
display: none;
}
</style>
<script type="text/jscript">
<!--
$(document).ready(function () {
var net = new ActiveXObject("WScript.Network");
var vPCName = net.ComputerName;
document.getElementById('<%= txtPCName.ClientID %>').value = vPCName;
});
//-->
</script>
这是用于保存计算机名称的文本框,它假设是隐藏的,但如果它被隐藏则不会起作用。
<asp:TextBox ID="txtPCName" runat="server" />
这是背后的代码:
protected void Page_Load(object sender, EventArgs e)
{
Collector();
}
protected void Collector()
{
if (txtPCName.Text != null || txtPCName.Text != "")
{
SPSite spSite = SPContext.Current.Site;
SPSite spConvSite = new SPSite("https://www.mywebsite.com");
SPWeb spWeb = SPContext.Current.Web;
SPWeb spConvWeb = spConvSite.OpenWeb();
SPUser spUser = spWeb.CurrentUser;
string strDateLogCreated = DateTime.Now.ToString("ddMMyyyy-hhmmsstt", CultureInfo.InvariantCulture);
string LogFolder = "D:\\Logs\\Client";
string[] LocalComputerName = System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
String ecn = System.Environment.MachineName;
string domainName = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
string hostName = Dns.GetHostName();
string strLocalIPAddress = HttpContext.Current.Request.UserHostAddress.ToString();
StreamWriter swLogFile = File.AppendText(String.Format(@"{0}\Client-{1}.log", LogFolder, strDateLogCreated));
swLogFile.WriteLine("*** Date & Time : " + DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture));
swLogFile.WriteLine("*** Initiated By : " + spUser.Name.ToString());
swLogFile.WriteLine("*** LAN ID : " + spUser.LoginName.ToString());
swLogFile.WriteLine("*** Computer Name : " + txtPCName.Text);
swLogFile.WriteLine("*** IP Address : " + strLocalIPAddress.ToString());
swLogFile.WriteLine("---------------------------------------------------");
swLogFile.WriteLine(DateTime.Now.ToString("hh:mm:ss tt", CultureInfo.InvariantCulture) + " - " + "Successfully captured.");
swLogFile.WriteLine("=====================================================================================================");
swLogFile.Flush();
}
}
但问题是,使用Visible =&#34; false&#34;无法隐藏txtPCName。或者样式=&#34;显示:无&#34;因为它将无法将值从Javascript存储到txtPCName。我该如何解决这个问题?我不能让文本框显示在页面上。