我是如何解决dropbox无法同步的

2014-06-19 18:43

昨晚发现Dropbox被封锁,网上一直没有解决办法出现,所以今天自己学习动手解决。如果你没兴趣看我是如何解决的,请直接移步Dropbox Host将内容添加到你的hosts文件当中就可以了。

下面讲一下,我解决问题的整个过程:

屏蔽原理

GFW对网络的屏蔽98%以上靠的都是Dns污染,Dropbox这次遭殃也不例外。首先,我们用 nslookup 来查看查看一下dropbox的官方网站。

我们分别输入如下两个命令:

nslookup www.dropbox.com 8.8.8.8

nslookup -vc www.dropbox.com 8.8.8.8

结果如下图所示:
image

第一行命令的结果是 59.24.3.173 , 第二行命令的结果是 108.160.166.142, 两个命令的区别在于 -vc,

Always use a virtual circuit when sending requests to the server.

这个参数的意思是用虚拟的路径去查询, 所以结果是正确的。 108.160.166.142 才是我们所要找的ip, 59.24.3.173 这个ip又是什么呢? 这是GFW重新导向的一个虚假的ip地址,维基百科上有这些ip地址的收录: 域名服务器缓存污染

解决思路

如果说用的是DNS污染,那么我们只要修改host文件,将所有Dropbox需要用到的域名导向正确的IP地址即可。抓包分析Dropbox需要用到的Url路径 -> 查找这些Url路径的真实IP地址 -> 更新Host文件 。

实战

1.抓包

这里我推荐一款抓包软件Charles,功能强大,操作简单,跨平台,唯一的缺点就是收费,而且很贵。

Dropbox都是通过443端口进行文件传输,抓包内容如下图所示:

image

这是我修改了Host之后截图的结果,所以基本上数据包都请求成功了。(PS:如果没有修改,基本上所有数据包应该都是红色的叉叉)

接下来我们找出需要的url:
client22.dropbox.com

client-lb.dropbox.com

dl-client399.dropbox.com

dl-client435.dropbox.com

notify7.dropbox.com

dl-debug34.dropbox.com

d.dropbox.com

起初,我以为这些url都是固定的,所以将每一个都查询ip并添加到host,结果发现没用,后来才发现 dl-client399 后面这个三位数是随机变动的,同理与client22,dl-debug,notify7这几个, 其余url为固定。

那样的话少说,也有1000多个url需要查,手动肯定是不行的,只能通过脚本批量查询。

2.批量查询url真实ip地址

shell脚本不怎么熟,这种小事情用Python来解决最方便了,分分钟搞定。下面只贴一段代码去遍历dl-client399.dropbox.com类型的url,其他几个url也是同理。

import subprocess
for num in range(1, 1000):
    url = "dl-client" + str(num) + ".dropbox.com" 
    cmd = "nslookup -vc " + url + " 8.8.8.8"
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) #用Python来调用系统命令
    ip = p.stdout.readlines()[-2].replace("Address: ", "").replace("\n", "") #过滤出ip
    print ip + " " + url  #打印结果为  204.236.220.23 dl-client7.dropbox.com
3.将所有脚本查询完的结果复制粘贴到hosts文件中

效果如下:

image


标签: Python 科学上网