Google考虑关闭中国谷歌运营及网站
谷歌在其官方博客上宣布,考虑关闭中国运营及网站Google.cn:
与其他很多著名组织一样,我们经常会碰到各种各样的网络攻击。去年12月中旬,我们检测到一次来自中国的,对我们集团网络设备高度精密和有针对性的网络攻击,在此次攻击中,谷歌公司的知识产权遭到窃取。我们很快就查清这并非只是一场单纯的安全事件。
首先,此次攻击并非仅仅针对谷歌。我们在调查中发现,至少有其他20家大型公司也成为了类似的攻击目标,这些公司所在的行业分布广泛---包括互联网、金融、科技、媒体和化工行业。我们目前正在通知这些公司,并与美国有关部门携手展开调查。
第二,我们有证据表明攻击者的主要目标是入侵中国人权活动者的Gmail邮箱账户。根据我们掌握的调查数据,我们确信他们的攻击还未能达此目的。只有两个Gmail账户有被侵入过的迹象,而入侵者的活动范围也仅限于账户信息(如账户创建时的数据)和邮件主题,而不是邮件内容。
第三,我们在对谷歌案件的调查中发现,有很多拥护人权活动,注册地在美国、中国和欧洲的Gmail邮箱账户似乎经常受到第三方侵入。入侵者并非是通过Google的安全漏洞进行攻击,而极有可能是通过在用户的电脑内植入钓鱼网页或是恶意软件来达到目的。
我们已经利用从这次攻击中所获取的资料,改善基础设施及架构,提高谷歌及我们用户的安全。从个人用户来说,我们我们建议他们在自己的电脑上安装信誉好的反病毒和反间谍软件程序,给他们的操作系统安装补丁,并更新所使用的网络浏览器。在点击即时信息和电子邮件的链接时,或要求在线提供个人密码等个人资料时,要保持警惕。在这里,你能够阅读到更多我们所提出的关于电子安全方面的建议。如果希望获得更多关于这种类型攻击情况,请阅读美国政府的这份报告(PDF)。
2006年1月,虽然我们对一些搜索结果将受到审查而感到不适,但为了加强与中国用户的联系以及建立一个更为开放的互联网环境,我们还是发布了Google.cn。从发布之日起我们就有着明确的运营思路---我们将仔细审视中国的运营环境,包括新法律的发布以及对我们所服务领域的其他规定。如果我们认为我们无法取得既定目标,我们将毫不犹豫的重新考虑我们在中国的发展策略。
这些未经报道的攻击和监视,以及过去几年来政府试图进一步限制互联网上的言论自由已使我们得出结论,我们应重新审视我们在中国的业务运营。我们已决定我们将不再继续审查Google.cn上的搜索结果,且如有可能的话,未来几周内我们将与中国政府就我们是否可以依法运营一个未经过滤的搜索引擎展开讨论。我们认识到这可能意味着我们不得不关闭Google.cn,并有可能关闭我们设在中国的办公部门。
以下为分析人士观点:
SOLARIS资产管理投资总监TIM GHRISKEY:
对谷歌和消费者而言显然都不是好消息。谷歌最好能找到解决途径,即使他们不得不关闭中国业务,也会有重新恢复的一天。我希望会很快恢复,不能想象谷歌永久性关闭中国业务。
对任何业务来说,中国都是巨大的增长引擎,谷歌也能在中国市场发现巨大商机。业界一定会找到对付黑客的方式,这也是时不时困扰很多其他公司的问题,也是用户的灾难。
找出占用系统网络端口的根源
在windows 环境下面,从开始->运行,输入cmd,进入dos界面,然后输入如下命令并运行。
view plaincopy to clipboardprint?
C:\Documents and Settings\qingxu>netstat -aon|findstr "1371"
TCP 10.5.35.151:1371 203.208.37.104:80 CLOSE_WAIT 2160
C:\Documents and Settings\qingxu>netstat -aon|findstr "1371"
TCP 10.5.35.151:1371 203.208.37.104:80 CLOSE_WAIT 2160
可以看到,运行命令后出现了一行记录,我们关注的是最后一个字段,对,就是2160,它表示占用这个端口的进程号。
有了进程号之后,继续输入如下命令并运行
view plaincopy to clipboardprint?
C:\Documents and Settings\qingxu>tasklist|findstr "2160"
Fiddler.exe 2160 Console 0 150,648 K
C:\Documents and Settings\qingxu>tasklist|findstr "2160"
Fiddler.exe 2160 Console 0 150,648 K
可以看到,是fiddler.exe这个程序在运行。之后你就可以关闭掉这个程序即解决问题,当然你也可以换端口号。
自定义Java 5 的新XPath API 函数
Java 5 的XPath API已经非常好用了,它实现了XPath1.0标准,功能已经比较强大了。
但是,还可以对它进行扩展,自定义XPath API 函数。例如,想要支持matches函数,以便匹配正则表达式,就可如下:
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
xpath.setXPathFunctionResolver(new MatchesFunctionContext());
xpath.setNamespaceContext(new MyNamespaceContext());
XPathExpression expr = xpath.compile("//*[ext:matches(@href,\"/photos/.*/[0-9]+/\")]/IMG");Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes;nodes = (NodeList) result;// XPathAPI.selectNodeList(doc, "//*[@id=\"Main\"]");
System.out.println(nodes.getLength());
for (int i = 0; i < nodes.getLength(); i++) {
// System.out.println(nodes.item(i).getNodeName());
// System.out.println(nodes.item(i).getTextContent());
}
import javax.xml.namespace.QName;
import javax.xml.xpath.XPathFunction;
import javax.xml.xpath.XPathFunctionResolver;public class MatchesFunctionContext implements XPathFunctionResolver{
private static final QName name
= new QName("http://ext.com", "matches");public XPathFunction resolveFunction(QName name, int arity) {
if (name.equals(MatchesFunctionContext.name) ) {
return new FuncMatches();
}
return null;
}}
import java.util.Iterator;
import javax.xml.namespace.NamespaceContext;
public class MyNamespaceContext implements NamespaceContext
{
public String getNamespaceURI(String prefix)
{
if (prefix == null)
throw new IllegalArgumentException("The prefix cannot be null.");
if (prefix.equals("ext"))
return "http://ext.com";
else
return null;
}
public String getPrefix(String namespace)
{
if (namespace == null)
throw new IllegalArgumentException("The namespace uri cannot be null.");
if (namespace.equals("http://ext.com"))
return "ext";
else
return null;
}public Iterator getPrefixes(String namespace)
{
return null;
}}
import java.util.List;import javax.xml.xpath.XPathFunction;
import javax.xml.xpath.XPathFunctionException;import org.w3c.dom.Node;
import org.w3c.dom.NodeList;/**
* Execute the Contains() function.
*
* @xsl.usage advanced
*/
public class FuncMatches implements XPathFunction {
static final long serialVersionUID = 5084753781887919723L;/**
*
*/
public Object evaluate(List args) throws XPathFunctionException {if (args.size() != 2) {
throw new XPathFunctionException(
"Wrong number of arguments to valid-isbn()");
}
Object o = args.get(0);
String s1 = null;
if (o instanceof NodeList) {NodeList list = (NodeList) o;
if (list.getLength() == 0) {
return Boolean.FALSE;
}Node node = list.item(0);
// getTextContent is available in Java 5 and DOM 3.
// In Java 1.4 and DOM 2, you'd need to recursively
// accumulate the content.
s1 = node.getTextContent();
}String s2 = (String) args.get(1);
// Add this check for JDK consistency for empty strings.
if (s1.length() == 0 && s2.length() == 0)
return Boolean.TRUE;boolean match = s1.matches(s2);
return (match) ? Boolean.TRUE : Boolean.FALSE;
}}