- 浏览: 753224 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lgh1992314:
a offset: 26b offset: 24c offse ...
java jvm字节占用空间分析 -
ls0609:
语音实现在线听书http://blog.csdn.net/ls ...
Android 语音输入API使用 -
wangli61289:
http://viralpatel-net-tutorials ...
Android 语音输入API使用 -
zxjlwt:
学习了素人派http://surenpi.com
velocity宏加载顺序 -
tt5753:
谢啦........
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
1.windows下
1.1 在java中直接设置:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0");
java.security.Security.setProperty("networkaddress.cache.negative.ttl" , "0");
然后修改host文件的绑定直接就能生效。
1.2 通过反射修改jdk的DNS缓存,在windows下修改host之后也能直接生效。
public static void jdkDnsNoCache() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
Class clazz = java.net.InetAddress.class; final Field cacheField = clazz.getDeclaredField("addressCache"); cacheField.setAccessible(true); final Object o = cacheField.get(clazz); Class clazz2 = o.getClass(); final Field cacheMapField = clazz2.getDeclaredField("cache"); cacheMapField.setAccessible(true); final Map cacheMap = (Map)cacheMapField.get(o); AccessController.doPrivileged(new PrivilegedAction() { public Object run() { try{ synchronized(o){//同步是必须的,因为o可能会有多个线程同时访问修改。 // cacheMap.clear();//这步比较关键,用于清除原来的缓存 cacheMap.remove("www.baidu.com"); } }catch(Throwable te){ throw new RuntimeException(te); } return null; } }); }
2.linux下:
2.1除了在java中设置
java.security.Security.setProperty("networkaddress.cache.ttl" , "0");
java.security.Security.setProperty("networkaddress.cache.negative.ttl" , "0");
还需要启动一个脚本:执行这个脚本才能修改host文件后直接生效。 脚本执行间隔根据需求定。
#!/bin/sh
while [ true ] do /etc/init.d/nscd restart done
这个脚本也可以使用java 的runtime来执行。
public static String getTestUrlHtml(String url, String host, String ip) throws IOException{
java.security.Security.setProperty("networkaddress.cache.ttl" , "0"); java.security.Security.setProperty("networkaddress.cache.negative.ttl" , "0"); Process processTest = Runtime.getRuntime().exec("/etc/init.d/nscd restart"); addHostBinding(ip,host); String res = getResponseText(url); Process process = Runtime.getRuntime().exec("/etc/init.d/nscd restart"); //Process process2 = Runtime.getRuntime().exec("/etc/init.d/nscd restart"); deleteHostBinding(ip, host); System.err.println(getResponseText("http://www.baidu.com")); Process process3 = Runtime.getRuntime().exec("/etc/init.d/nscd restart"); process.destroy(); processTest.destroy(); process3.destroy(); return res; }
2.2 同样上面windows下通过反射修改jdk的DNS缓存,同样再执行下面这个脚本就ok了。
附上测试程序:
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Field; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.URL; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class HostUtil3 { public static final String hostFilePath="C:\\Windows\\System32\\drivers\\etc\\hosts"; // public static final String hostFilePath="/etc/hosts"; public static void addHostBinding(String ip, String host){ Map<String,String> hostToIpMap = readFromIpHostFile(); hostToIpMap.put(host, ip); writeIpHostToReader(hostToIpMap); } public static void deleteHostBinding(String ip, String host){ Map<String,String> hostToIpMap = readFromIpHostFile(); if(hostToIpMap != null && hostToIpMap.containsKey(host)){ hostToIpMap.remove(host); } writeIpHostToReader(hostToIpMap); } public static Map<String,String> readFromIpHostFile(){ Map<String,String> hostToIpMap = new HashMap<String,String>(); BufferedReader bufferReader= null; try { bufferReader = new BufferedReader(new FileReader(hostFilePath)); String str = null; while((str = bufferReader.readLine()) != null){ if(str != null){ String[] ipAndHost = str.split(" "); if(ipAndHost != null && ipAndHost.length == 2 && ipAndHost[0] != null && ipAndHost[0].charAt(0) != '#'){ hostToIpMap.put(ipAndHost[1], ipAndHost[0]); } } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try{ bufferReader.close(); }catch(Exception e){ } } return hostToIpMap; } public static void writeIpHostToReader(Map<String,String> hostToIpMap){ BufferedWriter bufferedWriter = null; try { bufferedWriter = new BufferedWriter(new FileWriter(hostFilePath)); Iterator<Entry<String,String>> iter = hostToIpMap.entrySet().iterator(); while(iter.hasNext()){ Entry<String,String> entry = iter.next(); bufferedWriter.write(entry.getValue() + " " + entry.getKey() + "\n"); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try{ bufferedWriter.close(); }catch(Exception e){ } } } /** * 请求接口数据并返回每一行的数据列表 * * @param queryUrl * @return */ public static String getResponseText(String queryUrl) { InputStream is = null; BufferedReader br = null; StringBuffer res = new StringBuffer(); try { URL url = new URL(queryUrl); HttpURLConnection httpUrlConn = (HttpURLConnection) url .openConnection(); httpUrlConn.setRequestMethod("GET"); httpUrlConn.setDoOutput(true); httpUrlConn.setConnectTimeout(2000); is = httpUrlConn.getInputStream(); br = new BufferedReader(new InputStreamReader(is, "utf-8")); String data = null; while ((data = br.readLine()) != null) { res.append(data + "\n"); } return res.toString(); } catch (IOException e) { } catch (Exception e) { } finally { if (br != null) { try { br.close(); } catch (IOException e) { } } } return null; } public static void jdkDnsNoCache() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{ Class clazz = java.net.InetAddress.class; final Field cacheField = clazz.getDeclaredField("addressCache"); cacheField.setAccessible(true); final Object o = cacheField.get(clazz); Class clazz2 = o.getClass(); final Field cacheMapField = clazz2.getDeclaredField("cache"); cacheMapField.setAccessible(true); final Map cacheMap = (Map)cacheMapField.get(o); AccessController.doPrivileged(new PrivilegedAction() { public Object run() { try{ synchronized(o){//同步是必须的,因为o可能会有多个线程同时访问修改。 // cacheMap.clear();//这步比较关键,用于清除原来的缓存 cacheMap.remove("www.baidu.com"); } }catch(Throwable te){ throw new RuntimeException(te); } return null; } }); } public static void test() throws IOException, InterruptedException{ addHostBinding("127.0.0.1","www.baidu.com"); System.err.println(getResponseText("http://www.baidu.com")); System.err.println("************************************************************"); deleteHostBinding("127.0.0.1","www.baidu.com"); try { jdkDnsNoCache(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } InetAddress address = InetAddress.getByName("www.baidu.com"); System.out.println(System.currentTimeMillis()+":::"+address.getHostAddress()); System.err.println(getResponseText("http://www.baidu.com")); } public static void main(String[] args) throws IOException, InterruptedException{ test(); // updateDNS(); } }
在windows下得输出:
null
************************************************************ 1319035631098:::119.75.217.56 <!doctype html><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><title>????????????? </title><style>html{overflow-y:auto}body{font:12px arial;text-align:center;background:#fff}body,p,form,ul,li{margin:0;padding:0;list-style:none}body,form,#fm{position:relative}td{text-align:left}img{border:0}a{color:#00c}a:active{color:#f60}#u{padding:7px 10px 3px 0;text-align:right}#m{width:680px;margin:0 auto}#nv{font-size:16px;margin:0 0 4px;text-align:left;text-indent:117px}#nv a,#nv b,.btn,#lk{font-size:14px}#fm{padding-left:90px;text-align:left}#kw{width:404px;height:22px;padding:4px 7px;padding:6px 7px 2px\9;font:16px arial;background:url(http://www.baidu.com/img/i-1.0.0.png) no-repeat -304px 0;_background-attachment:fixed;border:1px solid #cdcdcd;border-color:#9a9a9a #cdcdcd #cdcdcd #9a9a9a;vertical-align:top}.btn{width:95px;height:32px;padding:0;padding-top:2px\9;border:0;background:#ddd url(http://www.baidu.com/img/i-1.0.0.png) no-repeat;cursor:pointer}.btn_h{background-position:-100px 0}#kw,.btn_wr{margin:0 5px 0 0}.btn_wr{width:97px;height:34px;display:inline-block;background:url(http://www.baidu.com/img/i-1.0.0.png) no-repeat -202px 0;_top:1px;*position:relative}#lk{margin:33px 0}#lk span{font:14px "????"}#lm{height:60px}#lh{margin:16px 0 5px;word-spacing:3px}.tools{position:absolute;top:-4px;*top:10px;right:-13px;}#mHolder{width:62px;position:relative;z-index:296;display:none}#mCon{height:18px;line-height:18px;position:absolute;cursor:pointer;padding:0 18px 0 0;background:url(http://www.baidu.com/img/bg-1.0.0.gif) no-repeat right -134px;background-position:right -136px\9}#mCon span{color:#00c;cursor:default;display:block}#mCon .hw{text-decoration:underline;cursor:pointer}#mMenu{width:56px;border:1px solid #9a99ff;list-style:none;position:absolute;right:7px;top:28px;display:none;background:#fff}#mMenu a{width:100%;height:100%;display:block;line-height:22px;text-indent:6px;text-decoration:none}#mMenu a:hover{background:#d9e1f6}#mMenu .ln{height:1px;background:#ccf;overflow:hidden;margin:2px;font-size:1px;line-height:1px}#cp,#cp a{color:#77c}#sh{display:none;behavior:url(#default#homepage)}</style> </head> <body><div id="u"><a href="http://www.baidu.com/gaoji/preferences.html" name="tj_setting">????????</a> | <a href="http://passport.baidu.com/?login&tpl=mn" name="tj_login">???</a></div> <div id="m"><p id="lg"><img src="http://www.baidu.com/img/baidu_sylogo1.gif" width="270" height="129" usemap="#mp"><map name="mp"><area shape="rect" coords="40,25,230,95" href="http://hi.baidu.com/baidu/" target="_blank" title="?????? ??????" ></map></p><p id="nv"><a href="http://news.baidu.com">?? ??</a>??<b>?? ?</b>??<a href="http://tieba.baidu.com">?? ??</a>??<a href="http://zhidao.baidu.com">? ??</a>??<a href="http://mp3.baidu.com">MP3</a>??<a href="http://image.baidu.com">? ?</a>??<a href="http://video.baidu.com">?? ?</a>??<a href="http://map.baidu.com">?? ?</a></p><div id="fm"><form name="f" action="/s"><input type="text" name="wd" id="kw" maxlength="100"><input type="hidden" name="rsv_bp" value="0"><input type="hidden" name="rsv_spt" value="3"><span class="btn_wr"><input type="submit" value="??????" id="su" class="btn" onmousedown="this.className='btn btn_h'" onmouseout="this.className='btn'"></span></form><span class="tools"><span id="mHolder"><div id="mCon"><span>????</span></div></span></span><ul id="mMenu"><li><a href="#" name="ime_hw">??д</a></li><li><a href="#" name="ime_py">???</a></li><li class="ln"></li><li><a href="#" name="ime_cl">???</a></li></ul></div> <p id="lk"><a href="http://hi.baidu.com">???</a>??<a href="http://baike.baidu.com">???</a>??<a href="http://www.hao123.com">hao123</a><span> | <a href="/more/">???>></a></span></p><p id="lm"></p><p><a id="sh" onClick="this.setHomePage('http://www.baidu.com')" href="http://utility.baidu.com/traf/click.php?id=215&url=http://www.baidu.com" onmousedown="return ns_c({'fm':'behs','tab':'homepage','pos':0})">??????????</a></p> <p id="lh"><a href="http://e.baidu.com/?refer=888">?????????</a> | <a href="http://top.baidu.com">?????????</a> | <a href="http://home.baidu.com">??????</a> | <a href="http://ir.baidu.com">About Baidu</a></p><p id="cp">©2011 Baidu <a href="/duty/">?????????</a> <a href="http://www.miibeian.gov.cn" target="_blank">??ICP?030173??</a> <img src="http://gimg.baidu.com/img/gs.gif"></p></div></body> <script>var w=window,d=document,n=navigator,k=d.f.wd,a=d.getElementById("nv").getElementsByTagName("a"),isIE=n.userAgent.indexOf("MSIE")!=-1&&!window.opera,sh=d.getElementById("sh");if(isIE&&sh&&!sh.isHomePage("http://www.baidu.com")){sh.style.display="inline"}for(var i=0;i<a.length;i++){a[i].onclick=function(){if(k.value.length>0){var C=this,A=C.href,B=encodeURIComponent(k.value);if(A.indexOf("q=")!=-1){C.href=A.replace(/q=[^&\x24]*/,"q="+B)}else{this.href+="?q="+B}}}}(function(){if(/q=([^&]+)/.test(location.search)){k.value=decodeURIComponent(RegExp["\x241"])}})();if(n.cookieEnabled&&!/sug?=0/.test(d.cookie)){d.write("<script src=http://www.baidu.com/js/bdsug.js?v=1.0.3.0><\/script>")}function addEV(C,B,A){if(w.attachEvent){C.attachEvent("on"+B,A)}else{if(w.addEventListener){C.addEventListener(B,A,false)}}}function G(A){return d.getElementById(A)}function ns_c(E){var F=encodeURIComponent(window.document.location.href),D="",A="",B="",C=window["BD_PS_C"+(new Date()).getTime()]=new Image();for(v in E){A=E[v];D+=v+"="+A+"&"}B="&mu="+F;C.src="http://nsclick.baidu.com/v.gif?pid=201&pj=www&"+D+"path="+F+"&t="+new Date().getTime();return true}if(/\bbdime=[12]/.test(d.cookie)){document.write("<script src=http://www.baidu.com/cache/ime/js/openime-1.0.0.js><\/script>")}(function(){var B=G("user"),A=G("userMenu");if(B&&A){addEV(B,"click",function(C){A.style.display=A.style.display=="block"?"none":"block";window.event?C.cancelBubble=true:C.stopPropagation()});addEV(document,"click",function(){A.style.display="none"})}})();(function(){var E=G("u").getElementsByTagName("a"),C=G("nv").getElementsByTagName("a"),I=G("lk").getElementsByTagName("a"),B="";var A=["news","tieba","zhidao","mp3","img","video","map"];var H=["hi","baike","hao123","more"];if(G("un")&&G("un").innerHTML!=""){B=G("un").innerHTML}function D(J){addEV(J,"mousedown",function(L){var L=L||window.event;var K=L.target||L.srcElement;ns_c({fm:"behs",tab:K.name||"tj_user",un:encodeURIComponent(B)})})}for(var F=0;F<E.length;F++){D(E[F])}for(var F=0;F<C.length;F++){C[F].name="tj_"+A[F];D(C[F])}for(var F=0;F<I.length;F++){I[F].name="tj_"+H[F];D(I[F])}})();addEV(w,"load",function(){k.focus()});w.onunload=function(){};</script> <script type="text/javascript" src="http://www.baidu.com/cache/hps/js/hps-1.1.1.js"></script> </html><!--6f1d70970a531a5f-->
评论
你能删除了吗?
发表评论
-
对字符串进行验证之前先进行规范化
2013-09-17 23:18 13947对字符串进行验证之前先进行规范化 应用系统中经常对字 ... -
使用telnet连接到基于spring的应用上执行容器中的bean的任意方法
2013-08-08 09:17 1471使用telnet连接到基于spring的应用上执行容器中 ... -
jdk7和8的一些新特性介绍
2013-07-06 16:07 10110更多ppt内容请查看:htt ... -
java对于接口和抽象类的代理实现,不需要有具体实现类
2013-06-12 09:50 2952原文链接:http://www.javaarch.net/j ... -
dig命令详解
2013-06-06 12:28 1277原文链接:http://www.javaarch.net/ ... -
lsof 命令详解
2013-06-06 12:28 1232原文链接:http://www.javaarch.net/ ... -
Java EE 7中对WebSocket 1.0的支持
2013-06-05 09:27 3837原文链接:http://www.javaarch.n ... -
如何快速是DNS修改生效
2013-06-01 23:18 1779原文链接:http://www.javaarch.net/j ... -
java.net.SocketException: Too many open files问题分析及解决方案
2013-05-29 13:30 2353原文链接:http://www.javaarch.net/ ... -
Java Web使用swfobject调用flex图表
2013-05-28 19:05 1121Java Web使用swfobject调用 ... -
linux常用disk磁盘操作命令
2013-05-25 09:30 1134原文链接:http://www.javaarch.ne ... -
spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
2013-05-21 15:57 3332spring使用PropertyPlaceholderCon ... -
java国际化
2013-05-20 20:57 4472java国际化 本文来自:http://www.j ... -
RSS feeds with Java
2013-05-20 20:52 1214RSS feeds with Java 原文来自:htt ... -
使用ibatis将数据库从oracle迁移到mysql的几个修改点
2013-04-29 10:40 1674我们项目在公司的大战略下需要从oracle ... -
linux 网络操作相关命令
2013-04-22 23:12 1336#/bin/sh #查看http请求的header ... -
线上机器jvm dump分析脚本
2013-04-19 10:48 2905#!/bin/sh DUMP_PIDS=`p ... -
eclipse远程部署,静态文件实时同步插件
2013-04-06 20:18 5460eclipse 远程文件实时同步,eclipse远程 ... -
java价格处理的一个问题
2013-03-26 21:21 1829我们经常会处理一些价格,比如从运营上传的文件中将某 ... -
java 服务降级开关设计思路
2013-03-23 16:35 3764java 服务屏蔽开关系统,可以手工降级服务,关闭服 ...
相关推荐
然而,需要注意的是,如果你的网络环境使用了代理或者有其他特殊的DNS配置,可能还需要额外的步骤来确保DNS更改的即时生效。总之,理解DNS的工作原理和你的系统是如何处理DNS缓存的,将有助于你更高效地进行域名IP的...
完成上述配置后,记得重启Tomcat服务以使更改生效。 注意,为了安全起见,你可能还需要配置SSL证书来启用HTTPS,这在涉及到用户隐私数据传输时尤其重要。这需要在`<Connector>`元素中添加相关配置,并且可能需要...
在IT行业中,域名管理系统(DNS)是互联网服务的...同时,DNS更改可能需要一段时间(通常48小时)才能在全球范围内完全生效,这被称为DNS propagation。在此期间,耐心等待并检查你的设置是否按预期工作是非常必要的。
Tomcat,作为Apache软件基金会的一个开源项目,是Java Servlet和JavaServer Pages(JSP)的标准实现,广泛用于搭建Java Web应用程序。 在Tomcat中实现多域名绑定,主要涉及以下知识点: 1. **虚拟主机(Virtual ...
当我们有多个项目需要绑定到同一个域名时,我们可以在 <Host> 标签中添加多个 <Context> 标签,以实现多项目绑定。例如:<Host name=...
- 如果对`web.xml`或`lib`进行了修改,可能需要重新启动Tomcat才能使更改生效。 - 对于安全性较高的环境,建议使用HTTPS协议,此时需要配置SSL Connector。 - 需要在DNS服务器中正确配置域名解析,确保域名能够正确...
在当今的Web开发和部署中,Tomcat作为一款广泛使用的开源Java应用服务器,经常被用于运行Java Web应用。而在实际部署中,为了让用户能通过更友好、更直观的方式访问Web应用,通常需要将Web应用绑定到一个域名或子...
修改配置后,记得保存文件并重启Apache服务,使改动生效。重启命令根据操作系统不同而不同,例如在Linux系统中,可以使用`sudo systemctl restart apache2`或`sudo service apache2 restart`。 4. **DNS配置**: ...
配置域名绑定时,可以使用完全匹配、通配符或正则表达式来匹配请求头中的Host字段。 首先,可以通过在server块中列出具体的域名来实现完全匹配,例如: ```nginx server { listen 80 default_server; server_***;...
在当前的互联网环境下,Tomcat服务器作为一款应用广泛的开源Java Web服务器,是企业部署Java应用的主要选择之一。为了实现项目的高效部署和资源的最大化利用,有时需要在单个服务器上配置多个域名来对应不同的项目。...
若需要MAC-IP绑定,可在配置文件中添加`host`段,指定物理地址和固定IP地址。 三、DNS服务(Domain Name System) DNS服务的核心功能是将域名转换为IP地址。主配置文件`/etc/named.conf`,正向区域文件如`/var/...
在IT行业中,Tomcat是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web部分,包括Servlet和JSP规范。当你需要在同一台服务器上部署多个基于不同域名的应用时,就需要进行多域名配置。以下是对"tomcat多...
- `ServerName` 主服务器名称,用于响应DNS解析请求。 `<IfModule prefork.c>` 部分是关于Apache的预派生多进程模型(Prefork MPM)的配置,包括: - `StartServers` 初始启动的子进程数。 - `MinSpareServers` ...
Apache 2是世界上最流行的Web服务器软件之一,其强大的功能和灵活性使其成为托管网站和应用程序的首选。...希望这篇文章对你在配置Apache 2域名绑定时提供帮助。如果你在过程中遇到任何疑问,欢迎留言讨论,共同进步。
- 在IIS中添加相应的站点,并为其配置正确的DNS名称和IP地址绑定。 10. **添加映射文件**: - 在IIS中为每个站点添加映射文件,指定不同扩展名的处理程序。 - 例如,将.jsp文件的处理程序设置为ISAPI筛选器。 11...
DHCP (Dynamic Host Configuration Protocol) 是一种网络管理协议,它允许网络管理员自动分配或重新分配IP地址以及其他网络配置参数,如子网掩码、默认网关、DNS服务器等,给网络上的设备。在Linux系统中,配置DHCP...
修改配置后,需要重启Apache服务以使更改生效。在Linux环境下,可以使用以下命令: ``` sudo systemctl restart httpd ``` 6. **DNS配置**: 为了让用户可以通过域名访问各个站点,需要在DNS系统中为每个站点...
3. 为了使更改生效,需要重启Tomcat服务器。执行`bin/shutdown.sh`(Linux或Mac)或`bin/shutdown.bat`(Windows)停止Tomcat,然后执行`bin/startup.sh`或`bin/startup.bat`启动它。 4. 配置服务器防火墙规则和...
对策包括使用DNSSEC(DNS Security Extensions)进行签名验证,避免被篡改的DNS记录生效,以及定期更新DNS服务器的缓存清理恶意数据。 5. 综合防御策略: - 实施网络访问控制列表(ACLs)限制特定流量。 - 使用...
在企业级网络环境中,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器起着至关重要的作用。它能够自动为网络中的客户端分配IP地址及相关配置信息,简化了网络管理,提高了网络效率。本文将...