V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  AlexGuo1998  ›  全部回复第 1 页 / 共 1 页
回复总数  7
2021-10-09 00:36:07 +08:00
回复了 nowheretoseek 创建的主题 程序员 探讨下百度网盘机器人的实现
如果想直接调网盘 API 的话,可以参考一下 BaiduPCS-Py: https://github.com/PeterDing/BaiduPCS-Py
2021-06-28 17:14:19 +08:00
回复了 withzhaoyu 创建的主题 程序员 咨询下 v 友们志愿填报的问题
个人的经验(教训?)是要报真正喜欢的专业。
我大学都报到微电子去了,结果天天想着写代码,成绩也感人,最后延毕一年今年才毕业。
不过至少最后找到大厂工作了,算是有个好结局吧。
另外就是搞清你弟弟想读计算机是不是单纯因为喜欢打游戏(
2021-06-28 16:54:46 +08:00
回复了 RE 创建的主题 问与答 只要存在 Symmetric NAT 就无法打洞(穿透)了对吗?
前几天刚好发现这个问题,仔细研究了一下。
如果允许猜测的话,不妨把对称性 NAT 分为端口有规律和无规律两种,其中端口有规律定义为“可以在一定程度上预测下几次连接的外部端口”,端口无规律定义为“多次连接中内部端口、目标 IP 、目标端口任意一个变化时,外部端口在几乎全部范围内随机变化”,则一共有五种 NAT 。
甲:全锥形 乙:IP 限制锥形 丙:IP 和端口限制锥形 丁:有规律对称性 戊:无规律对称性(用甲乙丙丁戊来标识是为了防止和别处定义的 NAT 类型混淆)
甲和乙自然不必多说,可以和任意其他 NAT 连接;丙和丙之间也没有问题。剩下五组传统意义上都是不可能的,考虑猜测和概率的情况分别讨论:

丙丁:丙针对某一内部端口有确定的外部端口( a ),丁可以预测下一次连接的外部端口( b )。丙用 a 连接丁的 b,丁连接丙的 a 。此时很有可能丁使用的外部端口是 b,即打通。
为了增加成功率,丙可以用 a 连接多个丁的外部预测端口( b1, b2...),则丁使用任意一个外部端口时都可打通。

丁丁:两边都用多个内部端口连接对方的预测外部端口(不一定是下一次的外部端口,可能是几次后的)。
不妨记丁 1 的预测端口为 a,丁 2 的预测端口为 b,开始连接时,因为使用不同的内部端口,对称 NAT 会分配不同的外部端口,即丁 1 用( a1, a2...)连接丁 2 的 b,丁 2 用( b1, b2...)连接丁 1 的 a 。
只要 a 在( a1, a2...)中且 b 在( b1, b2...)中,即打通。
这就是一楼论文说的“两个对称 NAT 连接”的方法,据作者所说,测试成功率非常高,接近 100%。我这里没有实测过。
顺便论文链接挂掉了,这里好像还能下载到: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.455.3700

丙戊:理论上是可行的,但是需要同时开大量(几百个)端口,且与概率相关。
丙用同一个外部端口( a )连接多个戊的外部端口( c1, c2...),戊用多个内部端口连接丙的外部端口( a )。
戊的内部端口不重要,重要的是 NAT 对这些端口分配了不同的外部端口( b1, b2...)。这样只要( b1, b2...)和( c1, c2...)中有一个重叠即打通。
听起来概率好像很低,但是实际上算一下还是可能的:设丙开启 m 个连接,戊开启 n 个连接,可以用以下递推公式算出打通的概率:
P(m,n) = P(m,n-1) + (1-P(m,n-1))*m/(65535-(n-1)),其中 P(m,0) = 0 。取几个数字:m=n=213 时 P=50.07%; m=n=300 时 P=74.83%; m=n=500 时 P=97.86%; m=n=600 时 P=99.61%; m=n=700 时 P=99.95%。
经过仿真,公式计算结果与仿真结果一致。不过我这里没有做实际的测试,也许会遇到开太多端口被临时封杀的情况。

丁戊:在可操作的范围内可能性很低。
我唯一能想到的方法就是丁连接戊的多个随机端口( d1, d2...),戊按顺序连接丁的多个预测端口( c1, c2...)。
记丁实际使用的外部端口为( a1, a2...),戊实际使用的外部端口为( b1, b2...),即丁第 m 次连接使用外部端口 a_m 连接 d_m,戊第 n 次连接使用外部端口 b_n 连接 c_n 。
因为丁可预测,可知( a1, a2...)与( c1, c2...)之间有较大部分重叠,取使 a_m 与 c_n 相同的 mn,判断 d_m 和 b_n 是否相同,如果相同则打通。
如果预测足够精准,每次 d_m 和 b_n 相等的概率就是 1/65535,而次数之间独立,P(m)=1-(1-1/65535)^m 。m=45425 时 P=50%。
不过两边都不需要同时打开上千个端口,可能和下面相比还算有一点微小的可能性——

戊戊:在可操作的范围内不可能。因为两边都是对不同目标端口随机选择外部端口,要打通约等于两只无头苍蝇撞上。单次连接成功的概率为 1/(65535^2)。
(当然如果两边都开 65535 个端口还不被封杀,概率还是比较高的。仿真结果不到 50%)

纯手打,如果有错还请大家纠正。
2021-03-18 20:14:57 +08:00
回复了 AlexGuo1998 创建的主题 C C++编程时是否有“成员变量全部显式使用 this”的代码风格?
@AndyAO #17 刚刚用 IDEA 试了一下,是可以产生 warning 的,用 code cleanup 功能也可以一键全部修改。不过可惜 C++ 这边不支持了。
2021-03-18 18:35:37 +08:00
回复了 AlexGuo1998 创建的主题 C C++编程时是否有“成员变量全部显式使用 this”的代码风格?
@AndyAO #12 很好的 idea 。简单搜索了一下,JetBrains 和 Visual Studio 都没看到相关的插件,VS Code 未知。甚至 Google 都只找到两个 SO 帖子讨论这个问题……(可能是关键词不对?我搜的“C++ explicit this”)所以大概得自己写插件(开坑)了。
2021-03-18 17:16:59 +08:00
回复了 AlexGuo1998 创建的主题 C C++编程时是否有“成员变量全部显式使用 this”的代码风格?
@oneisall8955 #1 C++ 的 IDE 感觉又是一个坑点了。我一般用 JetBrains 的 CLion,默认是只支持 CMake 工程的,而别人的代码可能用了各种各样的 build system 。有时候只是临时改一下代码,不想去修改 build system,结果 IDE 就识别不了,高亮几乎没法用(反而 Python 、JAVA 的目录结构都比较固定)
@hello2060 感觉现在的浏览器会自动识别,不一定需要 moov 放在头部了(当然放在头部应该更好)
上次用 Firefox 测试过:在线播放一个很大的 MP4 视频(~8GB,moov 在尾部),一开始 Firefox 直接无参数请求文件,下载了约 48KB 之后切断(可能判断没有读到 moov 块),然后用 Range 头请求了最末尾 100KB,最后从头部继续下载,结果是不必等待下载完全即可串流播放。后来用较小的文件测试结果一致,其他的浏览器应该也有类似的逻辑
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2649 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 08:05 · PVG 16:05 · LAX 00:05 · JFK 03:05
Developed with CodeLauncher
♥ Do have faith in what you're doing.