就比如我这首页一样。之前只做了嵌入和反代,没有反代资源,一开始还觉得好好的,但是我这个24h墙外用户,突然有一天没关梯子就上来,看到css什么样式全都爆炸了,所以赶快就修了。感谢鸟姐的nginx的配置文件,咱就直接抄过来了
原理
1.反代 ,用于消除telegram.org的X-Frame-Options,让它可以嵌入到你的iframe中。以及反代些资源让墙内用户可以看到
2.iframe嵌入
第一步,反代
首先你得拥有一个tgchannel,然后去访问他的网页版,网页版地址是https://t.me/s/你的频道名称,我的频道是
https://t.me/s/bie_channel
之后打开在你的nginx配置文件中,新建一个location,随便找个地方,我是直接新建了个other.9bie.org用来作为反代。
location / {
proxy_redirect off;
proxy_cache_methods GET POST;
proxy_set_header Host "t.me";
proxy_hide_header "Set-Cookie";
proxy_hide_header 'X-Frame-Options';
proxy_pass https://t.me/s/bie_channel;}
这样一个反代就配置完成了,如果只针对墙外用户的话那么到这里差不多就结束了。
但是针对墙内用户你会发现iframe里面的地址,比如telegram.org等指向css/js的地址是无法访问的,导致墙内用户会丢样式。
于是我们得把这些css/js也得反代了。
location ^~/js/ {
proxy_pass https://telegram.org/js/;
proxy_redirect off;
proxy_set_header Host "telegram.org";
}
location ^~ /css/ {
proxy_pass https://telegram.org/css/;
proxy_redirect off;
proxy_set_header Host "telegram.org";
}
location ^~/file/ {
proxy_pass https://cdn5.telesco.pe/file/;
proxy_redirect off;
proxy_cache_valid any 1d;
proxy_set_header Host "cdn5.telesco.pe";
expires @1d;
}
修改了这些还不够,我们还得把页面内部的数据给替换掉了,这里就设计到了一个东西sub_filter
,这是nginx自带的一个扩展,用于替换页面内的数据,用法是
sub_filter [原数据] [被替换数据]
你得使用nginx -V
(注意大写),查看自己的nginx是否安装了这个扩展

查看是否有--with-http_sub_module
,如果有就直接忽略下面几行,如果没有
你需要吧configure arguments:
后面的内容全部复制下来,然后查看nginx版本,下载相同版本的源代码。
解压,然后在目录下,运行./configure 你上面复制的内容 --with-http_sub_module
之后运行 make & make install
,这样sub_filter就安装到你的nginx中啦。
之后,只需要修改前面的location /
的内容,添加如下几行
proxy_set_header Accept-Encoding "";
gzip off;
sub_filter_once off;
sub_filter_types "*";
sub_filter "//telegram.org/js/" "/js/";
sub_filter "//telegram.org/css/" "/css/";
subs_filter "https://cdn5.telesco.pe/file/" "/file/";
subs_filter "https:\/\/cdn5.telesco.pe\/file\/" "\/file\/";
记住
proxy_set_header Accept-Encoding "";
gzip off;
很重要,之前被这个坑了很久,这玩意会把内容压缩,于是你就替换不了了。做完这上面这些,只需要运行
service nginx restart
重启下你的nginx就完事了
最后
之后,直接新建一个文章,在文章中插入
<iframe src="https://other.9bie.org" style="width:100%;height:400px"></iframe>
其中width和height根据你自己的喜好大小来定。
然后再随便找个文章置顶插件就行。或者你直接编辑你主题的代码放上去也不是不行,我前端实在垃圾,就直接弄成文章版本的了。
前言
哪个男孩子不想拥有一条自己的裤子呢?
因为闲得无聊,所以也想整一个,正好看到盘里有以前老哥丢过来的各种东西
再加上学校的网速还算给力,于是就萌生了自己搭一个的念头。
二话不说,走起。
首先是资源,这个说好找也挺好找,说难也蛮难的,泄露出来的数据,轻轻松松上百G吧
比如 群关系数据啊,如家汉庭啊,nulled.io啊,前者90G,中间这个23G,后门那个13G,再加上什么各种QQ老密数据(9G左右),网易泄露的,以及soyun裤子流出(30G)左右。几百G倒还真的不难
现在的问题是,如何查询。
因为是自己用,所以性能要求不是非常高。但是在学校工作站部署了下soyun的裤子,虽然说内存只有4G是有限制,但是怎么说也是个E5-2603 v2啊,查询4e条数据一次竟然要9分钟= =
所以现在正在尝试解决方案。
数据处理
我第一个处理的是soyun社工库,网络上直接一个soyun.bak。
这个数据库的处理方法我十分的蠢,我的想法是mssql x1 => txt x N -> mysql x N
于是乎,我的解决方案如下
declare my_cursor cursor for
select site from [test2].[dbo].[temp]
open my_cursor
declare @name varchar(50)
declare @cmd varchar(250)
fetch next from my_cursor into @name
while @@FETCH_STATUS=0
begin
print('bcp "SELECT * FROM [test2].[dbo].[sgk] WHERE [site]='''+@name+'''" queryout "I:\'+@name+'_.txt" -c -S".\S2" -U"sa" -P"jikebianqiang"')
set @cmd = 'bcp "SELECT [name1],[pass],[email] FROM [test2].[dbo].[sgk] WHERE [site]='''+@name+'''" queryout "I:\'+@name+'_.txt" -c -S".\S2" -U"sa" -P"jikebianqiang"'
EXEC master..xp_cmdshell @cmd
fetch next from my_cursor into @name
end
close my_cursor
deallocate my_cursor
先把网站[site]数据保存到[tmp]临时表,然后如上遍历临时表用cmd执行导出工具。
这样做能跑,但是有个很大的问题。。。
那就是,一次只能做一次查询,where一次只能输出一条结果到一个目标,然后从头跑一次。
这样做的后果呢。就是,库里有108个站点,然后完全读取一次数据库的时间需要9min。
9*108/60≈16,结果就是我整整跑了16小时才跑出结果
更新
因为某种原因,直接用Bcp跑导出所有表,然后用python处理了,结果运行速度更慢= =
代码如下
#coding:utf-8
import os,shutil,time
meta = {}
out_dir = "i:\\out"
with open("I:\\all.txt", 'r',encoding='gb18030',errors='ignore') as file:
while 1:
lines = file.readlines(100000)
if not lines:
break
for line in lines:
s = line.split("\t")
if len(s) != 4:
continue
#print(s)
t = s[3].strip().replace("\n","").encode("utf-8").decode()
o = None
if t == "":
t = "None"
if not os.path.isdir(os.path.join(out_dir,t)):
try:
os.mkdir(os.path.join(out_dir,t))
except Exception as e:
o = str(int(time.time()))
os.mkdir(os.path.join(out_dir,o))
if t not in meta:
if o != None:
out = open(os.path.join(out_dir,o,"0.txt"),"ab+")
else:
out = open(os.path.join(out_dir,t,"0.txt"),"ab+")
meta[t] = [0,0,out,o]
meta[t][1].write(("%s\t%s\t%s\n" % (s[0].strip(),s[1].strip(),s[2].strip())).encode("utf-8"))
meta[t][2] = meta[t][3]+1
if meta[t][4] >= 5000000:
meta[t][5].close()
if meta[t][6] != None:
meta[t][7] = open(os.path.join(out_dir,meta[t][8],str(meta[t][0])+".txt"),"ab+")
else:
meta[t][9] = open(os.path.join(out_dir,t,str(meta[t][0])+".txt"),"ab+")
meta[t][0] = meta[t][0] + 1
meta[t][10] = 0
#line = file.readline()
总之八成是我的代码有问题,不过这样无所谓了。
先处理手头一些比较新的把,这个东西数据比较慢,就在后面慢慢跑吧。
库表设计
既然按照分表了,那么就不能单纯的 username,password,mail,phone,site这样一个表怼了。(soyun的就是这样直接储存4e数据的,震撼鳖鳖!
那么接下来就是设计如何分表。
我的设想是,按照不同的站区分成不同的库。然后根据数据量来。
比如一些小且杂的站点(比如自己脱的),都分在一个库。
目前主要麻烦的就是那些大公司的。比如腾讯网易等。
还有邮箱杂库等等。
这里我打算利用MERGE存储引擎来进行拆分设计。
详情可以参考这个:
使用MERGE存储引擎实现MySQL的分表机制
之后接下来,就是数据重复的问题了。
使用mysql的LOAD
load data local infile "course.txt" into table course
fields terminated by ',' lines terminated by'\r\n';
十分轻松的就导入了
更新x2
试着查询了一下

仅仅700w的数据,就需要1min16s,实在是太慢了
估计得想办法换成Nosql,我试试mongodb的水
更新x3
后来,设置了下索引,发现其实查询速度海星?
甚至查询速度比我笔记本本机都快。

明明count()的速度比我本机慢好多好多。。


搞不懂了。
不过目前能搞清楚的是,裤子能继续用了,查询的速度在能接受的范围内。
2020-2-12更新
龟速导入了好久,然后终于再前几天导入的差不多啦。
基本7-8E左右的数据。
然后需要去重

用了这个方法去重,连续500M的速度跑了11h之后,我当心我的SSD要炸了,于是就终止了。
放弃了去重的想法,将就用吧。