你好!谢谢你发了这首歌!
这首歌,是我原本打算明天发的!但是刚好看到你发了!
省了我自己发帖子!再次表达感谢!
你好!谢谢你发了这首歌!
这首歌,是我原本打算明天发的!但是刚好看到你发了!
省了我自己发帖子!再次表达感谢!
今天发帖到达上限了
明天继续吧。。。
圆月弯刀BGM 3
歌名:渚と小夜子
我还很喜欢 姬神 的音乐!
youtu.be/yaxY6T7amtc歌名:舞鳥
youtu.be/NEUsfRRYkoI歌名:遠い日、風はあおあお
youtu.be/l2ATTW0VBBo歌名:Earthflame
youtu.be/XbuUQXpaouw歌名:Evening Poem
youtu.be/TSNgXWS-53k歌名:十三の春
youtu.be/zRJDKc_cSC8歌名:ひとひらの雪
@rebecca #24 我最近心情不好,情绪低落。的确每天都想死啊,我也的确很希望有个地方发泄啊!
我说过最近暂时离开品葱,就是因为知道发泄在品葱,会被人抓住话柄!
只是没想到,我这样做还是被人加了tag三退品葱!
品葱的人,都知道我被家里人监视生活。想自杀,家里人肯定会发现阻止我。怎么可能成功呢?
@Phragmites #7 谢谢你!
如果你方便,就封到今年平安夜吧。我上去陪大家过圣诞节!
@小二 #10 cf的CDN,其实是反向代理。这么做为的是v2rayuser说的,和其他网站共享IP,导致GFW不敢冒然封IP。
至于不公开真实IP,是为了防止共产党对自己的服务器进行DDoS,因为暴露了真实IP,共产党就可以对这个IP进行DDoS。你想想,DoH返回的是CDN的地址,封不封你的IP,墙内不都可以正常访问2049么?
@v2rayuser #9 你和小二说得对。因为开了CF的CDN,和其他网站共享了IP,GFW是不能随便封IP。
回到你说的GFW手段上。对GFW最棘手的是ESNI。但是却特别好破解,只要封掉所有的DoH服务器就可以了。
使用传统的DNS服务器,无法做到ESNI,我已经写了代码讲解,说明了原因。
公开的DoH服务器全封杀了就可以了。如果是自己搭DoH服务器,说明自己在墙外有服务器,既然有服务器,直接v2ray就可以一次性搞定,也没有必要v2ray和doh都部署了。
和DoH服务器的TLS连接,是SNI方式的,不是ESNI。我也解释过了。所以,DoH部署到CDN上,也可以根据SNI精确RST掉。
当然了,可以使用IP方式直接访问DoH服务器,这样会导致GFW直接封杀1.1.1.1这个IP。
@rebecca #16 我每天都想去死。活着一点都不开心。
所以,我希望的是别人活着别和我一样痛苦。
我希望大家都得到幸福。
你不是也喜欢最后的旅行么?你的朋友讨厌你 了,就是世界不喜欢你了。
某些人不是你的朋友,他们不属于你的世界。别去在意不是你的世界对你的看法。
@v2rayuser #6 以下是我的个人理解:
v2ex上很多人会联系我,说自己的VPS 的IP被封了。其实64,两会期间,封IP更猖獗。既然共产党连私人翻墙的VPS的IP都封杀,为什么不封杀品葱的ip呢?
我觉得对共产党来说,封杀一个品葱IP,是非常简单的事情。
两种可能:
1.共产党高层,觉得品葱只是BBC CNN VOACHINESE 级别,给个SNI RST待遇就很给面子了
2.GFW内部,有我们的同志,所以不封杀品葱IP
关于CDN,我觉得你有误解。品葱没有使用前置域名,所以不需要封杀CDN的ip,封杀品葱ip就可以了。
关于前置域名用法,参考迷雾通
revProx := &httputil.ReverseProxy{
Director: func(req *http.Request) {
log.Println("reverse proxying", req.Method, req.URL)
req.Host = binderHost
req.URL.Scheme = binderURL.Scheme
req.URL.Host = binderURL.Host
req.URL.Path = binderURL.Path + "/" + req.URL.Path
},
req.URL.Host = binderURL.Host 这个是前置域名,req.Host = binderHost 这个才是真实地址。
如果我是GFW,只要 TCP RST 所有品葱IP的443端口就可以了。不需要墙掉所有的CDN IP地址。
回到反向代理,我经常上反向代理网站,Google会提示这个是钓鱼网站。连Google都可以识别反向代理网站,我觉得GFW做不到,我反正不信。
最好的方法其实是v2ray的websocket,就是你配置一个随机的websocket path,因为GFW是猜不到这个path的,如果是你path是/ 那么大概率被墙.。。建议path 是一个随机的地址 /psdfjklsadfaksdlhgdjkas
类似这样的
@solids #5
仅考虑代理软件,代理软件会去向目标网站申请证书。而且没有校验证书是不是有效。
如果这个时候被GFW中间人攻击,代理软件会忽略,导致中间人攻击。
https://github.com/URenko/Accesser/ 官网写的 支持python3.7版本
https://docs.python.org/3/library/ssl.html
ssl.match_hostname 这段 Changed in version 3.7: The function is no longer used to TLS connections. Hostname matching is now performed by OpenSSL.
同时 Verifying certificates When calling the SSLContext constructor directly, CERT_NONE is the default. Since it does not authenticate the other peer, it can be insecure, especially in client mode where most of time you would like to ensure the authenticity of the server you’re talking to. Therefore, when in client mode, it is highly recommended to use CERT_REQUIRED. However, it is in itself not sufficient; you also have to check that the server certificate, which can be obtained by calling SSLSocket.getpeercert(), matches the desired service. For many protocols and applications, the service can be identified by the hostname; in this case, the match_hostname() function can be used. This common check is automatically performed when SSLContext.check_hostname is enabled.
Changed in version 3.7: Hostname matchings is now performed by OpenSSL. Python no longer uses match_hostname().
然后开始看代码201-204行
if self.host in setting.config['alert_hostname']:
server_hostname = setting.config['alert_hostname'][self.host]
else:
server_hostname = None
人话版本:如果代理软件认为域名 在 https://github.com/URenko/Accesser/blob/master/template/pac 文件的domains里的话,同时,域名不在https://github.com/URenko/Accesser/blob/master/config.json.default 的alert_hostname的话,则把SNI信息去除,否则改用 json里的域名
也就是说,代码是删除了SNI信息来完成规避SNI RST,这样GFW伪造一个证书,就可以骗过代理,因为代理不会检查证书
@张怀义 #3
第一个问题,本地浏览器发起TLS请求,代理软件截获。删掉了SNI,转发给服务器。服务器返回了证书,但是会有告警,代理软件忽略了告警,所以可以上网。也因为忽略了告警,如果出现GitHub那样的伪造的证书,也会被许可,这样就被中间人攻击了。
第二个问题,GFW会模拟正常的浏览器访问这些反向代理服务器,根据应答报文,就能知道这个是代理服务器了。就是GFW扫描流量,发现可疑TLS连接,就会模拟浏览器去尝试访问。所以v2ray模拟websocket的时候,才会伪造一个网站,因为GFW会自己嗅探
@小二 麻烦把开头这句话删了,谢谢!
先啰嗦一句,估计这是全网唯一一篇中文讲解ESNI的文章。其他语言有没有,我就不知道了。
@Phragmites #1 我希望可以临时禁止登陆。但是懦夫斯基不允许。先这样吧
你也知道,我登录也只是发发音乐,其实也不做什么的
@rebecca #2 不知道为什么,明明被你禁止登录,我却可以登录了
@rebecca #12
我真心希望每个人幸福!但是,我希望这个幸福是大家自己双手努力得到的,而不是其他人的施舍。
我不相信有谁是救世主,你不是,我更不是。我们做的,不是拯救世界,只是去品葱分享自己力所能及的力量。
我很羡慕你,你有我无法企及的智慧和能力。但是你应该明白,这些虽然可以让你过上幸福的生活,但是没法左右其他人的想法。如果你和其他人观点不一致,为什么不选择沉默?
你说你被骚扰,我表示理解。这样吧,你可以在2049骚扰我。我不反抗就是了。
你看过《钢之炼金术师》么?伊修瓦尔的难民是这么劝斯卡的“用仇恨去对抗仇恨,只能带来更多的仇恨”
也许你说没有仇恨,我想说,没有仇恨就不要记那些矛盾了。
也许你说自己忍让了,我想说,忍无可忍,无需再忍。你可以爆发,而不是现在这样拖泥带水的方式。
大不了不待品葱就是了。我不明白,你希望得到什么结果?
如果你想留下,只能和站长搞好关系,而不是现在这样。
如果你想离开,那就离开,没必要留恋。
我这个人只看结果,如果迟早要走,我会选择现在就走。而不是去挑个良辰吉日。
听这个版本好了
第一个问题
就是这次GitHub的中间人攻击,原理一模一样。不建议使用这个方式,很容易被中间人攻击。
第二个问题
反向代理肯定可以,但是GFW可以主动嗅探。你的反向代理服务器马上就会被墙。不可行!
dig TXT 2049bbs.xyz +short
这条命令,可以查到 2049 的esni record
传统过程:
1.火狐向传统DNS请求 Google的IP地址
2.火狐连接得到的IP地址,并给出带SNI的ClientHello
3.正常浏览网页
DoH + ESNI过程
1.火狐通过DoH请求Google的IP地址,并得到TXT record
2.火狐根据TXT record得到公钥,和自己的私钥,计算得到AEAD的密钥
3.火狐用AEAD密钥加密了SNI
4.火狐连接Google的IP地址,并发起TLS握手,其中SNI字段被加密了
5.正常浏览网页
代码流程:
第一步
firefox\netwerk\dns\TRR.cpp 文件的 TRR::SendHTTPRequest() 发起了DoH请求,查询服务器的IP地址
同文件的TRR::On200Response(nsIChannel* aChannel)函数解析了DoH的应答,根据TXT字段,设置了公钥
第二步
firefox\security\nss\lib\ssl\tls13esni.c 文件的 SSLExp_SetESNIKeyPair 把得到的record记录,设置到 ss->esniKeys = keys; 里去,完成了服务器公钥的设置
第三步
firefox\security\nss\lib\ssl\ssl3con.c 文件的 tls13_SetupClientHello 开始组装ClientHello报文,和ESNI相关的这行
rv = tls13_ClientSetupESNI(ss);
firefox\security\nss\lib\ssl\tls13esni.c的tls13_ClientSetupESNI函数 调用 tls13_CreateKeyShare函数,得到
ss->xtnData.esniPrivateKey = keyPair;
ss->xtnData.esniSuite = suite;
ss->xtnData.peerEsniShare = share;
第四步
firefox\security\nss\lib\ssl\ssl3ext.c 文件的 ssl_ConstructExtensions 开始组装clienthello的ext部分
重点是
rv = (*sender->ex_sender)(ss, &ss->xtnData, buf, &append);
其中 ex_sender 函数指针指向 static const ssl3ExtensionHandler clientHelloHandlers[] 的 ex_sender
因为我们关心的是ESNI,所以看 tls13_ServerHandleEsniXtn, 每种ext都有自己的ex_sender函数,挺方便扩展的
第五步
firefox\security\nss\lib\ssl\tls13exthandle.c 文件的tls13_ClientSendEsniXtn函数
aead = tls13_GetAead(ssl_GetBulkCipherDef(suiteDef));
得到了具体的aead算法加密函数,并调用 tls13_ComputeESNIKeys 得到了AEAD的密钥
rv = aead(&keyMat, PR_FALSE /* Encrypt */,
outBuf, &outLen, sizeof(outBuf),
SSL_BUFFER_BASE(&sni),
SSL_BUFFER_LEN(&sni),
SSL_BUFFER_BASE(&aadInput),
SSL_BUFFER_LEN(&aadInput));
最后调用aead函数加密sni,得到esni字符串outBuf,并完成最后的ext组装!
@张怀义 我讲完火狐的ESNI加密流程代码分析了
@v2rayuser 我解释下你的DoH发起的时候,有没有ESNI的问题。
首先DoH的地址,可以是这样的 https://1.1.1.1/dns-query
也是可以 https://dns.couldflare-dns.com/dns-query 这样的
如果是第一种情况,因为是IP地址,自然不存在SNI,也就不可能存在ESNI
如果是第二种情况,因为是域名,所以要先去查这个域名的具体IP,也就是用传统的DNS查找
在about:config配置页,输入 network.trr.bootstrapAddress 这个配置后面填入具体的DNS地址
完整过程就是火狐,先从network.trr.bootstrapAddress 配置的DNS地址,查找具体的IP,再发起TLS连接。这个时候,没有使用DoH,用的是传统的DNS,所以SNI没有加密
火狐使用ESNI,必须配合DoH,使用传统的DNS是无效的
@v2rayuser #44 你应该是没有理解DoH和ESNI,所以这么问,我开个新帖子具体解释下
@rebecca #7 我知道不是你加的tag。什么我的问题?
@rebecca #9 我只是给了她我的账号密码,让她看看我们的私信。当时你说我们讨论她年纪,所以给她密码看看私信!
这有什么好炫耀的?
后生可畏。。。
看了这么多?
@小二 #10 可以看看能不能在首页,标题太长截断 后面追加... 这样的方式显示?
我觉得男生可以给女生密码啊,女生也可以给男生啊。
哎,感觉是一个很有争议的话题,还是不趟浑水了
@张怀义 #8 《一点旧一点新》我觉得挺好的。师太的小说少看吧
@小二 #3
左边的标题比较短,右边的标题比较长
导致右边item的高度比左边高,最后的效果就是右边比左边长
限制标题长度,估计可以解决这个问题
@饱读书名 #11
11个硬币里选择2个硬币 C(11,2) = 55 种组合 每次使用天平,有<,=,>三种情况,使用4次,可以得到3^4次方,81种结果
根据信息论得知,通过可以设计一种编码方式,实现用一个3进制的数来表示对应的一个组合
用枚举的方式去找到这个对应关系。 我贴的代码,就是在用枚举的办法,遍历去找这个对应关系。 具体由两种方案编码
方案1
ABC-DEF
BEH-CDJ
DGH-EIJ
AGI-FHJ
方案2
ABC-DEF
DGH-EIJ
AGI-BHJ
CDEHI-ABFGJ @小二 #4
这个是IBM自己研发的编程语言,类似LINGO
execute 这个关键字 ,类似 main函数
subject to 这个表示设定限制条件
不知道你学过线性优化没有
y < 7*x + 3 (1)
y < 8*x + 20 (2)
求y的最大值
subject to 类似 条件1,2
execute 相当于求y的最大值
@饱读书名 #3 对不起,你说的对。原题目是说2枚比其他轻。是我的问题
@Phragmites #40 感情的事情,刚开始大家都觉得忘了,现在想起来,是因为看到了当时留下来的东西,记忆就自己回来了。
只是都是甜蜜的记忆,回忆起来却是苦的。
@小二 #37
很古老了,当年知道的是老品葱。有一次不知道什么原因,找到了新品葱。
偶尔看看你们写了什么,那时候也没几个人说话,你那个时候叫小二8964,头像是新垣结衣
后来一次上品葱,一只鹿儿说自己借你的尸体发了个帖子。我是没看她发的内容,只是明白了你离开了
我有老年痴呆,很多东西记不清了。。。
我印象里,我注册品葱一个星期后就是管理员了。。。
也许刷声望太快了,被某些人排挤。。
各种人怀疑我的性别,怀疑我的年龄,怀疑我的职业。。。
明明只需要关心我说了什么就好了,老是研究我干嘛
@梅菲斯特 #5 在水楼里说要看《飞鸟不鸣》是你么?还是羊城?
@小二 #33
你退葱以后,我才注册,有印象才神奇。
我怀疑品葱某些人怀疑我是BE4之类的。。。
小说的话,我觉得《爱书的下克上》很好看!
@梅菲斯特 #3
好吧。我觉得那些都很好看。。。男生不喜欢看。。。
爱书的下克上
CLANNAD
寒蝉鸣泣之时
Angel Beats
太多了,我有很多想推荐你看怎么办。。。
@小二 #31 能不能把上面的大叔都换成lisa。。。
我习惯别人叫我lisa
我在品葱,也是为了推广小说,那些被共产党封杀的小说。。。
东京不太热【回应版】
youtu.be/MuUlJGgSw1w@小二 #29
额。。。
你是第一个叫我大叔的。。。
我不是程序员。我在品葱,更多是发些情感小说和音乐。。。
我看的小说动漫电影电视剧,听的音乐,N多东西被共产党封杀了,所以跑到墙外备份这些东西。
所以发现了品葱,在品葱反共,是因为共产党封杀我看的小说之类的。
题目非常难!!!
我先给答案
using CP;
int nbTrials=4;
range trials=1..nbTrials;
int n=11;
range coins=1..n;
tuple comb // the light ones
{
int x;
int y;
}
{comb} combs={<i,j> | ordered i,j in coins}; // i and j are the bad coins
dvar boolean x[trials][coins][1..2]; // 4 trials n coins right and left side
dvar int y[combs][trials] in -1..1; // result of the weight -1 : less 0 : equal 1 : more
subject to
{
// same number of coins both side
forall(i in trials) sum(j in coins) x[i][j][1]==sum(j in coins) x[i][j][2];
// a coin is either left or right or not there
forall(i in trials) forall(j in coins) x[i][j][1]+x[i][j][2]<=1;
// not empty
forall(i in trials) sum(j in coins) x[i][j][1]!=0;
// results of the balance
forall(c in combs)
forall(i in trials)
y[c][i]
==
sgn(x[i][c.x][1]+x[i][c.y][1]-x[i][c.x][2]-x[i][c.y][2]);
// To be able to find the fraud
forall(ordered c1,c2 in combs) or(i in trials) (y[c1][i]!=y[c2][i]);
}
execute
{
function display(v)
{
return String.fromCharCode(64+v);
}
for(i in trials)
{
for(var j in coins) if (x[i][j][1]==1) write(display(j));
write("-");
for(var j in coins) if (x[i][j][2]==1) write(display(j));
writeln();
}
}
ABC-DEF BEH-CDJ DGH-EIJ AGI-FHJ and ABC-DEF DGH-EIJ AGI-BHJ CDEHI-ABFGJ
@小二 #12
你绕不开js,那是因为你开发web的缘故。可以试试我上面说的行业。都不需要js的
@electron8964 #13
有个小说《爱书的下克上》,女主角一心想当图书馆里,我是一样的
我觉得小二发帖的时候,情绪不好
只是希望我的歪楼,可以转变大家的心情,在屏幕前自己笑一笑,忘记不开心的事情
现在大家应该忘了自己不开心的情绪了,收工~
@Phragmites #27
不是的,我是想起了初恋。。。
等你有一天长大了,结婚了。如果和我一样的情况,保留着初恋的一些东西,几十年后再看到,也会想起过去。只是你们不会有我这么大触动罢了
@electron8964 #6 我只是一个图书管理员而已,不是技术大牛
@小二 #8 我知道啊,但是RoR的设计理念非常先进,我觉得其他语言的web框架都是对RoR的模仿而已
而且我已经说了,自娱自乐推荐RoR,找工作的确是没希望了
我是看着Ruby China起来,看着它没落。。。都去玩Erlang了
Erlang和OCaml我觉得也不错, Erlang在通信行业还是可以找到饭碗的,工资也不低,
OCaml可以去Jane Street看看,类似F#,金融行业,工资不低啊
但这些都不是web开发主力语言。
不同行业,语言不同,隔行如隔山。比如,我看人工智能的时候,会python更多,主流框架tensorflow pytorch keras
比如量子力学 python
统计学 python R语言 SPSS
建筑 matlab maple lingo
金融 F# OCaml
以上内容,我都不会,但是都用过这些编程语言。。。
再来写冷门的~
IBM有一个叫ILOG的编程语言。。。我感觉很牛逼。。。
算了。。。不说了,说太多,把自己是谁都泄露了
对于小白的建议
先去学习Ruby on Rails,等你入门了,基本就可以自己写个BBS了
然后学习下RESTFul 规范,让你学会约束自己的代码【培养CRUD思维方式】
最后,网上搜索下前后端分离,前端可以看看vue,我觉得挺好用的!
写web,万变不离其宗,说到底也就是CRUD+js画界面
前端,html+js+css三板斧而已,MDN上学习,一个下午就搞定了
后端,我建议RoR入门,或者python入门。真的玩进阶版,php已经淘汰了,估计是golang会是将来的趋势,国内目前java为主
如果是找工作,建议java或者golang,如果是自娱自乐,推荐RoR和Python