├── Contents └── iOS │ ├── OpenSSH.md │ └── iOS 如何进行网络测速.md ├── README.md └── images └── background-cover_.png /Contents/iOS/OpenSSH.md: -------------------------------------------------------------------------------- 1 | > iOS 逆向学习笔记:OpenSSH 的原理和使用方法 2 | 3 | ## SSH 协议 4 | SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理 Linux 系统的首选方式。 5 | 6 | 在 iOS 逆向开发中,最常用的命令是 7 | ``` 8 | ssh user@host 9 | ``` 10 | 11 | 在 iOS 越狱开发中,常用的 user 是 root 用户和 mobile 用户 12 | 13 | * root:系统中最高权限的账户,具有对系统完全的控制权 14 | * mobile:普通用户,可以操作一些普通的文件,但系统文件不可操作 15 | 16 | ## OpenSSH 17 | 18 | SSH 只是一种协议,存在多种实现,既有商业实现,也有开源实现。OpenSSH 就是其中一种常用的 SSH 实现。Cydia 的作者 Saurik 把 OpenSSH 这一软件移植到了 iOS 平台上,并且简化了安全认证密钥的繁琐,使之成为一款可以在iPhone上运行的Cydia插件。通过 OpenSSH 就可以在 Mac 上远程输入命令操作 iOS 设备。 19 | 20 | ## 如何保证安全? 21 | 22 | * 密码登陆:公钥加密,同时为了预防中间人攻击,使用了口令登陆,让主机的连接者自己去校验公钥是否正确,从而避免中间人的攻击。 23 | * 公钥登陆:就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。 24 | 25 | 该段参考自阮一峰的 [SSH原理与运用(一):远程登录](http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html),里面详细的介绍如何保证安全。 26 | 27 | ## 免密码登陆(公钥登陆) 28 | 29 | * 可以参考 [配置ssh密钥认证自动登录](https://segmentfault.com/a/1190000000481249) 30 | 31 | ## 远程传输命令 32 | scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为 “scp [参数] 本地文件 远程帐户@远程IP地址:远程目录”。 33 | 34 | 35 | -------------------------------------------------------------------------------- /Contents/iOS/iOS 如何进行网络测速.md: -------------------------------------------------------------------------------- 1 | ![](http://upload-images.jianshu.io/upload_images/852671-993aea6bf9e41bbc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 2 | 3 | 对于网络测速的需求还是比较常见的,比如常见的手机管家、360 Wi-Fi 等 App 都有网络测速的功能。近期由于业务需求也涉及到网络测速这块内容,同时自己好久没更新博客了,所以来写一下网络测速这块的一个简单总结。 4 | 5 | ## 什么是网络测速? 6 | 7 | 其实听到网络测速这个需求,第一个想到的就是 ping,在群里讨论的时候也有同学说到 ping 一下不就可以了吗?ping 和网速有什么关联和区别呢? 8 | 9 | * ping:它的全称是 Packet Internet Groper,用来测试网络是否连通,以及响应时间是多少,通常客户端也都有配置一个叫做网络诊断的功能,其实就是用到了这个 ping 10 | 11 | * 网速:顾名思义,也就是网络速度的意思。稍微专业来讲就是上传和下载时,每秒钟可传送的 **最大数据量** ,数据量的大小一般用 KB、M来衡量。 12 | 13 | 看到上面的解释,其实就明白了。ping 测的是点到点的网络延迟,而网速指的是点到点之间单位时间内的传输数据量。这个数据又可以细分为上传数据和下载数据,理论上他们的速度是一致的,但是运营商会在其中做一些手脚,导致上行的宽带一般偏小于下行的宽带。 14 | 15 | 我们平时会使用 Shadowrocket 等利器来进行翻墙上网,这个软件会显示你 Wi-Fi 和 4G 的流量消耗,同时会显示你每秒钟你的上行和下行流量是多少。这个原理其实也很简单,可以直接调用系统的接口来获取网卡的流量数据。这里显示的每秒钟的上行和下行流量,只能代表此时的流量消耗,并不能代表当前的网速是多少,网速应该是充分利用带宽后,单位时间内可以传输的**最大数据量** 16 | 17 | ![](http://upload-images.jianshu.io/upload_images/852671-a270c491e6447a3a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 18 | 19 | 20 | ## 常见的网络测速方案 21 | 22 | 通过调研发现,目前常见的网络测速方案只有两种: 23 | 24 | * 方案1:通过上传和下载数据包,使用 TotalSize / TotalTime 来计算真实的上传和下载速率是多少 25 | 26 | * 方案2:通过读取网卡数据来计算,读取上一秒的整体流量消耗 T1,然后读取当前的流量消耗 T2,那么 T2 - T1 其实可以表示为当前的一个网速情况。同时这个流量数据是可以区分蜂窝网络、Wi-Fi的,也可以区分哪些是上行流量,那些是下行流量。 27 | 28 | 两种方案各有优劣,可以在合适的场合来选择对应的方案 29 | 30 | * 第一种方案感觉是比较准确,这个时候是真实的在下载或上传数据,比较充分的利用了当前的带宽,计算的网速也比较接近真实的网速值。但是蜂窝网络下,会消耗用户的少量流量。 31 | 32 | * 第二种方案在下载和上传东西时,计算的值和第一种方案比较接近。但是如果当前系统内没有 App 在被使用,处于静止状态的话,其实当前读取的流量值是比较小的,无法反映出网速情况,但是可以实时反映流量消耗状况。 33 | 34 | 对于两种方案,我写了一个简单的 Demo 放在了https://github.com/joy0304/Joy-Demo/tree/master/LDSpeedTest,这个只是一个很粗糙的 Demo,没有区分 Wi-Fi 和 蜂窝网络,同时也只计算了下行的网速,如果要在项目中使用,需要完善后才可以上线使用。 35 | 36 | ## 延伸 37 | 38 | 其实上面谈到的真实下载或上传数据来进行测速,这个只是单个 TCP 连接的情况,如果多个 TCP 连接的话,肯定对带宽的一个利用情况会比单个 TCP 连接更加高效,测出来的网速值也更加准确。 39 | 40 | 同时由于 TCP 和 UDP 协议本身特点的差异,TCP 测速和 UDP 测速的结果也会不同,可以根据业务的要求来选择恰当的方案。对于网络测速,业界已经有很多强大的工具,有兴趣的话可以体验下 iperf 等工具。 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Joy Blog 2 |

3 | 4 |

5 |

6 | 7 | 8 | 9 | 10 |

11 | 12 | ## 📖 目录 13 | 14 | Latest:[iOS IP 直连原理剖析](https://www.jianshu.com/p/63a94cb46cd2) 15 | 16 | 17 | ## 📱 iOS 18 | 19 | | Topic | Version | Article | 20 | |:-------:|:-------:|:------| 21 | |内存管理|| [【2016.02.24】先弄清楚这里的学问,再来谈 iOS 内存管理与优化(一)](http://www.jianshu.com/p/deab6550553a)
[【2016.02.26】先弄清楚这里的学问,再来谈 iOS 内存管理与优化(二)](http://www.jianshu.com/p/f95b9bfda4a0)
[【2016.06.15】引用计数带来的一次讨论](https://www.jianshu.com/p/e3690f3e4675)
[【2017.03.25】各个线程 Autorelease 对象的内存管理](https://www.jianshu.com/p/f87f40592023)| 22 | |APM||[【2017.02.24】移动端监控体系之技术原理剖析](http://www.jianshu.com/p/8123fc17fe0e)
[【2017.03.29】让人懵逼的 iOS 系统内存分配问题](http://www.jianshu.com/p/fcbb9a472633)
[【2017.03.31】移动端网络常见问题及优化对策](http://www.jianshu.com/p/f28dd995d2dc)
[【2017.04.21】关于 iOS HTTP2.0 的一次学习实践](http://www.jianshu.com/p/2e7200bd5b79)
[【2017.08.22】iOS Crash 捕获及堆栈符号化思路剖析](http://www.jianshu.com/p/29051908c74b)
[【2017.09.04】浅析移动蜂窝网络的特点及其省电方案](http://www.jianshu.com/p/6164c4e7e0d0)
[【2017.09.23】如何精确度量 iOS App 的启动时间](http://www.jianshu.com/p/c14987eee107)
[【2018.01.20】iOS 如何进行网络测速](https://github.com/joy0304/Joy-Blog/blob/master/Contents/iOS/iOS%20如何进行网络测速.md)| 23 | |Runtime||[【2016.03.25】刨根问底:对于 self = [super init] 的思考](https://www.jianshu.com/p/9b36e1b636d8)
[【2016.08.02】读 Runtime源码:对象与引用计数](https://www.jianshu.com/p/49d483bbfb44)
[【2016.08.02】读 Runtime 源码:类与对象](https://www.jianshu.com/p/aae1ea159d82)
[【2017.03.20】如何为一个实例动态替换方法](https://www.jianshu.com/p/fde1e01aec5c)| 24 | |基础知识||[【2016.01.25】Snapkit 与 AutoLayout 优雅布局](https://www.jianshu.com/p/3429ac5a4e4d)
[【2016.03.05】在 iOS 开发中如何优雅地进行图片缩放?](https://www.jianshu.com/p/af2d471f7b9c)
[【2017.08.23】iOS Device ID 的前世今生](https://www.jianshu.com/p/c3c837ee80ff)| 25 | |翻译|Swift 2.0 & 3.0

WWDC 2017|[【2016.06.25】[译]七个Swift中的陷阱以及如何去避免它们]()
[【2016.06.07】Using Sleep Analysis in Healthkit with Swift]()
[【2016.07.27】A Fancy Animation with StackView](https://www.jianshu.com/p/e6943f4ac1e2)
[【2017.09.27】WWDC 2017:Your Apps and Evolving Network Security Standards](https://www.jianshu.com/p/dbb82564ac19)| 26 | |网络||[【2016.02.12】计算机网络中的TCP/UDP协议到底是怎么回事(一)](https://www.jianshu.com/p/8be9b3204864)
[【2016.02.16】计算机网络中的TCP/UDP协议到底是怎么回事(二)](https://www.jianshu.com/p/eab86c0d1612)
[【2018.02.13】iOS IP 直连原理剖析](https://www.jianshu.com/p/63a94cb46cd2)| 27 | |iOS 操作系统||[【2016.08.02】Low-Level Programming:Kernel](https://www.jianshu.com/p/5304a95c4eaf)
[【2016.09.04】趣探 Mach-O:文件格式分析](https://www.jianshu.com/p/54d842db3f69)
[【2016.12.08】来谈谈 Mac OS X 内核](https://www.jianshu.com/p/f0f50d471312)
[【2016.12.08】点击 Run 之后发生了什么?](https://www.jianshu.com/p/d5cf01424e92)
[【2017.01.25】趣探 Mach-O:加载过程](https://www.jianshu.com/p/8498cec10a41)
[【2017.02.10】趣探 Mach-O:FishHook 解析](https://www.jianshu.com/p/9e1f4d771e35)
[【2017.09.08】iOS 如何获取 Mach-O 的 UUID](https://www.jianshu.com/p/9201d5e34eb6)| 28 | 29 | 30 | ## 🔥 读书笔记 31 | 32 | | Topic | Version | Article | 33 | |:-------:|:-------:|:------| 34 | |产品经理||[【2017.03.02】《增长黑客》读书笔记](https://www.jianshu.com/p/8742ad64c3b5)| 35 | 36 | ## ♥️ 感谢 37 | 38 | 感谢您的 Star,感谢您的阅读! 39 | 40 | ## ❗️ 勘误 41 | 42 | + 如果在文章中发现了问题,欢迎提交 PR 或者 issue,欢迎大神们多多指点🙏🙏🙏 -------------------------------------------------------------------------------- /images/background-cover_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joy0304/Joy-Blog/73b593dc1364e71d520636eb0b228fbbf7c522ec/images/background-cover_.png --------------------------------------------------------------------------------