网络技术

[CodeSnippet]Perl抓包分析之DNS debug

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

依赖的Perl第三方库在Ubuntu上安装:

  • libnet-pcap-perl
  • libnet-dns-perl

如果还需要其他Perl第三方库,可以通过apt-file(Ubuntu Lucid默认没有安装)来检索所需要的pm文件在哪个deb包。

例如:

$ apt-file search Net::DNS::Packet
 libnet-dns-perl: /usr/share/man/man3/Net::DNS::Packet.3pm.gz
$ apt-file search Net::Pcap
 libnet-pcap-perl: /usr/share/man/man3/Net::Pcap.3pm.gz

Wireshark虽然也可以抓包分析,但是用可编程的脚本语言来辅助分析可以省去很多肉眼比对的工作。

下面直接上代码:

#!/usr/bin/perl -w
#
# Copyright 2003, Brian Hatch, released under the GPL
#
# watch_dns:
#   A program to watch for inbound DNS queries, and print the
#   source, destination, and requested domain name of the queries.
#
# You'll need to fill this in with your actual IP address
# (If we didn't restrict the destination IP address, we'd
# catch all our outbound queries too.)
#
# Original Downloaded from:
# http://www.hackinglinuxexposed.com/articles/20030730.html
#
# Modified by huangwei.me 2010-08-02
 
# 本机IP地址定义
my $MY_IP_ADDRESS='10.2.1.83';
# 非特权权限的uid/gid,可以用id命令查看当前用户的uid和gid
my $UNPRIV="1001";
# 自行指定监听网卡,留空将使用系统默认探测到的网卡
my $MY_DEV="vmnet8";
#
# No changes required hereafter
#
use Net::Pcap;
use Net::DNS::RR;
use FileHandle;
use English;  # $UID等价于$<, $EUID等价于$>
use strict;
 
STDOUT->autoflush(1);
 
while ( 1 ) {
 
	my $pid = fork();
	if ( ! defined $pid ) { die "Unable to fork.  Yikes." };
 
	if ( $pid ) {
		# Parent process (running as root) will wait for
		# child.  If child exits, we'll create another one.
		wait();
		sleep(1);  # To keep us from respawning too fast if necessary.
	} else {
		print "Child starting\n";
 
		# Child process will do actual sniffing.
		# First, create our packet capturing device
		my($pcap_t) = create_pcap();
 
		unless ( $pcap_t ) {
			die "Unable to create pcap";
		}
 
		# Let's stop running as root.  Since we already
		# have our pcap descriptor, we can still use it.
		$EGID="$UNPRIV $UNPRIV";	# setgid and setgroups()
		$GID=$UNPRIV;
		$UID=$UNPRIV; $EUID=$UNPRIV;
 
		# Capture packets forever.
		Net::Pcap::loop($pcap_t, -1, \&process_pkt, 0);
 
		# Technically, we shouldn't get here since the loop
		# is infinite (-1), but just in case, close and exit.
		Net::Pcap::close($pcap_t);
		exit 1;
	}
}
 
sub create_pcap {
	my $promisc = 1;   # enter promiscuous mode or not.
	my $snaplen = 1500; # the maximum number of bytes to capture from each packet
 
	my $to_ms = 0;			# timeout
	my $opt=1;                          # Sure, optimisation is good...
	my($err,$net,$mask,$dev,$filter_t);
 
	my $filter = "udp dst port 53 or udp src port 53"; # pcap capture filter
 
	# Look up an appropriate device (eth0 usually)
	$dev = $MY_DEV || Net::Pcap::lookupdev(\$err);
	print "sniffing on ", $dev, "\n";
	$dev or die "Net::Pcap::lookupdev failed.  Error was $err";
 
	if ( (Net::Pcap::lookupnet($dev, \$net, \$mask, \$err) ) == -1 ) {
		die "Net::Pcap::lookupnet failed.  Error was $err";
	}
 
	# Actually open up our descriptor
	my $pcap_t = Net::Pcap::open_live($dev, $snaplen, $promisc, $to_ms, \$err);
	$pcap_t || die "Can't create packet descriptor.  Error was $err";
 
	if ( Net::Pcap::compile($pcap_t, \$filter_t, $filter, $opt, $net) == -1 ) {
		die "Unable to compile filter string '$filter'\n";
	}
 
	# Make sure our sniffer only captures those bytes we want in
	# our filter.
	Net::Pcap::setfilter($pcap_t, $filter_t);
 
	# Return our pcap descriptor
	$pcap_t;
}
 
# Routine to process the packet -- called by Net::Pcap::loop()
# every time an appropriate packet is snagged.
sub process_pkt {
	my($user_data, $hdr, $pkt) = @_;
 
	my($src_ip) = 26;           # start of the source IP in the packet
	my($dst_ip) = 30;           # start of the dest IP in the packet
	my($udp) = 42;              # start of UDP pkt payload
	my($domain_start) = 55;     # start of the domain in the packet
	my($data);
 
	# extract the source IP addr into dotted quad form.
	my($source) = sprintf("%d.%d.%d.%d",
		ord( substr($pkt, $src_ip, 1) ),
		ord( substr($pkt, $src_ip+1, 1) ),
		ord( substr($pkt, $src_ip+2, 1) ),
		ord( substr($pkt, $src_ip+3, 1) ));
 
	# extract the destination IP addr into dotted quad form.
	my($destination) = sprintf("%d.%d.%d.%d",
		ord( substr($pkt, $dst_ip, 1) ),
		ord( substr($pkt, $dst_ip+1, 1) ),
		ord( substr($pkt, $dst_ip+2, 1) ),
		ord( substr($pkt, $dst_ip+3, 1) ));
 
	$data = substr($pkt, $domain_start);
 
	$data =~ s/0.*//g;             # strip off everything after the domain
	$data =~ s/[^-a-zA-Z0-9]/./g;    # change the domain component separators
	# back int to dots.
 
	print "$source -> $destination: $data\n" if ( $source and $destination and $data);
	dump_dns(parse_dns($pkt, $udp));
}
 
# dump dns query & response in details
sub dump_dns {
	my $dns = $_;
	$dns->print;
 
}
 
sub parse_dns {
	my($pkt, $udp) = @_;
	my $udp_payload = substr($pkt, $udp);
	my $dns = Net::DNS::Packet->new(\$udp_payload);
	return $dns;
}

SSL MITM Attacks

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

最早了解到这个漏洞的话题是7月2号在securityfocus的邮件列表里看到有人问SSLv2的漏洞攻击demo,直到后来在大风的blog里看到了这篇《谁动了我的SSL》,才意识到这个漏洞比以往的几次SSL协议漏洞攻击更贴近实用,且真正撼动了SSLv2的协议安全性根基!

漏洞原理我就不多说了,正好今天在研究一个东西的时候查到了其他的一些SSL漏洞攻击的资料,索性一起整理打包到这篇blog里,权当存档一下。

剔除证书

Sniffing SSL Traffic using SSLStrip

Moxie MarlinSpike在Blackhat 09上演示了一种攻击SSL安全性的方法:把页面中的所有https://链接的URL替换成http://,然后通过中间人攻击转发服务器和客户端之间的通信数据。其关键要点是攻击者和客户端之间使用http明文协议,而攻击者和服务器之间使用https加密协议,因而攻击者就可以窃听到所有的客户端发送的数据。Moxie MarlinSpike的报告视频可以看这里,PPT在slideshare上也有。

其实在具体的攻击过程中还用到了一些看似不起眼的猥琐小技巧,比如favicon.ico替换、利用idn合法字符伪造钓鱼URL(例如:https://www.gmail.com/accounts/ServiceLogin?!f.ijjk.cn会被域名解析为:www.google.xn--comaccountsservicelogin-5j9pia.f.ijjk.cn)等等。

SSLstrip Tutorial: http://securitytube.net/SSLstrip-Tutorial-video.aspx

替换证书

利用的是CA注册机制的流程漏洞,小资金投入即可实现伪造证书的合法化。主要可以用于钓鱼攻击。当然了,如果你控制了代理服务器的话,则可以完美的实现中间人攻击。

http://wuhongsheng.com/it/2009/09/ssl-hijack/

强制减弱SSL加密算法强度

详细见邮件列表里的讨论:http://www.securityfocus.com/archive/101/512221/30/0/threaded。和基本中间人攻击法相比,我想主要优势在于客户端用户更不容易察觉到被人偷窥和做了手脚!

无线环境下的中间人攻击

通过域名污染、ARP污染的方式替换服务器证书。

http://www.slideshare.net/SecurityTube.Net/ssl-mitm-attack-over-wireless


btw: securitytube和slideshare真是好地方,各种教学、demo视频和PPT让人留连忘返。



Moxie MarlinSpike


原创文章,转载请注明: 转载自猪在笑 [ http://www.huangwei.me/blog/ ]
本文链接地址: http://www.huangwei.me/blog/2010/07/29/ssl-mitm-attacks/



简单几条命令检测DDoS攻击

摘录自:http://www.lunarforums.com/vps_hosting_at_lunarpages/useful_linux_scripts_lsof_ps_fuser_netstat-t41474.0.html

# netstat -anp |grep ‘tcp\|udp’ | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n

 1 123.122.9.23
 1 64.233.169.101
 1 72.14.204.83
 2 72.14.204.17
 4 210.192.100.178
 6 0.0.0.0

# netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr

5 210.192.100.178
4 72.14.204.17
3 64.233.169.132
2 72.14.204.99
2 64.233.169.118
1 64.233.169.101
1 123.122.9.23

# netstat -ntu | grep -v TIME_WAIT | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr

4 72.14.204.17
3 210.192.100.178
1 64.233.169.101
1 123.122.9.23

# netstat -an | grep :80 | awk ‘{print $5}’ | cut -f1 -d”:” | sort | uniq -c | sort -n

1 64.233.169.118
1 74.125.53.101
2 64.233.169.132
3 72.14.204.99
7 210.192.100.178

推荐几个好玩且实用的Web App Tools

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

在线PS工具

http://www.iephotoshop.com/

http://www.pixlr.com/editor/?loc=zh-cn

上面这两个网站风格迥异,相比较而言,前者更适合不懂PS、仅需要对图片进行快速处理的用户,后者从用户UI上就更贴近PC上的PhotoShop,因此更适合PS用户。

在线绘图工具

http://mugtug.com/sketchpad/

支持HTML5的浏览器方可使用

在线流程图工具

http://www.gliffy.com/gliffy

不多介绍,直接看官方给出的一个示例效果图。

官方示例图片


原创文章,转载请注明: 转载自猪在笑 [ http://www.huangwei.me/blog/ ]
本文链接地址: http://www.huangwei.me/blog/2010/04/07/web-app-tools/



QQMail与GMail的非专业用户体验对比

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

网上也看过一些网友写的关于QQMail和GMail的功能和用户体验对比文章(比如:QQmailGmail和 网易邮箱的对比),但士别三日当刮目相看。我作为QQMail早期版本的使用者,Gmail的5年重度使用者和QQMail的现在支持者,我想用我最近的一些使用体会来对比一下这两种Mail的特点。并呼吁广大国内Gmail重度使用者重新审视GMail的垄断地位和产品的不可替代性。

众所周知,GMail是QQMail的又一个“模仿”对象和“灵感”来源。因此,本文将针尖对麦芒的比较GMail的杀手级应用和QQMail的“创新”应用!

1. 过滤器功能

两者不相上下,QQMail的邮件过滤器规则设置更简单,更容易理解,且设置项比GMail的默认过滤器规则稍多。不过QQMail目前不支持过滤器规则的导入和导出功能

2.自定义域名邮箱

应用不同。GMail是基于Google Apps平台,普通用户可以选择免费版,GMail的域名邮箱帐号和已有GMail帐号不相关。QQMail只是由腾讯的邮件系统来接管你的域名下的MX服务,域名帐号是和QQ帐号绑定的。

3.基于会话的邮件组织和管理

二者都有的功能。GMail是默认启用该功能,不可选择传统邮件管理方式。QQMail可以自行设置开通“会话模式”,默认是传统的按照时间组织邮件

4.邮件标签

QQMail目前不支持自定义标签,只支持将邮件标记为“待办邮件”。

5.邮件全文搜索

搜索是Google的核心技术,QQMail目前是实验室功能,待深入测试使用

6.同步手机联系人

国内用手机访问Google的同步服务器经常会出现无法连接的情况,原因大家都知道。相比之下,守规矩的腾讯显然是胜出了!我的N73上可以很快速的同步手机通讯录到QQMail中的“手机联系人”。

7.IMAP支持

当初GMail很吸引人的一个免费功能,现在QQMail也有了该功能。

8.多账户管理

两者都有的功能,QQMail还在邮件的默认首页右上角显著标明“支持包括 Gmail 在内的邮箱”。

9.HTTPS连接

QQMail的登录页面上有“https登录”的链接。GMail是在设置里可以选择“总是使用https连接”。

以上比较都是围绕GMail,让QQMail来扮演PK者的角色的。下面再列举一下我目前所体验到的QQMail有的,GMail没有,但我认为“有的好”的。

1. 自动选择连接最快的服务器

中国特有的运营商割据所催生的特殊应用需求。教育网是一个奇怪的网络,网络技术最先进。但一个“公网出口”带宽有限就拖累了广大教育网用户的“公网”访问速度。还有就是,大运营商采用DPI技术限制小运营商网络用户网速的案例。。。所以腾讯的这个应用很好,很符合国情!

2. 邮箱容量不受限制

这个其实并不太重要,我还没见过现实中GMail信箱容量不够使用的情况。该项特色适用于邮箱“容量控”。

3.超大附件支持

用过QQ中转站的都知道。


总结:我一直都很佩服腾讯的产品团队,熟悉中国互联网应用的特点,网民的需求,是一个懂“规则”的互联网产品团队!值得尊敬!值得学习!

题外话1:如果大家不想让自己的邮件随机的被我们伟大的qiang drop,请谨慎使用GMail。我已经亲身试验并体验了这个新升级的“强技”!

题外话2:国内知名的IT博客“月光博客”站长在腾讯的产品团队?例证在这里

题外话3:有人会问为什么我没有把网易邮箱拿进来比较?如果我告诉你网易自己公司的部分内部信息化系统居然是IE Only的!你会相信吗?网易太想在邮箱上收费了,于是他还在维护着vip.163.com。其实这年头有多少人会在意域名中的一个vip呢?左手是免费用户群体,右手是收费用户。在它还没有精通“双手互搏术”之前,我不会使用他的产品。


原创文章,转载请注明: 转载自猪在笑 [ http://www.huangwei.me/blog/ ]
本文链接地址: http://www.huangwei.me/blog/2010/03/28/qqmail_vs_gmail/



[原创]解决Ubuntu下Firefox间歇性无响应的bug

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

测试环境:Firefox 3.6.2 zh_CN + Ubuntu 9.04

罪魁祸首:Foxyproxy Standard扩展

导致Firefox间歇性无响应的原理:Foxyproxy Standard扩展会在被启用状态下,强制在Firefox的配置项中添加一个配置项:

network.dns.disablePrefetch   True

该项设置在about:config页无法修改!无法删除!即使你直接编辑pref.js也无效!只要Foxyproxy一启用就会强制给你刷上这个设置!

我谨慎的表示怀疑这是一种脑残的设计!

我恶毒的推测这是一种对免费用户的QJ!让你付费购买它的Pro版本扩展!

其实,自从使用autoproxy自动代理配置脚本之后,Foxyproxy已经成为了鸡肋。现在更是严重的影响了我使用Firefox的心情!所以我的终极解决方法就是:

卸载Foxyproxy!使用自动代理配置脚本!



[原创]非官方修复Firefox自动代理配置脚本bug的方法

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

自从发现Firefox在Windows和Linux平台上一直存在的一个未得到官方修复的autoproxy.pac文件解析bug之后,一直在探索临时的完美解决方案。终于,经过多次尝试后,发现了一个便捷的方法。其基本原理是利用hosts文件中对主机名的IP地址解析记录。为了免去每次手动修改/etc/hosts文件的麻烦,写了一小段脚本,代码如下:

以下代码仅在Ubuntu 9.04 + locale=en_US.UTF-8测试过!建议脚本小白使用前先备份/etc/hosts文件

#!/bin/bash
# modify hosts to adapt autoproxy
hostname=`hostname`
gw=`ip r | grep -w 'metric 1' | cut -d ' ' -f 12`
line=$gw' '$hostname' #fix firefox autoproxy.pac bug'
echo $line #debug only
sed '/'$hostname'/d' /etc/hosts > tmp.txt
mv tmp.txt /etc/hosts
echo $line >> /etc/hosts

ipv4-to-ipv6 tunnel自动配置的bash脚本

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

直接贴代码,由于Wordpress编辑器的问题,请自行转义>为>。另,为排版需要,部分行是被迫换行的,请注意。

#!/bin/bash
# test default gateway access
gw=`ping -q -w 1 -c 1 \`ip r | grep default | cut -d ' ' -f 3\` > /dev/null
     echo "ok" || echo "failed"`
if [ $gw = "ok" ]; then
	echo "Gateway is ready"
else
	echo "Gateway is unreachable, check your internet connection!"
	exit 1
fi
 
iptunnel=`ifconfig | grep sit1`
if [ -n "$iptunnel" ]; then
	ip tunnel del sit1
fi
addr4=`ifconfig wlan0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
ip tunnel add sit1 mode sit remote 211.68.71.43 local $addr4
ifconfig sit1 up
ifconfig sit1 add 2001:da8:215:5200:0:5efe:$addr4/64
iproute=`route -A inet6 | grep "2001:da8:215:5200"`
if [ -n "$iproute" ]; then
	ip route add ::/0 via 2001:da8:215:5200::1 metric 1
fi
 
# test ipv6 connect
ipv6_srv=(
[0]="ipv6.google.com"
[1]="www.huangwei.me"
[2]="he.net"
)
for srv in ${ipv6_srv[@]}; do
	ping6 -q -w 1 -c 1 $srv | grep "1 received" > /dev/null 
             && echo "$srv is ready" || echo "$srv is failed"
done

关于pac文件对本机IPv6地址解析的方法

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

更新:2010-03-23 22:42:59

更新说明:测试不够充分,刚才又发现了几个之前没注意的问题,补充更新之。

更新1:Firefox 3.6的myIpAddress()函数对于有IPv6协议栈的主机的支持还是有问题,经过在Windows XP SP3+Firefox 3.6上测试,发现返回的是::1!

临时解决方法:about:config中,手工编辑设置项:network.dns.disableIPv6为true

chrome的最新代码分支已经解决了这个bug!

更新2:在Firefox中调试pac文件的技巧!

直接alert(msg),然后在“错误控制台”里可以看到msg

更新3:IE支持一系列新的pac扩展函数,主要针对的就是IPv6的支持!见参考资源4.

更新4:Ubuntu 9.04+Firefox 3.6组合下,myIpAddress()函数返回的地址居然是127.0.1.1! 好在Chrome 5解析依然可以返回正确的本机IP地址。

更新5:在Ubuntu下修复Firefox的解析bug可以采用修改hosts文件的方法,具体来说,添加本机的默认路由IP地址所对应主机名(bash下可以使用hostname命令查看当前主机名)的记录。

如:

 118.zzz.xxx.167    your-computer-name

自从买了主机以来,一直使用pac文件来实现智能的代理上网,支持的智能代理功能包括:

  1. 根据本机IP地址是教育网还是公网选择正确的默认代理地址,达到在教育网访问免费IP地址站点时直连,在公网访问教育网地址时使用学校的代理或VPN
  2. 根据目的网址是否被河蟹选择正确的代理地址

刚开始的时候一直有一个bug没有解决,那就是在学校使用的时候无法正确的识别本机IP地址,使用ADSL时就没有问题。通过一段时间的摸索之后,发现了问题所在!

IPv6!

由于教育网已经普及了IPv6地址,因此Firefox在解释执行myIpAddress()函数时返回的IP地址是IPv6的地址!而我之前在pac脚本里一直使用的是这段代码来判断本机IP地址的:

isInNet(myIpAddress(),"59.64.0.0","255.255.0.0")

上述代码在纯IPv4环境中是没有问题的,但关键问题是在有IPv6地址的主机上,myIpAddress()返回的地址格式是IPv6格式的!因此,isInNet函数就会解析失败了。

通过Google和自己的动手实践,现在改用以下代码来检测本机IP地址

if (shExpMatch(myIpAddress(), "*:59.64.*") || isInNet(myIpAddress(),"59.64.0.0","255.255.0.0") )

通过一段时间的测试来看,在以下平台和浏览器上测试通过上述代码:

  1. Windows XP:  Firefox 3.6/IE 8/Chrome 5
  2. Ubuntu: Firefox 3.6/Chrome 5

附几段有用的pac代码片段

var resolved_ip = dnsResolve(host);
 
if (isInNet(resolved_ip, "10.0.0.0", "255.0.0.0") ||
		isInNet(resolved_ip, "172.16.0.0",  "255.240.0.0") ||
		isInNet(resolved_ip, "192.168.0.0", "255.255.0.0") ||
		isInNet(resolved_ip, "127.0.0.0", "255.255.255.0"))
{
	return "DIRECT";
}
DEFAULT = "PROXY proxy.bupt.edu.cn:8080";
 
if(/\.cnki\.net/i.test(url))  return "DIRECT";
if(/\.ieee\.org/i.test(url)) return "DIRECT";
if(/\.sciencedirect\.com/i.test(url)) return "DIRECT";
if(/\.edu\.cn/i.test(url)) return "DIRECT";
if(/\.springerlink\.com/i.test(url)) return "DIRECT";

参考资源

  1. proxy.pac myIpAddress() returns incorrect format?
  2. Autoconfigure Scripts for Proxy Settings – Apr. 22, 2004
  3. http://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt
  4. http://blogs.msdn.com/wndp/archive/2006/07/18/IPV6-WPAD-for-WinHttp-and-WinInet.aspx

自己动手屏蔽无良电信的网页劫持插广告

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

背景介绍

请各位Google这两个IP地址:61.132.255.21261.132.221.146 以获得事实真相,我在此不作过多介绍。

现象描述

现象1:使用Firefox+NoScript浏览时会经常出现被拦截的脚本提示,点击NoScript提示来自“61.132.221.146”的脚本被禁止。

现象2:使用百度搜索时,会经常在搜索结果页的左上角出现浮动广告。查看页面源代码可知,百度的搜索结果页整个作为一个frame页面包含在广告页面中,广告和百度原有页面代码分别成为框架页中的一个子页。广告页面代码会隔几秒后自动无刷新reload一次,清除子框架页中的广告代码,消除龌龊证据。

屏蔽方法

方法1:修改本机路由表。

注意,是修改路由表,不是hosts文件。因为现在的电信插广告已经不仅采用DNS劫持了。

Windows下永久修改路由表的命令行语句

route -p add 61.132.255.212 mask  255.255.255.255 127.0.0.1
route -p add 61.132.221.146 mask  255.255.255.255 127.0.0.1

方法2:修改ADSL猫的路由表

推荐这种方法。可以一劳永逸,特别适用于上网终端不止一台计算机的情况。

我家所使用的电信提供的ADSL猫是比较老的型号,关于如何登录ADSL猫请见我之前的一篇文章

依次点击“高级设定”–>”路由设定”–>”静态路由”,在右侧主窗口,点击“新增”按钮添加路由。

IP地址:要屏蔽访问的IP地址,如61.132.255.212
子网掩码:255.255.255.255
网关IP地址:127.0.0.1

修改好路由表一定记得保存,并且只有重启ADSL猫后设置才会生效!

补充说明

  1. 上述方法中提到的IP地址是合肥电信用于插入广告所使用的主机IP地址,不同地区电信所使用的广告服务器IP地址肯定不相同,请自行修改。
  2. 上述方法也可以用于屏蔽任何你想屏蔽的恶意主机地址。

原创文章,转载请注明: 转载自猪在笑 [ http://www.huangwei.me/blog/ ]
本文链接地址: http://www.huangwei.me/blog/2010/02/09/anti-telecom-ad/



  • GTalk with me!

  • 订阅我的博客

  •  

    2010年九月
    « 八    
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  
  • Google朋友圈

  • 文章分类

  • 量子统计

  • Copyright © 1996-2010 猪在笑. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress
    Page 1 of 212