Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cocktail-party-server
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
cocktail-party
cocktail-party-server
Commits
2043d1f4
提交
2043d1f4
authored
3月 27, 2022
作者:
RuoYi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化IP地址获取到多个的问题
上级
61034d4d
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
78 行增加
和
8 行删除
+78
-8
IpUtils.java
...mmon/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java
+78
-8
没有找到文件。
ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java
浏览文件 @
2043d1f4
...
...
@@ -4,7 +4,6 @@ import java.net.InetAddress;
import
java.net.UnknownHostException
;
import
javax.servlet.http.HttpServletRequest
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.html.EscapeUtil
;
/**
* 获取IP方法
...
...
@@ -13,6 +12,12 @@ import com.ruoyi.common.utils.html.EscapeUtil;
*/
public
class
IpUtils
{
/**
* 获取客户端IP
*
* @param request 请求对象
* @return IP地址
*/
public
static
String
getIpAddr
(
HttpServletRequest
request
)
{
if
(
request
==
null
)
...
...
@@ -41,15 +46,28 @@ public class IpUtils
{
ip
=
request
.
getRemoteAddr
();
}
return
"0:0:0:0:0:0:0:1"
.
equals
(
ip
)
?
"127.0.0.1"
:
EscapeUtil
.
clean
(
ip
);
return
"0:0:0:0:0:0:0:1"
.
equals
(
ip
)
?
"127.0.0.1"
:
getMultistageReverseProxyIp
(
ip
);
}
/**
* 检查是否为内部IP地址
*
* @param ip IP地址
* @return 结果
*/
public
static
boolean
internalIp
(
String
ip
)
{
byte
[]
addr
=
textToNumericFormatV4
(
ip
);
return
internalIp
(
addr
)
||
"127.0.0.1"
.
equals
(
ip
);
}
/**
* 检查是否为内部IP地址
*
* @param addr byte地址
* @return 结果
*/
private
static
boolean
internalIp
(
byte
[]
addr
)
{
if
(
StringUtils
.
isNull
(
addr
)
||
addr
.
length
<
2
)
...
...
@@ -110,7 +128,8 @@ public class IpUtils
{
case
1
:
l
=
Long
.
parseLong
(
elements
[
0
]);
if
((
l
<
0L
)
||
(
l
>
4294967295L
))
{
if
((
l
<
0L
)
||
(
l
>
4294967295L
))
{
return
null
;
}
bytes
[
0
]
=
(
byte
)
(
int
)
(
l
>>
24
&
0xFF
);
...
...
@@ -120,12 +139,14 @@ public class IpUtils
break
;
case
2
:
l
=
Integer
.
parseInt
(
elements
[
0
]);
if
((
l
<
0L
)
||
(
l
>
255L
))
{
if
((
l
<
0L
)
||
(
l
>
255L
))
{
return
null
;
}
bytes
[
0
]
=
(
byte
)
(
int
)
(
l
&
0xFF
);
l
=
Integer
.
parseInt
(
elements
[
1
]);
if
((
l
<
0L
)
||
(
l
>
16777215L
))
{
if
((
l
<
0L
)
||
(
l
>
16777215L
))
{
return
null
;
}
bytes
[
1
]
=
(
byte
)
(
int
)
(
l
>>
16
&
0xFF
);
...
...
@@ -136,13 +157,15 @@ public class IpUtils
for
(
i
=
0
;
i
<
2
;
++
i
)
{
l
=
Integer
.
parseInt
(
elements
[
i
]);
if
((
l
<
0L
)
||
(
l
>
255L
))
{
if
((
l
<
0L
)
||
(
l
>
255L
))
{
return
null
;
}
bytes
[
i
]
=
(
byte
)
(
int
)
(
l
&
0xFF
);
}
l
=
Integer
.
parseInt
(
elements
[
2
]);
if
((
l
<
0L
)
||
(
l
>
65535L
))
{
if
((
l
<
0L
)
||
(
l
>
65535L
))
{
return
null
;
}
bytes
[
2
]
=
(
byte
)
(
int
)
(
l
>>
8
&
0xFF
);
...
...
@@ -152,7 +175,8 @@ public class IpUtils
for
(
i
=
0
;
i
<
4
;
++
i
)
{
l
=
Integer
.
parseInt
(
elements
[
i
]);
if
((
l
<
0L
)
||
(
l
>
255L
))
{
if
((
l
<
0L
)
||
(
l
>
255L
))
{
return
null
;
}
bytes
[
i
]
=
(
byte
)
(
int
)
(
l
&
0xFF
);
...
...
@@ -169,6 +193,11 @@ public class IpUtils
return
bytes
;
}
/**
* 获取IP地址
*
* @return 本地IP地址
*/
public
static
String
getHostIp
()
{
try
...
...
@@ -181,6 +210,11 @@ public class IpUtils
return
"127.0.0.1"
;
}
/**
* 获取主机名
*
* @return 本地主机名
*/
public
static
String
getHostName
()
{
try
...
...
@@ -192,4 +226,39 @@ public class IpUtils
}
return
"未知"
;
}
/**
* 从多级反向代理中获得第一个非unknown IP地址
*
* @param ip 获得的IP地址
* @return 第一个非unknown IP地址
*/
public
static
String
getMultistageReverseProxyIp
(
String
ip
)
{
// 多级反向代理检测
if
(
ip
!=
null
&&
ip
.
indexOf
(
","
)
>
0
)
{
final
String
[]
ips
=
ip
.
trim
().
split
(
","
);
for
(
String
subIp
:
ips
)
{
if
(
false
==
isUnknown
(
subIp
))
{
ip
=
subIp
;
break
;
}
}
}
return
ip
;
}
/**
* 检测给定字符串是否为未知,多用于检测HTTP请求相关
*
* @param checkString 被检测的字符串
* @return 是否未知
*/
public
static
boolean
isUnknown
(
String
checkString
)
{
return
StringUtils
.
isBlank
(
checkString
)
||
"unknown"
.
equalsIgnoreCase
(
checkString
);
}
}
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论