开发一个工具来了解谁连接到远程机器?

时间:2010-07-27 06:30:20

标签: java remote-desktop remote-access

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

此处用于连接远程计算机的登录不是唯一的。我的意思是可以使用相同的用户名连接多台计算机。

在一行中,22台远程机器只有5到6次登录,22个成员使用这些登录。

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

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

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

我希望我明确指出:)

请指导我如何继续?你觉得这有可能吗?

注意:忘记提及操作系统,它是: Windows XP

2 个答案:

答案 0 :(得分: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地址和端口。 find只保留包含“:80”的行(在我的例子中是我连接的所有远程HTTP主机)。由于您知道远程主机将连接到的端口,因此您可以按该端口号进行过滤。然后,第三列将包含连接到此主机的所有计算机的IP地址和端口。

从IP地址可以很容易地找到它的计算机。

更新

由于你想使用Java,它应该是直截了当的做法:

  1. 运行netstat -n命令。
  2. List<String>
  3. 捕获输出
  4. 将每一行拆分为单词。
  5. 仅保留word[0]TCPword[1]:3389结尾且words[3]ESTABLISHED的行。
  6. 在冒号处拆分这些行的word[2]。第一个元素是IP地址。
  7. 将这些IP地址列表报告给中央服务器。
  8. 在中央服务器上,可以通过Web服务器访问一些小程序:

    1. 服务器保留活动连接列表。每个都包含远程主机,客户端主机以及上次更新的时间戳。
    2. 接受来自远程计算机的传入连接。
    3. 从一个连接接收客户端IP地址列表。
    4. 从“活动列表”中删除已从该IP报告的所有客户端IP地址。
    5. 显示结果列表。
    6. 例如:

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

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

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

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

答案 1 :(得分:0)

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