求教 服务器 监控方面的问题
向做个服务器监控的小工具,但是目前不知道如何通过AU3获取 远程连接到服务器的客户端IP地址和计算机名, 并且在允许列表外如何断开与服务器的连接. 求高人指教,万分感谢..如果可以 希望可以提供 获取客户端IP和计算机名的源码和 断开连接的 源码,谢谢.
服务器不会登录到桌面 所以需要服务的形式启动 然后监控服务器远程连接的客户端IP和计算机名 如果在允许列表内 则放行 不通过就断开连接 这问题看了三遍才看懂,你直接问获取与服务器的所有会话以及断开的方式多直接了当
#include <Array.au3>
$info = _wmi_ServerConnectioninfo()
_ArrayDisplay($info)
Func _wmi_ServerConnectioninfo()
Local $aResult
Local $strComputer = "prwh01";服务器的名称
Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ServerConnection", "WQL",48)
For $objItem In $colItems
$aResult += 1
Redim $aResult[$aResult + 1]
$aResult[$aResult] = $objItem.ComputerName
$aResult[$aResult] = $objItem.UserName
Next
Return $aResult
EndFunc
以上代码获取连接服务器的IP以及user,IP得到了电脑名还用思量吗?
你可以用pstools中的psfile得到相应服务器的信息,单独的会话信息如下:
\PIPE\spoolss
User: W000176
Locks:0
Access: Read Write
,而后通过第一段代码得到相应user对应的IP,而后和你所谓的列表IP对比,不在则用psfile断开连接,相信高级男人的理解能力。 本帖最后由 非典男人 于 2012-4-11 22:39 编辑
回复 2# 502762378
先感谢下你,可能是我说的不是很清楚, 我的目的是要在服务器上运行该程序,用来监控将要用Mstsc连接服务器的 用户端的计算机IP或计算机名是否在允许列表内,
比如我现在我的电脑连接一台服务器IP为:124.34.75.32 的机器, 那么我在用mstsc连接登录这台主机的时候, 同时我的IP是142.214.23.180,计算机名:PC-001.
首先程序就在获取我的计算机IP和计算机名进行判断,如果与允许的列表符合就放行,不符合就直接断开和这个服务器的连接. 回复 3# 非典男人
可能是你没细看我的语言,亲测关闭会话同样可以断开远程连接,意味着我以上的方法可行。
其实还有一种简单的方法,你既然是想让一些user可以远程登录到你的server,微软已经替你想好了。
你可以把对服务器远程登录有需求的user账号添加到server端的Remote Desktop Users组里边。Remote Desktop Users组系统的解释为:此组中的成员被授予远程登录的权限 本帖最后由 haijie1223 于 2012-4-12 08:43 编辑
看看这个对你有用么?
http://hi.baidu.com/cnshuge/blog/item/c2301a60b42a7150ebf8f827.html
PsTools 入门
在 Sysinternals 工具库中(没错,它是一整套的工具),PsTools 套件是我所喜爱的工具之一,该工具位于 microsoft.com/technet/sysinternals/utilities/pstools.mspx。Mark 将这些工具以 UNIX 进程列表实用程序 ps 命名。正如这些工具的下载网站上所述,有些内置的 Windows® 命令行实用程序与这些工具有着相同的功能。但除了重要的独特功能外,两者的主要区别在于 PsTools 套件既可本地使用,又可远程使用(当然,前提是必须正确配置远程系统)。更为可喜的是,其远程运行过程几乎与本地运行过程一样简单。PsTools 套件包含几个单独的应用程序,如图 1 所列。如同其他 Sysinternals 实用程序一样,没有安装程序,而只有应用程序。只需将它们放在所选路径的某个文件夹中就万事大吉了!Figure 1 PsTools 实用程序
工具 说明
PsExec 用于在任何用户环境中执行进程。
PsFile 显示系统上远程打开的文件。
PsGetSid 显示计算机或用户的 Windows 安全标识符 (SID)。
PsInfo 列出有关 Windows 系统的信息。
PsKill 按照名称或进程 ID 终止进程。
PsList 列出有关运行中进程的详细信息。
PsLoggedOn 显示所有本地登录的用户以及所有远程资源共享用户。
PsLogList 转储 Windows 事件日志记录。
PsPasswd 更改用户帐户的密码。
PsService 查看和控制 Windows 服务。
PsShutdown 关闭、重新启动、休眠或挂起计算机。
PsSuspend 挂起运行中的进程。
现在,您可能注意到,这一功能的某些环节(特别是 PsLogList)可以通过 Windows Management Instrumentation (WMI) 和一些复杂的脚本来实现。但 PsTools 套件的特点在于,每个实用程序都旨在完成某一项特定的任务,简单而又容易。我将逐个工具加以介绍,并通过简单的示例来说明工具的用途及用法。但首先,我要简要介绍一下这些工具的工作原理以及要使这些工具能够工作必须满足哪些前提条件。
工具的工作原理这些工具通常都以相同的方式工作。在主机系统上启动所需的 PsTool。尽管许多工具都可以在本地运行,但您会发现这些工具在针对一个远程系统运行时或在同时针对多个系统运行时最能发挥其效用。(PsExec 是我所想到的一个特例,在下面的示例中您就会看到。)实用程序使用您所提供的命令行参数,来将其自身复制到远程系统的管理共享,这一管理共享与远程系统上的 %SystemRoot%(Windows 目录)相同。一旦复制到远程目录中,该应用程序即会自行启动并将安装 Windows 服务。该 Windows 服务会使用启动时您所提供的凭据来执行您所请求的任务。如果该特定工具需要客户端系统上的某个最终用户 UI,该服务会在用户上下文中启动附加的二进制文件。(请记住,服务不能抛出直接交互的 UI。)该服务再将任何必要的信息返回给启动它的控制台。最后,该服务会自行卸载。您可以看到,这些工具是强大而独立的。尽管它们会涉及多个二进制文件和多个进程,但作为用户的您却不必担忧,您只需运行所需的工具,它就会完成任务。要使用这些工具,必须满足以下前提条件:具有 Windows NT®、Windows 2000、Windows XP 或 Windows Server® 2003(支持 Windows 的 x86 或 x64 版本,但不支持 Itanium 版本);在运行这些工具的远程系统上启用默认的管理网络共享 (admin$);在远程系统上打开用于文件和打印机共享的端口(无论使用的是 Windows 防火墙、Internet 连接防火墙,还是其他防火墙产品)。
PsExecPsExec 是这些工具中我个人所偏爱的工具,个中原因或许并不是您想象的那样。在两年中,我有大半的时间一直以“非管理员用户”的身份运行我的系统,也就是说,我以“用户”身份而非“管理员”身份运行。而我有一个用来以本地管理员身份运行应用程序的简短脚本,称为 run.vbs(以用户身份也可以同样轻松地运行这些应用程序)。图 2 显示了该脚本的内容(也可在 TechNet 杂志网站的 technetmagazine.com/code07.aspx 获得该脚本)。该脚本假定 PsTools 在 Path 系统变量中。Figure 2 Run.vbs 复制代码 SET WshShell = WScript.CreateObject("WScript.Shell")
SET WshSysEnv = WshShell.Environment("SYSTEM")
SET FSO = CreateObject("Scripting.FileSystemObject")
IF WScript.Arguments.Count <> 0 Then
FOR EACH arg IN WScript.Arguments
iArgCount = iArgCount + 1
strCmdArg = (arg)
strCmdArray = Split(strCmdArg, " ", 2, 1)
IF iArgCount = 1 THEN
strExe = strCmdArray(0)
ELSEIF iArgCount = 2 THEN
strRun = strCmdArray(0)
ELSE
strParams = strParams&" "&strCmdArray(0)
END IF
NEXT
END IF
'/t:0A && title ***** Admin *****
strExt = LCase(Right(strExe, 3))
IF strExt <> "exe" AND strExt <> "bat" AND strExt <> "cmd" THEN
WshShell.Run "psexec.exe -d -i -e -u COMPUTERNAME\USER -p PASSWORDcmd /c start "&strExe&"
"&strRun&" "&strParams, 0, FALSE
ELSE
WshShell.Run "psexec.exe -d -i -e -u COMPUTERNAME\USER -p PASSWORD "&strExe&" "&strRun&"
"&strParams, 0, FALSE
END IF
SET WshShell = NOTHING
SET WshSysEnv = NOTHING
SET FSO = NOTHING
当我们在 Winternals 开发 Protection Manager 产品时,Mark 添加了一个功能:即允许受限用户提供更高权限的凭据来在本地启动 PsExec。这个简单的脚本就是将 PsExec 用于这一功能的一个示例。当然,PsExec 更常用来远程运行,例如用来运行一个不提供自身远程、脚本或自动处理框架的实用程序。PsExec 的两个主要功能包括将所要执行的二进制文件复制到远程系统以及规定处理器关联。PsExec 的另一个有用功能是可以通过提供脚本文件来针对许多计算机同时进行脚本处理。以下是简化的 PsExec 用法: 复制代码 PsExec \\computer -u username -p password command
通过图 3 所示的开关可以扩展这一用法。Figure 3 PsExec 开关
开关 说明
-a 指定处理器关联。
-c 指示是否应将应用程序复制到远程系统。
-d 指定在退出前不等待进程结束(不等待成功或失败的消息)。
-e 使用指定帐户的配置文件加载。
-f 即使远程系统上存在该应用程序也进行复制。确保运行当前(或特定)版本。
-i 在远程系统上以交互方式运行应用程序(如果想要某位最终用户看到该应用程序的任何用户界面,则必须采用这种模式)。
-l 以受限用户身份运行应用程序。删除管理员组令牌并且将进程权限降至用户组成员的权限级别。便于以最低权限运行高风险、面向 Internet 的应用程序。
-n 指定在与远程计算机连接失败之前等待的超时时间。
-priority 按指定的优先级运行进程。即,指定 Windows 应为给定任务所设的进程优先级(-low、-belownormal、-abovenormal、-high 或 –realtime)。
-s 使用系统帐户运行进程(便于运行 Regedit 来访问权限内的注册表项)。
-v 只在所复制应用程序为更高版本时才复制该应用程序。
-x 在 Winlogon 安全桌面上显示 UI(仅适用于本地系统)。
@file 针对文本文件中所指定的所有计算机运行该命令。
PsFile与 PsExec 相比,PsFile 是更加有所侧重的工具。具体来说,它用于检查谁在远程系统上打开了哪些文件。如果要在重新引导服务器前跟踪哪些文件处于打开状态,此工具会很有用。如果需要查明哪位用户锁定了该文件(或许是为防止进行编辑或删除),可以手动进行通知,或者通过 PsFile 将文件关闭。PsFile 的用法如下: 复制代码 PsFile \\computer -u username -p password
此命令只会返回远程系统上所打开的文件句柄的列表。除了标准用法之外,还可以向语句中添加 Id 参数,以指定要查找相关信息或者要关闭的文件的名称。其中还可以包括 -c 开关,表示将关闭 Id 参数所标识的文件。
PsGetSidPsGetSid 也是一个很有侧重的工具。它会告诉您计算机、用户或组的安全标识符 (SID)。如果要确保域中的系统不存在重复的 SID 或者只想在某个系统上验证所有用户或组的 SID,此工具会很有用。PsGetSid 的用法如下: 复制代码 PsGetSid \\computer -u username -p password account
请注意,account 可以指定用户、计算机或组。尽管 PSGetSid 的语法非常简单,但它仍提供了一些附加的参数。SID 参数用于指定具有指定 SID 的帐户(组或计算机),@file 用于针对指定文本文件中所列的所有计算机运行该命令。
PsInfoPsInfo 用于提供详细的系统信息。显然,这在针对多个远程系统编制脚本时最为有用,其输出内容会发送到某个文件(例如 Excel® 和数据库可以识别的 CSV 文件)。请注意,此实用程序的运行依据一个不同于大多数其他工具的重要概念:在默认情况下,如果不提供计算机名称,PsInfo 会尝试查询域中的所有计算机。PsInfo 的用法如下: 复制代码 PsInfo\\computer -u username -p password
虽然其语法简单,但也提供了几个附加的开关和参数,如图 4 所示Figure 4 PsInfo 开关
开关 说明
-h 显示所有 Windows 更新。
-s 显示系统上安装的所有应用程序。
-d 显示系统的磁盘/卷信息。
-c 以 CSV 格式输出结果。
-t 为 CSV 文件指定不同于默认值 \t 的分隔符。
Filter 仅显示与给定筛选器匹配的数据。
@file 针对指定文本文件中所列的所有计算机运行该命令。
PsKillPsKill 是用于在本地或远程系统上终止进程的有效实用程序。其用法非常简单,并且可以快速终止某个进程及其所有子进程。PsKill 的用法与上面介绍的其他工具非常类似: 复制代码 PsKill -t \\computer -u username -p password process id | process name
请注意,您可以指定要终止的进程 id 或进程名。
PsList我是一个 Process Explorer 迷,所以不大使用 PsList(有关详细信息,请参阅 microsoft.com/technet/sysinternals/ProcessesAndThreads/ProcessExplorer.mspx。)但由于 Process Explorer 没有远程版本,所以 PsList 理所当然成为 Process Explorer 一些主要功能的替代品。实际上,PsList 是在远程系统上运行的一个或多个进程的列表。PsList 的用法相当简单: 复制代码 PsList \\computer -u username -p password account
与其他工具一样,account 参数可以指定用户、计算机或组。其他参数如图 5 所示。Figure 5 PsList 开关
开关 说明
-t 显示线程级别的信息。
-m 提供每个进程的详细内存信息。
-x 显示进程、内存和线程信息。
-t 按进程树显示信息(考虑 Process Explorer 树视图)。
-s 在指定的秒数内,以任务管理器模式运行。这样可以相对实时地显示远程进程信息。
-r 指定在以任务管理器模式运行时的刷新频率(以秒计)。
name 显示以指定名称开始的进程的相关信息。
-e 与进程名称完全匹配。
pid 显示特定进程的相关信息。
PsList 功能强大且简单易用,您无需使用远程桌面即可相当详细地查看远程进程。在需要(例如您有必须进行控制的进程)时,可以利用此信息移到 PsKill 或 PsSuspend。
PsLoggedOnPsLoggedOn 背后的前提假定是不言自明的。它用于显示登录到系统中的用户。这可以是本地(交互式)登录或网络共享登录。与 PsFile 相似,此功能对于确定谁在使用您所需要维护的服务器是很有用的。其用法很简单: 复制代码 PsLoggedOn \\computer
PsLoggedOn 只有两个可选参数:-l 只显示本地登录(而不包括网络登录),-x 不包括登录时间。PsLoggedOn 尽管是一个基础性的工具,但它允许您轻松地查看到通常必须要通过搜索几个 Windows 位置才能获得的信息。
PsLogList作为最常用的实用程序之一,PsLogList 工具用于将 Windows 事件日志转储为文本格式,这些转储的日志进而再用于日志读取器、数据库或其他任何需要的地方。其主要的优点是将事件日志项从二进制格式转换为易于转换或自动处理的格式。(当然,在 Windows Vista™ 中,事件日志原本就有 XML 格式,但那不是我们今天要谈的话题。)PsLogList 的用法: 复制代码 PsLogList \\computer -u username -p password
此实用程序还提供了许多附加的开关和参数,如图 6 所示。Figure 6 PsLogList 开关
开关 说明
-a 仅转储所指定日期之后的事件。
-b 仅转储所指定日期之前的事件。
-c 在转储所需输出后永久清除事件日志。
-d 仅显示指定天数内的信息。
-e 排除具有指定事件 ID 的事件(最多可指定 10 个事件 ID)。
-f 筛选事件类型(警告、错误等)。
-g 将事件日志导出为 EVT 文件,需要指定 -c 开关。
-h 仅显示指定小时数内的信息。
-l 从指定的 EVT 文件转储。
-m 仅显示指定分钟数内的信息。
-n 仅显示最近的 n 个事件。
-o 仅显示来自给定源的事件(例如,-o SRService 表示显示 Windows System Restore Service 的事件)。
-q 排除来自给定源的事件(与 -o 相反)。
-r 颠倒转储顺序,即按从最早到最近的顺序转储日志事件。
-s 以分隔的字段在每行列出记录。
-t 为 -s 输出内容指定除逗号之外的分隔符。
-w 等待新事件,以实时地填充并转储。这仅适用于本地系统。
-x 从事件日志转储扩展数据。
eventlog 指定要转储的事件日志。System 为默认值。
@file 针对文本文件中所指定的所有计算机运行该命令。
Windows 事件日志可以是一个强大得惊人的诊断工具,但其奥妙在于使数据变得可以操作或合并。PsLogList 就是这神奇的力量。
PsPasswdPsPasswd 是一个简单而又强大的实用程序,其功能在某种程度上与 Net.exe 相同,但它还考虑到了远程可用性和自动化。 复制代码 PsPasswd\\computer -u username -p password Username Newpassword
您可以指定计算机,也可以不指定计算机(针对本地系统运行),如果将计算机指定为 \\*,则实用程序将针对当前域中的所有计算机运行。PsPasswd 只提供了一个附加参数:@file 用于针对文本文件中所指定的所有计算机运行该命令。同样,它也是一个非常基础性的实用程序,却能提供极强大的多系统功能。
PsService通过 PsService,您可以在网络的一个或多个系统上查看和编辑“服务控制管理器”(SCM) 信息,甚至可以在网络的各系统上搜索给定的服务名。 复制代码 PsService \\computer -u username -p password command options
运行 PsService 时,command 代表图 7 中所列的任一命令,options 用于指定应用于给定命令的属性。如果不提供附加命令开关,PsService 会完整地转储 SCM 信息。Figure 7 PsService 命令
命令 说明
query 查询给定的服务。
config 查询给定服务的配置信息。
setconfig 设置给定服务的配置信息。
start 启动服务。
stop 停止服务。
restart 重新启动(停止并启动)服务。
pause 暂停服务。
cont 恢复暂停的服务。
depend 显示哪些服务依赖于给定的服务。
find 在网络中查找服务的给定实例。
security 为给定服务提供安全信息。
因此,您可以将 PsService 视为 Services.msc 功能强大的远程命令行版本,只是它还允许您跨网络查找服务(可能具有潜在的危险)以及设置配置信息。
PsShutdownPsShutdown 是我所喜爱的另一个工具。尽管有人会说 Microsoft 中包含一个用于处理此任务的工具 (shutdown.exe),但它们的确是不同的。两者的主要区别在于 PsShutdown 具有以下功能:它可以关闭或重新启动远程系统。此外,它还可以将系统置为待机或休眠模式(而不仅仅是关闭或重新启动)、锁定系统以及在通过消息提示用户一段给定的时间后重新启动系统。 复制代码 PsShutdown \\computer -u username -p password
PsShutdown 也提供了许多附加参数,如图 8 所示。Figure 8 PsShutdown 开关
开关 说明
-a 中止 PsShutdown 所启动的、已在进行的关机进程。
-c 允许交互式用户中止关机进程。
-d 挂起计算机(待机)。
-e 关机原因代码。建议到 Microsoft 网站查找相关帮助,因为同时使用 PsShutdown 和内置的 shutdown.exe 时可能会发生问题。有关详细信息,请参阅 msdn2.microsoft.com/en-us/library/aa376885.aspx。
-f 强制终止所有运行中的应用程序。
-h 使计算机休眠。
-k 关闭计算机的电源(如果不支持关闭电源,则重新启动计算机)。
-l 锁定计算机。
-m 指定要向任何交互式用户显示的消息。
-n 指定在与远程计算机连接失败之前等待的超时时间。
-o 注销控制台用户。
-r 重新启动计算机。
-s 关机,但不关闭电源。
-t 运行关机命令之前的倒计时时间,或者距关机的具体时间。
-v 在关机前为用户显示消息。
@file 针对文本文件中所指定的所有计算机运行该命令。
您会发现,PsShutdown 是一个非常强大、可配置性强的系统电源控制实用程序,而且使用起来相对比较简单。
PsSuspend如果要暂时控制一个恶意进程,或者只是要在不丢失任何数据或应用程序上下文的情况下暂时中止对 CPU 占用率高的进程,PsSuspend 将不失为一个便利的实用程序。 复制代码 PsSuspend \\computer -u username -p password process ID
可以通过 PsList 获得进程 ID。挂起某个进程后,可使用 -r 开关进行恢复。请注意,Process Explorer 也会实现挂起和恢复某个进程的概念,但只是在本地。而 PsSuspend 可以通过远程及本地方式挂起和恢复进程,这显然比 Process Explorer 中内置的实现方式更具优势。
结束语我发现 PsTools 套件是一个价值不可估量的实用程序集。连同其余的 Sysinternals 实用程序(即,Regmon、Filemon、Process Explorer 以及现在的 Process Monitor)一起,PsTools 是我在所有系统上重新安装 Windows 时第一批放入路径变量中的程序。如果您以前不了解 PsTools,我希望本专栏能让您对它有所熟悉;如果您以前就知道 PsTools,我也希望本专栏能让您对这些工具有进一步的了解。当然,我要多谢 Mark Russinovich 这些年来一直免费提供这些工具,并帮我完成本专栏的内容。
Wes Miller 是德克萨斯州奥斯汀市 Pluck 公司 (www.pluck.com) 的一位开发经理。在这之前,Wes 在位于奥斯汀市的 Winternals Software 公司任职,并曾在微软担任 Windows 程序经理和产品经理。Wes 的联系方式如下:technet@getwired.com。
http://technet.microsoft.com/zh-cn/magazine/2007.03.desktopfiles.aspx 回复 5# haijie1223
老大很强, 说实话我很菜,这些东西对我来说是建很困扰的事情,我只会一简单的AU3脚本, 提这个问题是希望能用AU3做一个服务器的安全防护,(尽管不够安全),但是能防御一些被入侵的情况,只是自己只会一点点 AU3, 所以只能依靠 au3论坛的各位高人指教了. 目前在监控客户端IP和计算机名,及断开回话的这个问题,是困扰我很久的一个问题. 其他的一些辅助功能我自己已经解决, 所以在此希望各位AU3老大 能指教 我把这个功能 完成, 谢谢啦.
你贴出的这些内容可能对我来说 太高深,所以看的一头雾水, 但我希望我能在今天把他仔细的看一下,或许能了解一些 问题的解决办法,. 不是给你方法了?添加用户到组的方法多了去了,你运行我的代码了吗?你试我的想法了吗?好吧,算了。 回复 7# 502762378
谢谢,刚才给你回复完之后忙在点别的事情,你贴的那些内容 我现在正在看,感谢你的指教. 其实用QQ可以执行一系列远程自动化操作。
控制端向被控端发送指定的信息,然后执行脚本来通过qq返回IP地址和计算机名等操作。
我就是用qq发送指令来控制我的远程下载机的. 其实用QQ可以执行一系列远程自动化操作。
控制端向被控端发送指定的信息,然后执行脚本来通过qq返回IP地址 ...
东京恶魔 发表于 2012-4-12 14:28 http://www.autoitx.com/images/common/back.gif
可能是我表达有问题.,我的最终目的是要在服务器上运行一个用AU3写的监控程序,当有人通过mstsc(或其他)连接服务器时,判断是否在允许列表内,不在的话就自动断开连接. 马克,不然再这论坛混不下去 本帖最后由 shqf 于 2012-5-11 17:07 编辑
那4楼的是好方法呀。远程能登录的用户必定是服务器上的一个用户,既然你不想让他远程桌面登录,就在服务器上不给它远程桌面登录的权限呀。 回复 12# shqf
administrator 是默认的存在的用户,同时可能存在其他用户名,我现在是想实现这样一个功能,比如我的电脑计算机名是PC-A,我只让PC-A可以登录这台计算机,其他计算机名都不能访问,同时希望可以增加对IP地址的判断。 回复 12# shqf
administrator 是默认的存在的用户,同时可能存在其他用户名,我现在是想实现这样一个功能,比如我的电脑计算机名是PC-A,我只让PC-A可以登录这台计算机,其他计算机名都不能访问,同时希望可以增加对IP地址的判断。 回复 12# shqf
administrator 是默认的存在的用户,同时可能存在其他用户名,我现在是想实现这样一个功能,比如我的电脑计算机名是PC-A,我只让PC-A可以登录这台计算机,其他计算机名都不能访问,同时希望可以增加对IP地址的判断。
页:
[1]
2