Java获取客户端IP、端口等信息

时间:2024.4.14

Java获取客户端IP、端口等信息.txt花前月下,不如花钱“日”下。叶子的离开,是因为风的追求还是树的不挽留?干掉熊猫,我就是国宝!别和我谈理想,戒了!Java获取客户端IP、端口等信息

String agent = request.getHeader("user-agent");

System.out.println(agent);

StringTokenizer st = new StringTokenizer(agent,";");

st.nextToken();

//得到用户的浏览器名

String userbrowser = st.nextToken();

System.out.println(userbrowser);

//得到用户的操作系统名

String useros = st.nextToken();

System.out.println(useros);

//取得本机的信息也可以这样:

//操作系统信息

System.out.println(System.getProperty("os.name")); //win2003竟然是win xp? System.out.println(System.getProperty("os.version"));

System.out.println(System.getProperty("os.arch"));

//瀏覽器:

System.out.println(request.getHeader("user-agent"));

//再送个红包

System.out.println(request.getHeader("user-agent")); //返回客户端浏览器的版本号、类型

System.out.println(request.getMethod()); //:获得客户端向服务器端传送数据的方法有get、post、put等类型

System.out.println(request.getRequestURI()); //:获得发出请求字符串的客户端地址

System.out.println(request.getServletPath()); //:获得客户端所请求的脚本文件的文件路径

System.out.println(request.getServerName()); //:获得服务器的名字

System.out.println(request.getServerPort()); //:获得服务器的端口号 System.out.println(request.getRemoteAddr()); //:获得客户端的ip地址

System.out.println(request.getRemoteHost()); //:获得客户端电脑的名字,若失败,则返回客户端电脑的ip地址

System.out.println(request.getProtocol()); //:

System.out.println(request.getHeaderNames()); //:返回所有request header的名字,结果集是一个enumeration(枚举)类的实例

System.out.println("Protocol: " + request.getProtocol());

System.out.println("Scheme: " + request.getScheme());

System.out.println("Server Name: " + request.getServerName() );

System.out.println("Server Port: " + request.getServerPort());

System.out.println("Protocol: " + request.getProtocol());

System.out.println("Server Info: " +

getServletConfig().getServletContext().getServerInfo());

System.out.println("Remote Addr: " + request.getRemoteAddr());

System.out.println("Remote Host: " + request.getRemoteHost());

System.out.println("Character Encoding: " + request.getCharacterEncoding()); System.out.println("Content Length: " + request.getContentLength()); System.out.println("Content Type: "+ request.getContentType());

System.out.println("Auth Type: " + request.getAuthType());

System.out.println("HTTP Method: " + request.getMethod());

System.out.println("Path Info: " + request.getPathInfo());

System.out.println("Path Trans: " + request.getPathTranslated());

System.out.println("Query String: " + request.getQueryString());

System.out.println("Remote User: " + request.getRemoteUser());

System.out.println("Session Id: " + request.getRequestedSessionId()); System.out.println("Request URI: " + request.getRequestURI());

System.out.println("Servlet Path: " + request.getServletPath());

System.out.println("Accept: " + request.getHeader("Accept"));

System.out.println("Host: " + request.getHeader("Host"));

System.out.println("Referer : " + request.getHeader("Referer"));

System.out.println("Accept-Language : " request.getHeader("Accept-Language"));

System.out.println("Accept-Encoding : " request.getHeader("Accept-Encoding"));

System.out.println("User-Agent : " + request.getHeader("User-Agent")); System.out.println("Connection : " + request.getHeader("Connection")); System.out.println("Cookie : " + request.getHeader("Cookie"));

System.out.println("Created : " + session.getCreationTime()); + +


第二篇:获取客户端IP


关于如何获取客户端的ip地址(获取ip的方法)name="request" public static string GetClientIP(HttpRequest request)

{ string ip;

if (request.ServerVariables["HTTP_VIA"] != null) // 服务器,using proxy { //得到真实的客户端地址

ip = request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); // Return real client IP. }

else//如果没有使用代理服务器或者得不到客户端的

{ //得到服务端的地址

ip = request.ServerVariables["REMOTE_ADDR"].ToString(); } return ip;

}

HTTP_X_FORWARDED_FOR获取客户端IP解析

Request.ServerVariables变量意义. http代理相关知识

Request.ServerVariables["HTTP_VIA"]---------可以获得用户内部的ip

Request.ServerVariables["HTTP_X_FORWARDED_FOR"]---------可以知道代理服务器的服务器名以及端口 Request.ServerVariables["REMOTE_ADDR"]-- 发出请求的远程主机的 IP 地址。

http代理相关知识

关键就在HTTP_X_FORWARDED_FOR

使用不同种类代理服务器,上面的信息会有所不同:

一、没有使用代理服务器的情况:

REMOTE_ADDR = 您的 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 您的真实 IP

这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 代理服务器 IP

隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 随机的 IP

告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示

在WEB开发中.我们可能都习惯使用下面的代码来获取客户端的IP地址:

-----------------C#代码----------------------------------------------------------------------

//优先取得代理IP

获取客户端IP

string IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

if (string.IsNullOrEmpty(IP)) {

获取客户端IP

//没有代理IP则直接取连接客户端IP

获取客户端IP

IP = Request.ServerVariables["REMOTE_ADDR"];

}

-----------------------------------------------------------------------------------------------

上面代码看来起是正常的.可惜这里却隐藏了一个隐患!!因为"HTTP_X_FORWARDED_FOR"这个值是通过获取HTTP头的"X_FORWARDED_FOR"属性取得.所以这里就提供给恶意破坏者一个办法:可以伪造IP地址!!

下面是测试代码:

--------------C#代码---------------------------------------------------------------------------

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/ip.aspx");

request.Headers.Add("X_FORWARDED_FOR", "0.0.0.0");

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

StreamReader stream = new StreamReader(response.GetResponseStream());

string IP = stream.ReadToEnd();

stream.Close();

response.Close();

request = null;

-----------------------------------------------------------------------------------------------

"ip.aspx"文件代码:

------------C#代码-----------------------------------------------------------------------------

获取客户端IP

Response.Clear();

//优先取得代理IP

string IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

if (string.IsNullOrEmpty(IP))

{

获取客户端IP

//没有代理IP则直接取客户端IP

IP = Request.ServerVariables["REMOTE_ADDR"];

}

Response.Write(IP);

Response.End();

------------------------------------------------------------------------------------------------

这样.当测试代码中去访问ip.aspx文件时."string IP = stream.ReadToEnd();"这段代码取到的IP数据就是"0.0.0.0"!!!!(呵.在真实情况下.这样的IP地址肯定不是我们想要的结果.而在有些投票系统中限制一个IP只能投1次票时,如果也是用类似的代码取得对方IP然后再判断的话.呵呵.限制就失效咯)...

或者如果你用上面代码获取IP地址后后面又不再进行数据判断的话也许还能更进一步进行数据破坏!! 比如你用类似上面的代码中获取IP地址就直接有这样的SQL语句:

string sql = "INSERT INTO (IP) VALUE ('" + IP + "')";

那么也许破坏者还可以进行SQL注入进行数据破坏!!

这样看来利用"HTTP_X_FORWARDED_FOR"这个属性获取客户端IP的方法就不再可取了.-_-# 但如果不用这种方法.那么那些真正使用了代理服务器的人.我们又不能再获取到他们的真实IP地址(因为某些代理服务器会在"X_FORWARDED_FOR"这个HTTP头里加上访问用户真正的IP地址).呵.现实就是这样,某种东西都有有得必有失...

更多相关推荐:
Java获取客户端IP、端口等信息

StringagentrequestgetHeaderquotuseragentquotSystemoutprintlnagentStringTokenizerstnewStringTokenizeragent...

简单端口扫描器java的设计与实现

简单端口扫描器java的设计与实现IPScan类的实现packagescanpraticeimportjavanetInetAddressimportjavanetSocketimportjavanetUnkn...

tomcat端口解决办法

lt一gt首先是JDK环境变量配置在Windows系统中1右击我的电脑gt属性gt高级gt环境变量gt系统变量2新建建立javahome变量值CProgramFilesJavajdk160016JDK安装目录3...

关于java下双tomcat配置

一JDK和TOMCAT配置1先安装java相关的jdk160182在网上下载apachetomcat7012压缩包3配置环境变量JAVAHOME为CProgramFilesJavajdk160034解压apac...

利用tomcat发布java WEB项目到外网的方法

首先写好项目放在没有中文的路径文件上tomcat也是路径不能有中文路径然后在tomcat的conf文件的serverxml中添加ltContextpathquotfirstquotdocBasequotGtex...

tomcat 端口被占用 Address already in use JVM_Bind

原创tomcat端口被占用AddressalreadyinuseJVMBind8080tomcat端口被占用的情况一已经启动了tomcat如果没有关闭再次启动就会报错二没有tomcat启动仍然报端口被占用可能是...

Java语言Socket接口用法详解

Socket接口用法详解在Java中基于TCP协议实现网络通信的类有两个在客户端的Socket类和在服务器端的ServerSocket类ServerSocket类的功能是建立一个Server并通过accept方...

Java运行机制与端口之间的关系

Java运行机制与端口之间的关系和Internet上的许多环境一样完整的Java应用环境实际上也是一个客户机服务器环境更确切地说是浏览器服务器模型即BrowserServer模型简称Web模型客户机服务器在分布...

JAVA获取服务器IP地址和端口

JAVA获取服务器IP地址和端口情形分析1ApacheTomcat集群2Weblogic集群3单机环境说明1tomcat中由于需要从System对象中读取自定义参数值需要在启动参数中加入Dhttpdruntim...

我的世界Minecraft教你如何用nat123和Teamviewer联机

想必Minecraft联机一直困扰着你Hamachi要翻墙注册水桶服操作麻烦花生壳不会用网上教程看不懂怎么办呢今天交给大家一个简单的联机技巧用Teamviewer和nat123联机Nat123是一个端口映射软件...

远程操作软件Teamviewer的使用方法

远程操作软件Teamviewer的使用方法Teamviewer使用方法最近由于朋友的电脑有些问题要远程协助他解决点问题使用了几款远程连接的软件如QQ远程协助Windows自带的远程桌面连接VNC等软件因为我们都...

teamviewer原理和阻止方法

teamviewerTeamViewer是一个非常简单好用的远程工具是一个在任何防火墙和NAT代理的后台用于远程控制桌面共享和文件传输的简单且快速的解决方案为了连接到另一台计算机只需要在两台计算机上同时运行Te...

java获取端口号(3篇)