0

场景:我们是一个由 22 名成员组成的团队,他们每天使用自己的唯一 ID 登录到他们的本地机器,然后使用一组登录名连接到远程机器。

这里用于连接远程机器的登录名不是唯一的..我的意思是可以用相同的用户名连接多台机器..

在一行中,22 台远程机器将只有 5-6 个登录名,供 22 个成员使用。

问题:由于远程机器不是专用于每个员工。每天我们需要向所有组发送一封邮件,询问谁连接到特定的远程机器。如果有人回答是。我们会要求他们断开连接。 .

我想使用java开发一个小工具,它在每台机器上运行并显示哪台机器被哪台机器使用..

该站点中提到的代码很有用,但没有指定谁使用了该登录名?链接: http: //lazynetworkadmin.com/content/view/34/6/

我希望我说清楚了:)

请指导我如何进行?..你认为这可能吗?

注意:忘了提到操作系统,它是:Windows XP

4

2 回答 2

1

在远程机器上,您可以运行netstat程序,它会输出如下内容:

C:\> netstat -n | find ":80"
  TCP    192.168.1.33:1930      209.85.129.190:80      ESTABLISHED
  TCP    192.168.1.33:2749      74.125.39.139:80       ESTABLISHED
  TCP    192.168.1.33:2861      74.125.171.167:80      TIME_WAIT

从此输出中,您可以看到已建立的所有网络连接。在第三列中,您可以看到另一台主机的 IP 地址和端口。唯一保留包含“:80”的find行(在我的情况下是我连接到的所有远程HTTP主机)。由于您知道远程主机将连接到的端口,因此您可以按该端口号进行过滤。第三列将包含连接到该主机的所有计算机的 IP 地址和端口。

从IP地址应该很容易找出它是谁的计算机。

更新:

当您想使用 Java 时,应该直截了当地做什么:

  1. 运行netstat -n命令。
  2. 将输出捕获在List<String>.
  3. 将每一行分成单词。
  4. 只保留那些以word[0]is TCPword[1]:3389words[3]is结尾的行ESTABLISHED
  5. 在冒号处拆分word[2]这些行。第一个元素是 IP 地址。
  6. 将这些 IP 地址的列表报告给中央服务器。

在中央服务器上,有一个可以通过 Web 服务器访问的小程序:

  1. 服务器保留一个活动连接列表。每个都由远程主机、客户端主机和上次更新的时间戳组成。
  2. 接受来自远程机器的传入连接。
  3. 从一个连接接收客户端 IP 地址列表。
  4. 从“活动列表”中删除从该 IP 报告的所有客户端 IP 地址。
  5. 显示结果列表。

例如:

  • 最初,活动连接列表是空的。
  • remote0192.168.0.33,192.168.0.35作为其活动客户端发送。
  • 活动连接列表现在包含remote0:192.168.0.33, remote0:192.168.0.35
  • 一段时间后,remote0发送 ``(一个空响应)作为它的活动客户端。
  • 现在活动连接列表也是空的。

因此,Web 服务器需要处理两个 URL:

  • /connections/list用于列出所有活动连接
  • /connections/update用于更新单个远程主机的连接

听起来有点工作,但这当然是可行的。当它完成时,它对我来说非常有用。

于 2010-07-27T22:18:11.453 回答
0

通过本地代理。然后代理知道哪些连接是活动的。

于 2010-07-27T08:08:30.790 回答