首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在java中获取客户端系统的用户名和域名,因为我可以使用request.getRemoteHost获取ip地址和主机名

在Java中获取客户端系统的用户名和域名是一个比较复杂的问题,因为这些信息通常不会直接暴露给服务器端。然而,可以通过一些间接的方式来获取部分相关信息。

  1. 获取客户端的IP地址和主机名: 可以使用HttpServletRequest对象的getRemoteHost()方法获取客户端的IP地址和主机名。例如:
代码语言:txt
复制
String ipAddress = request.getRemoteAddr();
String hostName = request.getRemoteHost();

这种方式可以获取到客户端的IP地址和主机名,但无法直接获取到用户名和域名。

  1. 获取客户端的用户名和域名: 获取客户端的用户名和域名需要通过其他的方式,例如使用Java的Windows认证库(JCIFS)来实现。以下是一个示例代码:
代码语言:txt
复制
import jcifs.ntlmssp.NtlmFlags;
import jcifs.ntlmssp.Type1Message;
import jcifs.ntlmssp.Type2Message;
import jcifs.ntlmssp.Type3Message;
import jcifs.util.Base64;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

public class WindowsAuthUtils {
    public static String getWindowsUsername(HttpServletRequest request) throws IOException {
        String authorizationHeader = request.getHeader("Authorization");
        if (authorizationHeader != null && authorizationHeader.startsWith("NTLM ")) {
            byte[] msg = Base64.decode(authorizationHeader.substring(5));
            int off = 0, length, offset;
            if (msg[8] == 1) {
                byte[] type1 = new byte[32];
                System.arraycopy(msg, 0, type1, 0, 32);
                Type1Message type1Message = new Type1Message(type1);
                byte[] type2 = new byte[32];
                NtlmFlags flags = new NtlmFlags();
                flags.setFlag(4, true);
                flags.setFlag(1, true);
                flags.setFlag(2, true);
                Type2Message type2Message = new Type2Message(type2, flags, "domain", "server");
                return Base64.encode(type2Message.toByteArray());
            } else if (msg[8] == 3) {
                byte[] type3 = new byte[msg.length - 32];
                System.arraycopy(msg, 32, type3, 0, msg.length - 32);
                Type3Message type3Message = new Type3Message(type3);
                return type3Message.getUser();
            }
        }
        return null;
    }
}

上述代码使用了JCIFS库来解析NTLM协议,从而获取到Windows域中的用户名。请注意,这种方式只适用于Windows环境,并且需要客户端和服务器在同一个域中。

需要注意的是,获取客户端系统的用户名和域名是一个敏感操作,需要确保在合法的授权和安全的环境下进行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发之InetAddress基础入门简介与源码实例

最近在学习soket编程,看到有需要获取IP地址之类需求,所以就去看了下如何获取主机名IP地址。 其实就是需要用到一个类InetAddress。他是在java.net包下面。...InetAddress实例对象包含以数字形式保存IP地址,同时还可能包含主机名(如果使用主机名获取InetAddress实例,或者使用数字来构造,并且启用了反向主机名解析功能)。...InetAddress对域名进行解析是使用本地机器配置或者网络命名服务(域名系统(Domain Name System,DNS)网络信息服务(Network Information Service,...InetAddress类 该类代表ip地址,下面还有两个子类,分别是Inet4AddressInet6Address他们分别代表IPV4地址IPV6地址 该类没有构造器,可以通过它两个静态方法来获取...之所以要使用主机别名,是因为有时主机名可能比较复杂,Oracle官方网站主机名bigip-otn-portal.oracle.com,因此,为了使用户访问网站更方便,就增加了更简单主机别名, www.oracle.com

1.6K21

Tomcat 目录与配置文件

tomcat设置相关文件,常用配置文件主要包含 server.xml 可以设置端口号、设置域名IP、默认加载项目、请求编码 web.xml 可以设置tomcat支持文件类型 context.xml...()进行DNS查询来得到远程客户端实际主机名,若为false则不进行DNS查询,而是返回其ip地址 redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向端口号...acceptCount 指定当所有可以使用处理请求线程数都被使用时,可以放到处理队列请求数,超过这个数请求将不予处理 connectionTimeout 指定超时时间数(以毫秒为单位)...Engine(表示指定service请求处理引擎,接收处理来自Connector请求) defaultHost 指定缺省处理请求主机名,它至少与其中一个host元素name属性值是一样...,common方式记录远程主机名ip地址用户名,日期,第一行请求字符串,HTTP响应代码,发送字节数。

62820

JavaInetAddress使用(一):域名解析【享学Java

---- Java域名解析 Java提供InetAddress类(有Inet4AddressInet6Address两种实现),可以域名-IP进行正向、逆向解析。...InetAddress实例对象包含了IP地址,同时还可能包含主机名(如果使用主机名获取InetAddress实例,或者使用数字来构造,并且启用了反向主机名解析功能)。...InetAddress对域名进行解析是使用本地机器配置(域名系统DNS网络信息服务(Network Information Service,NIS))来实现。...比如此处对www.baidu.com解析得到地址是61.135.169.125,是因为在北京所以得到是北京一个IP地址 另外,为了方便你在windows里看到DNS缓存效果,你可以使用这两个命令来查看...---- 总结 本篇文章重点介绍了JavaInetAddress使用,它是对IP地址高层封装,是我们在进行网络编程必不可少一个API。

7K42

JavaInetAddress使用(二):获取本机IP地址正确姿势【享学Java

Windows系统hosts文件相类似,就是一个文本文件,里面存放一些IP域名对应关系(注意:都是先ip,后域名) 127.0.0.1 localhost # ::1表示时ipv6本地地址...为何在Linux下请你一定不要使用它来获取本机IP因为它就是简单读取/etc/hosts内容,所以它默认返回是127.0.0.1非常不靠谱,因此本方法十分不建议在生产上使用。...InetAddress其它实例方法们介绍 //获取主机名 public String getHostName(); //获取主机名(每次方法都解析DNS去获取主机名,而不从缓存获取) public...// (企业内部或个人内部局域网内部ip都应该在此三个网段内 因为内网用ipv4足够) // IPv6地区本地地址前12位是FEC,其他可以是任意取值,FED0:: FEF1:: 都是地区本地地址...// IPv4广播地址除了224.0.0.0第一个字节是239IP地址都是全球范围广播地址 // IPv6全球范围广播地址第一个字节是FF,第二个字节范围是0E ~ FE,其他字节可以是任意值

15.7K65

【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

: 当需要获取一个带 口令 保护文件时候, 需要使用 用户名 密码 才能获取该文件输入流, 如果遇到这种情况, 提示用户输入用户名 密码获取文件; 使用流程 1> 获取用户名密码 关键方法...: Internet唯一地址IP地址文本表现形式 : 有 IPv4 IPv6 两种格式; 主机名解析 :  -- 主机名IP地址解析 : 使用 本地配置信息 网络命名服务 实现, 特定命名服务默认情况下...与 IPv6 节点通信 : 本机需要 使用 相同地址数据结构, 相同套接字;  地址内部机制 : Java 只有一种 IPv4 地址, 任何输入 IPv6 形式 或者 IPv4 地址映射地址...地址就是 x:x:x:x:x:x:x:x , scope_id 指的是本地接口, eth0等; scope_id 指定方式 :  -- 数字标识符 : 必须是系统可以识别的特定接口 范围整数...: 该抽象类是实现套接字所有类通用超类, 创建客户端 服务器套接字都可以使用该超类; 3.

75130

InetAddress 解析

大家好,又见面了,是你们朋友全栈君。 IP地址分为IPv4 IPv6。 IPv4 4字节长ip称为IPv4.目前大部分ip都是IPv4。...例如:2001:1234:4567::c0a8:0a64可以写为 2001:1234:4567::192.168.10.100 ip地址对于计算机来说很不错,但位于人来说是个问题,于是就发明了域名系统(...DNS将人们可以记忆主机名与计算机可以记忆IP地址关联在一起。服务器至少有一个主机名客户端往往有一个主机名,但也可能没有,特别是有些客户端IP地址会在启动时候动态指定。...IP地址域名可以1:1、 1:多 、 多:1 、 多:多。 可以通过一个域名对应多个ip,来实现DNS负载均衡。...InetAddress类 java.net.IntAddress类是javaIP地址高层表示。

43720

小白都能玩转Nmap(一)

由于客户端在请求包时发送是广播包,所以存在一定风险。 1.2 Nmap广播DHCP请求包 DHCP请求是客户端为了通过DHCP服务获取IP地址而发送一种数据包。...在Nmap使用broadcast­igmp­discovery脚本可以发现目标主机上IGMP组播成员,并 获取有意义信息,版本、接口、源地址等。其中,语法格式如下所示: ?...二、DNS服务 2.1 网络基础服务DNS服务类 DNS(Domain Name System,域名系统作用就是将主机名解析为对应IP地址过程。...为了方便用户下次访问,DNS服务器会将解析过 主机名临时缓存。通过对DNS服务器进行扫描,可以获取到一些基本信息。版本、服 务器地址及缓存域名等。...从以上输出信息可以看到枚举出DNS服务器baidu.com所有域名域名对应IP地址

1.6K20

经验分享 | src信息收集

企业一些内部系统域名ip泄露。 企业网站工程代码、网站源码泄露,可以通过员工邮箱关键词查找,要注意日期,好几年大概率不收 了。...搜索主机名hostname:google.com #2.)搜索相关服务类,mysql #3.)城市类语法搜索在中国适用Apacheapp app:Apache country:CN #4.)搜索ip...(3)邮件服务器:一般邮件系统都在内部,没有经过CDN解析,通过目标网站用户注册或者RSS订阅功能,查看邮件,寻找邮件头中邮件服务器域名IP,ping这个邮件服务器域名,就可以获得目标的真实IP...(4)查看域名历史解析记录:也许目标很久之前没有使用CDN,所以可能会存在使用 CDN 前记录。所以可以通过网站https://www.netcraft.com 来观察域名IP历史记录。.../dhclient--网卡.lease MSSQL 1.)利用获取客户端和服务端主机名进行判断是否属于库站分离 #得到客户端主机名 select host_name(); #得服务端主机名 select

2K22

第78节:Java网络编程(上)

第78节:Java网络编程(上) 前言 网络编程涉及ip,端口,协议,tcpudp了解,对socket通信网络细节. 网络编程 ? 网络模型 OSI开放系统互连 ?...网络通讯要素 主机名ip地址是对应,默认主机名:localhost java.net 类 InetAddress java.lang.Object -> java.net.InetAddress...Serializable 该类表示互联网协议ip地址 ip地址ip使用32或128位无符号数字,它是一种低级协议,UDPTCP协议都是在它基础上构建....// 获取主机地址主机名 System.out.println(ip.getHostAddress() + ":" + ip.getHostName()); InetAddress...Internet协议属性 DNS域名解析服务器,宽带服务.配置DNS域名服务器主机,一个网址浏览要到它Ip地址,要找到,就会把ip地址放到DNS域名解析服务器,供给本地使用宽带连接使用,就可以在浏览器中找到

55620

网络协议笔记(一):HTTP协议基础知识

(它是一个基于 Web(HTTP)服务架构技术) 因为采用了 HTTP 协议传输数据,所以在 Web  Service 架构里服务器客户端可以采用不同操作系统或编程语言开发。...2、DNS      (1)“域名系统”(Domain Name System)用有意义名字来作为 IP 地址等价替代。      ...(4)想要使用 TCP/IP 协议来通信仍然要使用 IP 地址,所以需要把域名做一个转换,“映射”到它真实 IP,这就是所谓域名解析”。...:即访问该资源应当使用协议,在这里是“https”;            (2)、主机名:即互联网上主机标记,可以域名IP 地址,在这里是“www.cnblogs.com”;            ...5、代理     代理(proxy)是HTTP协议请求方应答方中间一个环节,作为“中转站”,既可以转发客户端请求,也可以转发服务器应答。

99920

17:网络编程

第一  概述 一、概述: 1、网络模型:OSI参考模型TCP/IP参考模型 2、网络通讯要素: 1)IP地址:InetAddress    .网络设备标识    .不易记忆,可用主机名 Internet...上主机有两种方式表示地址域名:www.baidu.com, IP 地址:202.108.35.210  InetAddress 类对象含有一个 Internet 主机地址域名IP地址:www.baidu.com...域名容易记忆,当在连接网络时输入一个主机域名后,域名服务器(DNS)负责将域名转化成IP地址,这样才能主机建立连接。 ...这就需要将主机名翻译成IP地址,即域名解析:DNS(存主机名IP相对应键值对) 在进行访问时候,会现在本地hosts文件(C:\WINDOWS\system32\drivers\etc\hosts...)找对应映射,若有,则直接返回请求,若无,则到公网映射列表即DNS找对应映射,找到后,将主机名对应IP地址返回给本机,本机通过这个IP地址找到对应服务器。

66450

几款永久免费内网穿透,好用且简单(内网穿透教程)

如果没有接触过这方面技术同学可以看一下这个图: 首先用法很简单,就是在界面上创建一条映射规则,填写应用名称要连接内网应用主机地址端口号。...填写自己要穿透应用名称端口号,如果需要获取原访问者IP最好是选择Web应用。提交提交就可以了。...();//获取计算机名 address.getHostAddress();//获取IP地址 byte[] bytes = address.getAddress();//获取字节数组形式IP地址,以点分隔四部分...4、主机2发送一个命令告诉主机A,要求与其他设备进行连接,请求协助进行穿透。 5、主机A接收到主机2命令之后,会返回主机1外网地址端口给主机2,同时把主机2外网地址端口发送给主机1。...可以看到客户端2对应端口不同,那是因为电信NAT问题,本地获取Ip是电信10开头内网地址,相当于在客户端2上层还进行了一次中继。

3.8K20

永久免费内网穿透很简单,一看就明白(长文)

如果没有接触过这方面技术同学可以看一下这个图: 首先用法很简单,就是在界面上创建一条映射规则,填写应用名称要连接内网应用主机地址端口号。...填写自己要穿透应用名称端口号,如果需要获取原访问者IP最好是选择Web应用。提交提交就可以了。...();//获取计算机名 address.getHostAddress();//获取IP地址 byte[] bytes = address.getAddress();//获取字节数组形式IP地址,以点分隔四部分...4、主机2发送一个命令告诉主机A,要求与其他设备进行连接,请求协助进行穿透。 5、主机A接收到主机2命令之后,会返回主机1外网地址端口给主机2,同时把主机2外网地址端口发送给主机1。...可以看到客户端2对应端口不同,那是因为电信NAT问题,本地获取Ip是电信10开头内网地址,相当于在客户端2上层还进行了一次中继。

1K20

cURL-7.72.0(scheme)

可以通过--proto-default选项将默认协议修改为HTTP以外其他协议。 用户名密码 scheme后面可以用户名密码。...例如,使用给定用户名密码列出FTP服务器目录内容: curl ftp://user:password@example.com/ 在URL显示用户名密码只是可选项,curl还允许在...主机名地址 URL主机名部分只是一个可以解析为数字IP地址名字,或者是数字IP地址本身。在指定数字IP地址时,可以使用IPv4地址。...curl http://127.0.0.1/ 如果使用是IPv6地址,则需要将其放在方括号。 curl http://[::1]/ 如果使用主机名系统解析器会将主机名转换为IP地址。...它们还会处理空格、编码地址等,但规范并没有说明这些事情应该由客户端完成。 地址栏只是一个简单界面,让人可以输入看到URI风格字符串。

1.2K30

Java—网络编程

2)端口号:计算机应用标号(代表一个应用程序),0-1024系统使用或保留端口,端口号占2个字节,所以有效端口0-65535. 3)通信协议:通信规则TCP,UDP 4)注意:在通信协议相同情况下...2.IP_端口_Scoket含义 2.1IP地址 IP地址用于标识网络上唯一一台计算机,共32位,4个8位二进制数组成 IP地址分为:IPv4IPv6 IPv4:“点分十进制表示法” IPv6...();//本机 System.out.println("获取主机Ip地址:"+ia.getHostAddress()); System.out.println("获取主机名称...("主机名称:"+ia3.getHostName()); //返回主机名称:如果 IP地址(61.135.253.15)不存在或者DNS(域名解析系统)不允许进行IP地址域名映射,就会直接返回一个...10.2解决方案 (1)多次聊天可以使用循环来解决 (2)先发后收问题可以使用线程来解决,一个接受数据线程,一个发送数据线程。

2.3K30
领券