Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
72d6d0ac
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
3
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
72d6d0ac
编写于
10月 14, 2015
作者:
R
robm
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8135305: InetAddress.isReachable reports true when loopback interface is specified
Reviewed-by: michaelm
上级
41b349b4
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
91 addition
and
19 deletion
+91
-19
src/windows/native/java/net/Inet4AddressImpl.c
src/windows/native/java/net/Inet4AddressImpl.c
+51
-19
test/java/net/InetAddress/IsReachableViaLoopbackTest.java
test/java/net/InetAddress/IsReachableViaLoopbackTest.java
+40
-0
未找到文件。
src/windows/native/java/net/Inet4AddressImpl.c
浏览文件 @
72d6d0ac
...
...
@@ -299,8 +299,11 @@ Java_java_net_Inet4AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
* Returns true is an ECHO_REPLY is received, otherwise, false.
*/
static
jboolean
ping4
(
JNIEnv
*
env
,
unsigned
long
ipaddr
,
jint
timeout
)
{
ping4
(
JNIEnv
*
env
,
unsigned
long
src_addr
,
unsigned
long
dest_addr
,
jint
timeout
)
{
// See https://msdn.microsoft.com/en-us/library/aa366050%28VS.85%29.aspx
HANDLE
hIcmpFile
;
...
...
@@ -323,14 +326,29 @@ ping4(JNIEnv *env, unsigned long ipaddr, jint timeout) {
return
JNI_FALSE
;
}
dwRetVal
=
IcmpSendEcho
(
hIcmpFile
,
// HANDLE IcmpHandle,
ipaddr
,
// IPAddr DestinationAddress,
SendData
,
// LPVOID RequestData,
sizeof
(
SendData
),
// WORD RequestSize,
NULL
,
// PIP_OPTION_INFORMATION RequestOptions,
ReplyBuffer
,
// LPVOID ReplyBuffer,
ReplySize
,
// DWORD ReplySize,
timeout
);
// DWORD Timeout
if
(
src_addr
==
0
)
{
dwRetVal
=
IcmpSendEcho
(
hIcmpFile
,
// HANDLE IcmpHandle,
dest_addr
,
// IPAddr DestinationAddress,
SendData
,
// LPVOID RequestData,
sizeof
(
SendData
),
// WORD RequestSize,
NULL
,
// PIP_OPTION_INFORMATION RequestOptions,
ReplyBuffer
,
// LPVOID ReplyBuffer,
ReplySize
,
// DWORD ReplySize,
timeout
);
// DWORD Timeout
}
else
{
dwRetVal
=
IcmpSendEcho2Ex
(
hIcmpFile
,
// HANDLE IcmpHandle,
NULL
,
// HANDLE Event
NULL
,
// PIO_APC_ROUTINE ApcRoutine
NULL
,
// ApcContext
src_addr
,
// IPAddr SourceAddress,
dest_addr
,
// IPAddr DestinationAddress,
SendData
,
// LPVOID RequestData,
sizeof
(
SendData
),
// WORD RequestSize,
NULL
,
// PIP_OPTION_INFORMATION RequestOptions,
ReplyBuffer
,
// LPVOID ReplyBuffer,
ReplySize
,
// DWORD ReplySize,
timeout
);
// DWORD Timeout
}
free
(
ReplyBuffer
);
IcmpCloseHandle
(
hIcmpFile
);
...
...
@@ -353,9 +371,9 @@ Java_java_net_Inet4AddressImpl_isReachable0(JNIEnv *env, jobject this,
jint
timeout
,
jbyteArray
ifArray
,
jint
ttl
)
{
jint
addr
;
jint
src_addr
=
0
;
jint
dest_addr
=
0
;
jbyte
caddr
[
4
];
struct
sockaddr_in
him
;
int
sz
;
/**
...
...
@@ -365,13 +383,27 @@ Java_java_net_Inet4AddressImpl_isReachable0(JNIEnv *env, jobject this,
if
(
sz
!=
4
)
{
return
JNI_FALSE
;
}
memset
((
char
*
)
&
him
,
0
,
sizeof
(
him
));
memset
((
char
*
)
caddr
,
0
,
sizeof
(
caddr
));
(
*
env
)
->
GetByteArrayRegion
(
env
,
addrArray
,
0
,
4
,
caddr
);
addr
=
((
caddr
[
0
]
<<
24
)
&
0xff000000
);
addr
|=
((
caddr
[
1
]
<<
16
)
&
0xff0000
);
addr
|=
((
caddr
[
2
]
<<
8
)
&
0xff00
);
addr
|=
(
caddr
[
3
]
&
0xff
);
addr
=
htonl
(
addr
);
return
ping4
(
env
,
addr
,
timeout
);
dest_addr
=
((
caddr
[
0
]
<<
24
)
&
0xff000000
);
dest_addr
|=
((
caddr
[
1
]
<<
16
)
&
0xff0000
);
dest_addr
|=
((
caddr
[
2
]
<<
8
)
&
0xff00
);
dest_addr
|=
(
caddr
[
3
]
&
0xff
);
dest_addr
=
htonl
(
dest_addr
);
/**
* If a network interface was specified, let's convert its address
* as well.
*/
if
(
!
(
IS_NULL
(
ifArray
)))
{
memset
((
char
*
)
caddr
,
0
,
sizeof
(
caddr
));
(
*
env
)
->
GetByteArrayRegion
(
env
,
ifArray
,
0
,
4
,
caddr
);
src_addr
=
((
caddr
[
0
]
<<
24
)
&
0xff000000
);
src_addr
|=
((
caddr
[
1
]
<<
16
)
&
0xff0000
);
src_addr
|=
((
caddr
[
2
]
<<
8
)
&
0xff00
);
src_addr
|=
(
caddr
[
3
]
&
0xff
);
src_addr
=
htonl
(
src_addr
);
}
return
ping4
(
env
,
src_addr
,
dest_addr
,
timeout
);
}
test/java/net/InetAddress/IsReachableViaLoopbackTest.java
0 → 100644
浏览文件 @
72d6d0ac
import
java.io.*
;
import
java.net.*
;
import
java.util.*
;
/**
* @test
* @bug 8135305
* @summary ensure we can't ping external hosts via loopback if
*/
public
class
IsReachableViaLoopbackTest
{
public
static
void
main
(
String
[]
args
)
{
try
{
InetAddress
addr
=
InetAddress
.
getByName
(
"localhost"
);
InetAddress
remoteAddr
=
InetAddress
.
getByName
(
"bugs.openjdk.java.net"
);
if
(!
addr
.
isReachable
(
10000
))
throw
new
RuntimeException
(
"Localhost should always be reachable"
);
NetworkInterface
inf
=
NetworkInterface
.
getByInetAddress
(
addr
);
if
(
inf
!=
null
)
{
if
(!
addr
.
isReachable
(
inf
,
20
,
10000
))
{
throw
new
RuntimeException
(
"Localhost should always be reachable"
);
}
else
{
System
.
out
.
println
(
addr
+
" is reachable"
);
}
if
(
remoteAddr
.
isReachable
(
inf
,
20
,
10000
))
{
throw
new
RuntimeException
(
remoteAddr
+
" is reachable"
);
}
else
{
System
.
out
.
println
(
remoteAddr
+
" is NOT reachable"
);
}
}
else
{
System
.
out
.
println
(
"inf == null"
);
}
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
"Unexpected exception:"
+
e
);
}
System
.
out
.
println
(
"IsReachableViaLoopbackTest EXIT"
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录