原文是这个,Spring的JavaDoc里随便找到
This interface is implemented by objects that hold a number of bean definitions, each uniquely identified by a String name.
声音文件在这里:
http://bbs.cfan.com.cn/attachment.php?aid=242995
The abuse of greatness is when it disjoins remorse from power.
This interface is implemented by objects that hold a number of bean definitions, each uniquely identified by a String name.
/* * Copyrights (C) 2008 Bearice (Bearice@Gmail.com) * Release under GNU/GPL Version 2. */ package jmxtest; import java.rmi.registry.LocateRegistry; import java.util.HashMap; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectInstance; import javax.management.ObjectName; import javax.management.remote.JMXAuthenticator; import javax.management.remote.JMXConnectorServer; import javax.management.remote.JMXConnectorServerFactory; import javax.management.remote.JMXServiceURL; import javax.security.auth.Subject; /** * * @author Bearice */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { LocateRegistry.createRegistry(8877); MBeanServer server = MBeanServerFactory.createMBeanServer(); ObjectName helloName = new ObjectName("hello:name=hello"); HelloWorld hello = new HelloWorld(); HashMapprop = new HashMap (); prop.put(JMXConnectorServer.AUTHENTICATOR, new JMXAuthenticator() { public Subject authenticate(Object credentials) { System.out.println(credentials); if (credentials instanceof String) { if (credentials.equals("hello")) { return new Subject(); } } throw new SecurityException("not authicated"); } }); JMXConnectorServer cserver = JMXConnectorServerFactory.newJMXConnectorServer( new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8877/hello"), prop, server); cserver.start(); server.registerMBean(hello, helloName); for (ObjectInstance object : server.queryMBeans(null, null)) { System.out.println(object.getObjectName()); } System.out.println(hello); System.out.println("start....."); } }
/* * Copyrights (C) 2008 Bearice (Bearice@Gmail.com) * Release under GNU/GPL Version 2. */ package jmxtest; import java.util.HashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; import javax.management.JMX; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; /** * * @author Bearice */ public class Client { static HelloWorldMBean hello; public static void main(String[] args) throws Exception { final AtomicInteger count = new AtomicInteger(); HashMapprop = new HashMap (); prop.put(JMXConnector.CREDENTIALS, "hello"); final JMXConnector conn = JMXConnectorFactory.connect(new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8877/hello"), prop); conn.connect(); Runnable r = new Runnable() { public void run() { for (int i = 0; i < 10; i++) { try { final HelloWorldMBean hello = JMX.newMBeanProxy(conn.getMBeanServerConnection(), new ObjectName("hello:name=hello"), HelloWorldMBean.class); hello.setName("bearice"); hello.sayHello(); hello.getHelloString(); System.out.println(count.incrementAndGet()); Client.hello = hello; System.out.println(hello.equals(hello.getThis())); } catch (Exception ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } } }; Thread[] ts = new Thread[5]; for (int i = 0; i < ts.length; i++) { ts[i] = new Thread(r); ts[i].start(); } for (Thread t : ts) { t.join(); } System.out.println(hello.equals(hello.getThis())); System.out.println(hello.getId()); System.out.println(hello); } }
/* * Copyrights (C) 2008 Bearice (Bearice@Gmail.com) * Release under GNU/GPL Version 2. */ package jmxtest; import java.io.Serializable; /** * * @author Bearice */ public interface HelloWorldMBean extends Serializable { void setName(String name); String getName(); void sayHello(); String getHelloString(); int getId(); @Override String toString(); @Override int hashCode(); @Override boolean equals( Object obj); HelloWorldMBean getThis(); } class HelloWorld implements HelloWorldMBean, Serializable { static AtomicInteger count = new AtomicInteger(); private static final long serialVersionUID = 1627976932729278650L; int id = count.incrementAndGet(); String name; public synchronized void setName(String name) { this.name = name; } public synchronized String getName() { return name; } public synchronized void sayHello() { System.out.println(getHelloString()); } public synchronized String getHelloString() { return "Hello, " + name; } public synchronized int getId() { return id; } public HelloWorldMBean getThis() { return this; } }
本文从TCP/IP协议安全性的角度对中国防火墙系统的工作原理、工作特性和潜在的漏洞、造成的问题进行了详尽的调查和分析,并从多个角度提出了针对特别是防火长城这类利用TCP/IP协议进行攻击的反制措施。
Richard Clayton, Steven J. Murdoch, and Robert N. M. Watson*
University of Cambridge, Computer Laboratory, William Gates Building, 15 JJ Thomson Avenue, Cambridge CB3 0FD, United Kingdom
{richard.clayton, steven.murdoch, robert.watson}@cl.cam.ac.uk
* 致谢:我们感谢一位中国公民的帮助。(我们不会透露他的名字,他对我们实验的本质完全不知情,他的网页也不包含任何非法内容)他为我们理论思考提供了极为 可信的实践材料。Richard Clayton正为Intel Research资助的spamHINTS项目工作。Steven J. Murdoch由OpenNet Initiative资助。
摘要: 所谓“防火长城”之部分工作原理即是检测传输控制协议(TCP)报文中需要封锁的关键词。如果出现关键词,TCP复位报文(即RST标志置位的报文)即向 连接两端发送,连接随之关闭。而原报文完好通过防火墙,如果双方完全忽略防火墙的复位,那么连接仍可顺畅进行而防火墙失效。一旦连接被封锁,防火墙还会进 而尝试封锁双方的继发连接。后种特性可能被利用来对第三方进行拒绝服务攻击。
cam(53382) → china(http) [SYN] china(http) → cam(53382) [SYN, ACK] cam(53382) → china(http) [ACK] cam(53382) → china(http) GET / HTTP/1.0我们发出另一个请求,包含了一小段可能触发封禁的文字,当然这也很快发生了:china(http) → cam(53382) HTTP/1.1 200 OK (text/html) …… china(http) → cam(53382) ……其余页面内容 cam(53382) → china(http) [ACK] ……接下来这个页面就完整了。
cam(54190) → china(http) [SYN] china(http) → cam(54190) [SYN, ACK] TTL=39 cam(54190) → china(http) [ACK] cam(54190) → china(http) GET /?falun HTTP/1.0开头三个复位报文序列号对应了GET报文的序列号+1460和+4380(3 × 1460)。[23]我们认为防火墙发出三个不同的值是想确保发送者接受复位,即使发送者已经从目的地收到了“全长”(1460字节)ACK报文。复位报文的序列号需要“正确”设定,因为现在多数TCP/IP实现都会严格检查序列号是否落入预期窗口。[24](这个验证序列号的内在漏洞由Watson在2004年首先提出。[25])china(http) → cam(54190) [RST] TTL=47, seq=1, ack=1 china(http) → cam(54190) [RST] TTL=47, seq=1461, ack=1 china(http) → cam(54190) [RST] TTL=47, seq=4381, ack=1 china(http) → cam(54190) HTTP/1.1 200 OK (text/html) …… cam(54190) → china(http) [RST] TTL=64, seq=25, ack zeroed china(http) → cam(54190) ……其余页面内容 cam(54190) → china(http) [RST] TTL=64, seq=25, ack zeroed china(http) → cam(54190) [RST] TTL=47, seq=2921, ack=25
cam(54190) → china(http) [SYN] TTL=42 china(http) → cam(54190) [SYN, ACK] cam(54190) → china(http) [ACK] TTL=42 cam(54190) → china(http) GET /?falun HTTP/1.0我们可以看到,当检测到“坏”报文,防火墙也向中国机发送复位(“[RST]”)报文,但都在GET报文(以及其响应报文)后面。最后两个复位报文(零确认号)是剑桥机发送的。china(http) → cam(54190) HTTP/1.1 200 OK (text/html) …… china(http) → cam(54190) ……其余页面内容 cam(54190) → china(http) [RST] TTL=61, seq=25, ack=1 cam(54190) → china(http) [RST] TTL=61, seq=1485, ack=1 cam(54190) → china(http) [RST] TTL=61, seq=4405, ack=1 cam(54190) → china(http) [RST] TTL=61, seq=25, ack=1 cam(54190) → china(http) [RST] TTL=61, seq=25, ack=2921 cam(54190) → china(http) [RST] TTL=42, seq=25, ack zeroed cam(54190) → china(http) [RST] TTL=42, seq=25, ack zeroed
cam(54191) → china(http) [SYN] china(http) → cam(54191) [SYN, ACK] TTL=41 cam(54191) → china(http) [ACK] china(http) → cam(54191) [RST] TTL=49, seq=1复位报文从防火墙而 来(也往服务器而去)随之客户端便关闭了连接。如果客户端在复位到达前成功发送GET报文,便会接着收到多个防火墙发来的复位(即使GET报文是完全无毒 的)。接下来便是从服务端来的复位──服务器收到复位后便会立刻在GET到达前关闭连接。由于GET发来时不再存在打开的连接,服务端便按照协议返回一个 复位。值得注意的是,防火墙在SYN阶段(三次握手阶段一)没有试图重置连接,而是等到了SYN/ACK(阶段二)。虽然可以在客户端一发出SYN就给它 复位报文,但只有等到SYN/ACK才能构造出对服务端起作用的有效复位。[28]
iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP
ipfw add 1000 drop tcp from any to me tcpflags rst in
cam(55817) → china(http) [SYN] china(http) → cam(55817) [SYN, ACK] TTL=41 cam(55817) → china(http) [ACK] cam(55817) → china(http) GET /?falun HTTP/1.0网页以正常方式传输,除了中间夹杂一些防火墙的TCP复位报文。由于被完全忽略(一共28个复位),它们对客户端的TCP/IP栈没有任何影响。客户端仍然继续接收网页,正常发送ACK。中国端也能看到类似的正常传输夹杂复位的情形。china(http) → cam(55817) [RST] TTL=49, seq=1 china(http) → cam(55817) [RST] TTL=49, seq=1 china(http) → cam(55817) [RST] TTL=49, seq=1 china(http) → cam(55817) HTTP/1.1 200 OK (text/html) …… china(http) → cam(55817) ……其余页面内容 cam(55817) → china(http) [ACK] seq=25, ack=2921 china(http) → cam(55817) ……其余页面内容 china(http) → cam(55817) [RST] TTL=49, seq=1461 china(http) → cam(55817) [RST] TTL=49, seq=2921 china(http) → cam(55817) [RST] TTL=49, seq=4381 cam(55817) → china(http) [ACK] seq=25, ack=4381 china(http) → cam(55817) [RST] TTL=49, seq=2921 china(http) → cam(55817) ……其余页面内容 china(http) → cam(55817) ……其余页面内容 cam(55817) → china(http) [ACK] seq=25, ack=7301 china(http) → cam(55817) [RST] TTL=49, seq=5841 china(http) → cam(55817) [RST] TTL=49, seq=7301 china(http) → cam(55817) [RST] TTL=49, seq=4381 china(http) → cam(55817) ……其余页面内容 china(http) → cam(55817) [RST] TTL=49, seq=8761 ……接下来这个页面就完整了。
cam(38104) → china(http) [SYN] china(http) → cam(38104) [SYN, ACK] TTL=105 cam(38104) → china(http) [ACK] cam(38104) → china(http) GET / HTTP/1.0对付这种防火墙的 新策略比处理伪复位报文麻烦许多。因为即使客户端忽略了服务端来的(完全真实的)复位,还是会继续错误理解服务端的序列号,导致不能与服务端同步以完成三 次握手打开连接。当然如果有时候防火墙的伪SYN/ACK跑在真报文后面,就会被客户端忽略不造成任何混淆,不过防火墙仍然会坚持不懈用复位报文来打断连 接但是由于复位报文都被忽略了所以也没有用,网页照样显示。china(http) → cam(38104) [RST] TTL=45, seq=1 china(http) → cam(38104) [RST] TTL=45, seq=1 china(http) → cam(38104) [SYN, ACK] TTL=37 cam(38104) → china(http) [RST] TTL=64, seq=1 china(http) → cam(38104) [RST] TTL=49, seq=1 china(http) → cam(38104) [RST] TTL=45, seq=3770952438 china(http) → cam(38104) [RST] TTL=45, seq=1 china(http) → cam(38104) [RST] TTL=45, seq=1 china(http) → cam(38104) [RST] TTL=37, seq=1 china(http) → cam(38104) [RST] TTL=37, seq=1
其次,并非所有IP地址的流量都被检测过。我们每小时进行一次突发连接,发送一组256个IP地址连续的含有“?falun”的报文。起初每组报文 只有约三分之二被封锁掉,封掉的地址每次不同。不过几天之后几乎所有报文被封锁。我们无法通过逆向工程确定地址选择的算法,不过IP地址选择确有鲜明的模 式[39],暗示背后的机制可能相当简单。最直接的解释是资源匮乏──流量的三分之二也许就是整个系统可以处理的极限。显然某些时候如果一部分机器没有进行报文检测的工作,DoS攻击也就不可能通过它们发起。
图1:中国防火墙对“坏”字符串的封锁情况。2006年二月上旬我们进行了一次10天的试验,每小时一次从256个相邻IP地址进行连接。这里是前128的结果;其余部分模式也十分相似。黑点表明连接被封锁,白点表明没有封锁,灰点是结果不定(完全没有响应)。在110小时前后可见防火墙策略的显著变化(封锁更多的IP地址)。
if (getClass() != obj.getClass()) { return false; }不过这样不能处理继承关系,所以改掉了。
您提到的 CAPTCHA 页是 Google 为应对在 Google.cn 上的点击量急速上升的情况而采取的措施。 CAPTCHA 图片可以帮助我们确定点击量是来自自动漫游器软件还是来自具体用户。 请注意,您的网络收到此页面的原因是我们的系统检测到来自您的网络 IP 地址的自动查询。好像是由于什么东西在不断的向google提交请求造成的,我让他更换了IP地址,清空Cookies都无效,我很奇怪Google是怎么做到的?为了测试,我用Java写了一个小东西不断提交请求,结果我还是可以继续搜索(我在几分钟内提交了500多次请求)。
向 Google 发送任何类型的自动查询均属违反服务条款的行为。 有关针对个人用途的 Google 服务条款的详情,请访问 http://www.google.com/terms_of_service.html 。 请注意,"发送自动查询"包括但不限于以下情况:
* 使用任何向 Google 发送查询的软件来确定网站或网页在 Google 各类查询中的排名。
* 对 Google 进行"元搜索"
* 在 Google 上执行"离线"搜索。
您网络中很有可能有用户因运行上述程序之一而导致违反服务条款。 在您找到此用户并且删除所涉及的程序后,系统会自动取消对您的 IP 地址的封锁。
对于您可能遇到的任何不便,我们深表歉意,并希望能够尽快恢复您在 Google.cn 上的搜索。
C:\Users\Bearice>tracert ipv6.google.cn
通过最多 30 个跃点跟踪
到 ipv6cn.l.google.com [2401:3800:c001::68] 的路由:
1 <1 毫秒 * <1 毫秒 bearice-ibm [2002:780c:419b:4:2e0:4cff:fe11:a1f3]
2 427 ms 449 ms 440 ms 2001:9b0:65::2
3 440 ms 430 ms 449 ms 2001:9b0:1:1::2
4 448 ms 449 ms 448 ms 1670-bahnhof.cr0-r84.kn1-sto.se.ip6.p80.net [2001:16d8:aaaa:1::1]
5 478 ms 449 ms 470 ms v1317-r84.cr0-r73.gbl-mlm.se.ip6.p80.net [2001:16d8:1:1317::73]
6 460 ms 450 ms 449 ms v1306-r73.cr0-r72.gbl-cph.dk.ip6.p80.net [2001:16d8:1:1306::72]
7 449 ms 449 ms 466 ms v1308-r72.cr0-r70.tc2-ams.nl.ip6.p80.net [2001:16d8:1:1308::70]
8 445 ms 469 ms 460 ms ams-ix.he.net [2001:7f8:1::a500:6939:1]
9 459 ms 489 ms 459 ms 10gigabitethernet1-4.core1.lon1.he.net [2001:470:0:3f::1]
10 449 ms 449 ms 429 ms 10gigabitethernet2-3.core1.nyc4.he.net [2001:470:0:3e::1]
11 429 ms 449 ms 450 ms 10gigabitethernet1-2.core1.nyc1.he.net [2001:470:0:37::2]
12 429 ms 449 ms 439 ms 2001:458:26:2::280
13 * 482 ms * v6-laIX01.kddnet.ad.jp [2001:268:ff00::8]
14 * * 619 ms v6-oteCORE02.kddnet.ad.jp [2001:268:ff00::2]
15 498 ms 499 ms 479 ms 2001:200:0:fe00::1dec:0
16 478 ms 499 ms 489 ms tpr5-ge0-0-0-7.jp.apan.net [2001:200:901:7::5]
17 620 ms 599 ms 610 ms 2001:200:901:5774::1
18 * 644 ms * 2001:200:901:5774::1
19 * 656 ms * 2001:468:ff:516::1
20 657 ms 680 ms 680 ms 2001:468:ff:516::1
21 588 ms 670 ms 670 ms kreonet-1-lo-jmb-706.sttlwa.pacificwave.net [2001:504:b:10::6]
22 569 ms 580 ms 560 ms 2001:320:1b00:1::1
23 689 ms 700 ms 700 ms 2001:252:0:2::301
24 699 ms 710 ms 690 ms 2401:3800::1:38
25 688 ms 740 ms 690 ms 2401:3800::1:43
26 699 ms 710 ms 690 ms 2401:3800::1:43
27 688 ms 709 ms 720 ms 2401:3800:c001::68
跟踪完成。
C:\Users\Bearice>