如题!!
用java如何在服务器上获得登录机器的机器名字
不受浏览器的限制和不受登录机器操作系统的限制
服务器是unix,linux的登录的机器有可能是windows的
也有可能是unix,linux的

解决方案 »

  1.   

    我现在用套接字获得了
    在用windowsd的IE做测试时
    可以获得但是
    放到服务器上就获得的是IP地址了
    不知道是什么原因
    有可能是浏览器也有可能是服务器的原因
      

  2.   

    nbtstat -A ip 用java执行这个命令即可推荐我的博客:http://blog.csdn.net/lihan6415151528/archive/2008/11/27/3393891.aspx关键代码:
    public static String readSystemStartTime() throws IOException, 
        InterruptedException { 
    Process process = Runtime.getRuntime().exec( 
            "cmd /c net statistics workstation"); 
    String startUpTime = ""; 
    BufferedReader bufferedReader = new BufferedReader( 
            new InputStreamReader(process.getInputStream())); 
    int i = 0; 
    String timeWith = ""; 
    while ((timeWith = bufferedReader.readLine()) != null) { 
        if (i == 3) { 
            System.out.println(timeWith); 
            //startUpTime = timeWith.substring(x,y); 
            startUpTime = timeWith; 
        } 
        i++; 

    process.waitFor(); return startUpTime; 

      

  3.   

    我认为你的需求无法实现
    HTTP是基于TCP的
    TCP是不管机器名的
      

  4.   

    先取到ip,然后用gethostBYADDR(ip地址)函数
      

  5.   

    在局域网内是可以实现IP地址和机器名字的互相转换的,但是如果在internet网上估计不行吧应该只能得到IP地址吧
      

  6.   

    同意,我刚测试过。就是这样的。import   java.net.InetAddress;   
    public   class   TestHost
    {   
    public static void main(String[]  args)  throws   Exception
     {   
        InetAddress  remoteip = InetAddress.getByName("10.254.1.218");  //自己电脑的IP   
        System.out.println(remoteip.getHostName());   
     }   
    }   
      这种方法只可以获取自己电脑的完整主机名,内网的、外网的都不可以获取。Java这样,JSP也一样。再说说6楼的大哥的,思路不错,不过那个命令只能获取内网的和自己电脑的完整主机名,我用那个命令获取我们学校的DNS服务器(Linux OS)获取不到。
    LZ可以找个公网空间测试一下6楼那位大哥的。另外,建议楼主再去搜搜JavaScript、VBScript的这方面的资料。往往编程语言无法实现的,那些个脚本语言就可以,这就与网络安全有关了,想想前几年流行的Html网页木马的制作原理把,好多都与脚本语言操作客户机上的ActiveX、WMI...控件有关,话又说回来了,互联网本来是与客户机是一个天上、一个地上的,天上的东西可以落到地上,地上的东西可以飞到天上(打个比方),两者就目前的状况来说是没法融为一体的。参考资料:
    《怎么通过IP地址获取机器名啊?》
    http://topic.csdn.net/t/20051030/18/4359933.html  (05年就有人这样问,当时问题没解决,估计现在也...)
    《javascript获取客户端网卡MAC地址和IP地址和计算机名》
    http://blog.csdn.net/flying_huang/archive/2007/03/16/1531190.aspx   (很老的方法了,反正我电脑上的WMI控件没启用,在IE中启用了ActiveX也不管用,LZ要想用这个貌似得让用户同意启用很多控件。
    查看WMI控件信息可以:在"我的电脑"上点右键,选择"管理",展开"服务和应用程序"菜单即可看到)
    另外LZ也可以搜搜这样的文章:
    《WMI漏洞抓大量肉鸡》我再说说我的想法:
    1.做一个浏览器插件,让客户打开你的网页时,就给出安装提示:来自xxx公司的xxx插件。像淘宝网的安全插件一样。
    2.把它做个一个类似网页木马的网页,打开网页,"木马"自动下载、自动执行。让一个程序在客户端为你服务。貌似很难,因为现在浏览器的漏洞好多都补上了,估计得依靠系统的漏洞了。我暑假的时候做过一个JSP网页木马生成器,当时自己的电脑开着Tomcat测试成功了,木马自动下载、下载完自动运行。可以我犯了一个反正的错误,那木马只会在我的电脑上运行,也就是只会在服务端运行,在客户端打开,就会在服务端运行,他丫的。总之,要实现他很难。
      

  7.   

    String ip=request.getRemoteAddr()这个函数可以获取ip地址
    InetAddress  remoteip = InetAddress.getByName(ip)就这样应该可以吧
      

  8.   

    Linux与windows 互访总结(转)
    Author:29 Nov 2006Smb是实现linux和windows互访的一座桥梁,所以就先让我们来了解一下什么是smb,它的主要功能,通过smb实现共享的方法及配置。在最后我们还介绍了怎样使用mount命令来挂载windows共享目录。一. Samba 简介Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用;Samba 即可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件;不过对于Linux和Linux之间共享文件有更好的网络文件系统NFS,NFS也是需要架设服务器的;大家知道在Windows 网络中的每台机器即可以是文件共享的服务器,也可以同是客户机;Samba 也一样能行,比如一台Linux的机器,如果架了Samba Server 后,它能充当共享服务器,同时也能做为客户机来访问其它网络中的Windows共享文件系统,或其它Linux的Sabmba 服务器;我们在Windows网络中,看到共享文件功能知道,我们直接就可以把共享文件夹当做本地硬盘来使用。在Linux的中,就是通过Samba的向网络中的机器提供共享文件系统,也可以把网络中其它机器的共享挂载在本地机上使用;这在一定意义上说和FTP是不一样的。二. samba服务器的启动及服务器配置文件<一>Samba 有两个服务器,一个是smb,另一个是nmb;smb 是Samba 的主要启动服务器,让其它机器能知道此机器共享了什么;而nmb是解析用的,它把这台Linux机器所共享的工作组及在此工作组下的netbios name解析出来。如果不打开nmb服务器的话,只能通过IP来访问,也就是说在windows的IE浏览器中输入linux计算机的ip才能访问,例如:\192.168.0.1 est,而输入linux的计算机名却不能进行访问,比如:\wangyh est。所以在安装完samba服务器后必须启动smb的服务。下面是启动、查看、关闭smb服务器的命令1.一般的情况下,在RPM包的系统,如果是用RPM包安装的Samba ,一般可以通过如下的方式来启动Samba服务器;[root@localhost ~]# /etc/init.d/smb start2.对所有linux系统来说,通用的方法就是直接运行smb 和nmb;进入终端在root权限下把samba所在的目录敲到命令行里即可,但是您要知道smb和nmb所在的目录;如果是自己编译的Samba ,其存放的目录您应该知道;例如:samba所在的目录为 /usr/sbin/smbd(nmbd),启动smb输入如下:[root◎wangyh:/home/wangyh]#/usr/sbin/smbd[root◎wangyh:/home/wangyh]#/usr/sbin/nmbd3.启动完后还要检查一下samba服务器是否运行起来,查看命令如下:[root◎wangyh:/home/wangyh]#/pgrep smbd[root◎wangyh:/home/wangyh]#/pgrep nmbd4.关闭smb服务器,命令如下:[root◎wangyh:/home/wangyh]#/pkill smbd[root◎wangyh:/home/wangyh]#/pkill nmbd<二> smb的配置文件及服务器端和客户端的工具1.如果我们是用Linux发行版自带的Samba软件包,一般情况下Samba服务器的配置文件都位于/etc/samba目录中,服务器的主配置文件是smb.conf;也有用户配置文件 smbpasswd、smbusers和lmhosts等;还有一个文件是secrets.tdb,这个文件是Samba 服务器启动时自动生成的;2.在smb服务器中几个主要常用的服务器端工具为smbd、nmbd、smbpasswd;客户端为smbmount(在ubuntu l 6.06的内核中没有smbmount,所以它不支持这个命令,但可以用mount 加参数的形势来实现挂载),smbclient等。<三>实现 ubuntu linux 6.06 与windows系统的互访1.Windows 2000/xp/2003访问ubuntu linux 系统(已测试)第一步:安装samba,smbclient,smbfs命令: [root◎wangyh:/home/wangyh]# apt-get install samba[root◎wangyh:/home/wangyh]# apt-get install smbclient[root◎wangyh:/home/wangyh]# apt-get install smbfs第二步:更改smb.conf 文件对于新手来说在改之前最好将smb.conf文件进行备份。修改smb.conf文件用vi 或gedit命令都可以,如下所示:[root◎wangyh:/home/wangyh]# vi /etc/samba/smb.conf[root◎wangyh:/home/wangyh]# gedit /etc/samba/smb.conf在[global]这段中修改的内容如下:在[global]下面加入 两行doc charset=UTF-8unix charset=UTF-8workgroup=WORKGROUP在下面添加一行 netbios name=wangyh(这里填本机的计算机名)找到passwd program行将其改为passwd program=/etc/samba/smbpasswd找到 security行将其改为security=user找到[homes]段修改内容如下browseable=yeswritable=yes如果我们想在文件中创建共享文件夹,我们只需要在后面写入段[wangyh](共享文件)path=/home/wangyh(共享文件夹路径)browseable=yespublic=yes(在网上邻居中显示)writable=yes当然在ubuntu linux系统中点击系统->系统管理->共享文件夹,在这里选择共享的文件夹也是可以,设置完后,系统自动将你所设置的共享信息写入smb.conf文件中。注解:workgroup 就是Windows中显示的工作组;netbios name 就是在Windows中显示出来的计算机名;security 这是验证和登录方式,这里我们用了user ;验证方式有好多种,这是其中常用的一种;一种是share的验证方式,这种方式就是不用设置用户和密码了,但这种方式的安全级别很低,一般我们不采用这种方式;还有一种是server,server模式要求用户的认证由Samba服务器或NT服务器来完成。Browseable为是否可以浏览,browseable=yes,为可浏览,我们在工作组下就能看到共享文件夹。如果您browseable=no ,那末文件夹在工作组中就不显示。writeable 为是否可写,这里我设置为可写;第三步:添加smb用户,并设置linux用户密码这里要注意的是在添加smb用户之前,必须将其添加成ubuntu linux 用户,命令如下:1)添加成linux用户adduser –a heqing(heqing为用户名)enter new UNIX password:*****retype new UNIX password:*****剩下的项按提示输入即可2)添加成smb用户,并设置smb密码smbpasswd -a heqing(已存在的linux用户)NEW SMB passwd:******Retype NEW SMB passwd:******添加成功最后要说明的是heqing用户的linux用户密码可以与smb密码不相同第四步:设置windows客户端基本完成上面的配置后windows就可以访问ubuntu linux系统中的共享文件夹了,如果windows 在网上邻居或通过IE看不到的话,要查看两点在windows终端ping ubuntu linux系统的主机ip,如果可以ping通,看下一条。1) 查看windows防火墙中是否禁止其他计算机访问本机或是否允许ping入。如果可以,再看下一条。查看windows 用户设置中的guest用户是否禁用,如果禁用,将其解除即可。通过以上设置在windows计算机的网上邻居或IE都可以看到ubuntu linux系统的共享文件,并可以对其修改,粘贴新文件,复制原有文件等。2.Ubuntu linux 系统访问windows xp/2003/2000系统在我的测试过程中,实现ubuntu linux系统访问windows系统的方式有3种,我将这几种方式说明如下:第一种:用smb访问如果在ubuntu linux系统终端pingwindows主机的ip地址可以ping通,且windows计算机中有共享的文件夹,则打开位置下的网络服务器,点击界面中windows网络->workgroup,在workgroup组中就可以看到windows计算机名,双击会弹出输入用户名和密码的对话框,将我们上面设置smb的用户名和密码输入就可以进行访问。第二种:用ubuntu 系统自带的连接到服务器功能访问在位置中启动连接到服务器,在服务类型中选择“windows共享”,在服务器中输入windows计算机的ip地址或计算机名,点击连接,这样在系统桌面中就会显示一个连接到windows 计算机的文件卷。我们可以像访问ubuntu系统中的磁盘一样来访问它,同样在访问的时候要输入smb的用户名和密码。第三种:用mount’挂载windows的共享目录到本地磁盘首先要在ubuntu系统中建立一个挂载点,在这里我们建立的挂在点为 /mnt/wind同样在保证网络连接正常,且windows中有共享目录的前提下,进行一下操作以windows的ip为192.168.0.1,共享文件夹为share为例命令如下:mount -t smbfs –o username=wangyh,password=123456 //192.168.0.1/share /mnt/wind有是这样在访问的时候会出现中文乱码的问题,这样我们可以按下面命令来执行,可以解决这个问题mount -o smbfs -o iocharset=uft8,codepage=cp936,clmask=777,fmask=777,userneme=wangyh,password=123456 //192.168.0.1/share /mnt/wind注解:usename和password都为smb的用户和密码,如果要详细了解mount命令,使用man mount在终端查看详细用法第四种:使用smbclient 命令命令如下:smbclient –L //192.168.0.1/share -U wangyhpassword:输入smb用户wangyh的密码回车就可以用,用命令get下载文件,用put上传文件。注解:smbclient介绍:命令 说明?或help [command] 提供关于帮助或某个命令的帮助![shell command] 执行所用的SHELL命令,或让用户进入 SHELL提示符cd [目录] 切换到服务器端的指定目录,如未指定,则 smbclient 返回当前本地目录lcd [目录] 切换到客户端指定的目录;dir 或ls 列出当前目录下的文件;exit 或quit 退出smbclientget file1 file2 从服务器上下载file1,并以文件名file2存在本地机上;如果不想改名,可以把file2省略mget file1 file2 file3 filen 从服务器上下载多个文件;md或mkdir 目录 在服务器上创建目录rd或rmdir 目录 删除服务器上的目录put file1 [file2] 向服务器上传一个文件file1,传到服务器上改名为file2;mput file1 file2 filen 向服务器上传多个文件
      

  9.   

    System.getenv("COMPUTERNAME")
     talend上可以用这个方法,talend是eclipse的框架,你可以试试。