Java Security Manager SocketPermission非常慢的解析,连接
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java Security Manager SocketPermission非常慢的解析,连接,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4134字,纯文字阅读大概需要6分钟。
内容图文
![Java Security Manager SocketPermission非常慢的解析,连接](/upload/InfoBanner/zyjiaocheng/678/4a932504ede9463d9d0fb35a1ff572bb.jpg)
这个问题让我ing了几天.对于特定网络上的站点(恰好是DDOS迁移提供程序),与其他站点相比,安全管理checkConnect调用似乎要花费非常非常长的时间.
该网络上的站点是否有任何办法可以阻止安全管理器的访问检查?有我不知道的配置吗?我要发疯了吗?
这是一个演示的测试用例…
package com.test;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class SSCCE
{
static class StatCounter
{
boolean security;
String host;
long avg;
long total;
int iterations;
StatCounter(String host)
{
this.host = host;
}
@Override
public String toString()
{
return host + "\t\titerations (" + iterations + ")\t\tavg (" + avg + ")\t\tsecurity (" + security + ")";
}
void inc(long time)
{
++iterations;
total += time;
}
void avg()
{
avg = total / (long)iterations;
}
void reset()
{
total = 0;
iterations = 0;
}
}
static String[] hosts = new String[]
{
"google.com",
"youtube.com",
"oracle.com",
"random.org",
"phpbb.com",
"staminus.net",
// MUCH Higher Latency with site below (only with security manager enabled?)
"blacklotus.net"
};
public static void main(String[] argv) throws Throwable
{
int iterations = Integer.parseInt(argv[0]);
List<StatCounter> counters = new ArrayList<StatCounter>(hosts.length);
for(String host : hosts)
{
counters.add(new StatCounter(host));
}
System.out.println("Running Without Security");
for(int i = 0; i < iterations; ++i)
{
for(StatCounter counter : counters)
{
long then = System.currentTimeMillis();
new Socket(counter.host, 80).close();
counter.inc(System.currentTimeMillis() - then);
}
}
for(StatCounter counter : counters)
{
counter.avg();
System.out.println(counter);
counter.reset();
counter.security = true;
}
System.setProperty("java.security.policy", "sscce.policy");
System.setSecurityManager(new SecurityManager());
System.out.println("\n\nRunning With Security");
for(int i = 0; i < iterations; ++i)
{
for(StatCounter counter : counters)
{
long then = System.currentTimeMillis();
new Socket(counter.host, 80).close();
counter.inc(System.currentTimeMillis() - then);
}
}
for(StatCounter counter : counters)
{
counter.avg();
System.out.println(counter);
}
}
}
政策文件
grant
{
permission java.net.SocketPermission "google.com:80", "connect";
permission java.net.SocketPermission "youtube.com:80", "connect";
permission java.net.SocketPermission "oracle.com:80", "connect";
permission java.net.SocketPermission "random.org:80", "connect";
permission java.net.SocketPermission "phpbb.com:80", "connect";
permission java.net.SocketPermission "staminus.net:80", "connect";
permission java.net.SocketPermission "blacklotus.net:80", "connect";
};
与运行
java com.test.SSCCE
示例输出
Running Without Security
google.com iterations (4) avg (65) security (false)
youtube.com iterations (4) avg (61) security (false)
oracle.com iterations (4) avg (104) security (false)
random.org iterations (4) avg (101) security (false)
phpbb.com iterations (4) avg (143) security (false)
staminus.net iterations (4) avg (137) security (false)
blacklotus.net iterations (4) avg (137) security (false)
Running With Security
google.com iterations (4) avg (261) security (true)
youtube.com iterations (4) avg (64) security (true)
oracle.com iterations (4) avg (103) security (true)
random.org iterations (4) avg (100) security (true)
phpbb.com iterations (4) avg (882) security (true)
staminus.net iterations (4) avg (303) security (true)
blacklotus.net iterations (4) avg (4669) security (true)
非常感谢您的投入.
>使用java.security.debug = all的控制台输出
http://pastebin.com/wNcAhSy2
据我所知,一切看起来都不错(除了看似网络延迟!)
解决方法:
我终于通过对JRE系统库进行逆向工程以及其他调试信息来跟踪了这种现象的根本原因.我能够追溯到本机方法的延迟原因
java.net.Inet4AddressImpl.getHostByAddr([B)Ljava.lang.String
事实证明,由于未知原因,无法从其IP地址解析有问题的主机,并且在超时后,调用方法将尝试另一条路由来返回有效的主机名.我已经使用几种基于Web的反向查找工具进行了检查,似乎blacklotus.net很有可能存在问题(或者可能是防止反向查找的功能?)
我希望这对遇到这种奇怪情况的其他人有所帮助. T负36小时,表壳关闭.
内容总结
以上是互联网集市为您收集整理的Java Security Manager SocketPermission非常慢的解析,连接全部内容,希望文章能够帮你解决Java Security Manager SocketPermission非常慢的解析,连接所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。