OpenWrt小记

慎哥开博客了,博客做的很好看!欢迎访问~cbsfly 请合理利用互联网,不要对国家安全造成任何威胁! 因为要做比赛所以倒腾了OpenWrt倒腾了不到一天,做个小的记录。 前天上网买的路由器昨天就到货了,淘宝,33,硬改了的。16M闪存64内存好像。 昨天和店家交流了一下,店家人真的不错。然后我就开始把店家装好的操作系统重装,这次买的路由器是可以刷官方原版的,我就下载了一个最新版的chaos_calmer。 什么是OpenWrt,简单的说,就是在你的路由器里面装个Linux操作系统。装上Linux的操作系统,是吧,你们懂得。基本上啥都能干了。 如果你家用的是极路由或者是小米路由,你要清楚,那都是深度定制的OpenWrt… 我倒腾了如下几个东西。一,中继。二,jump gfw。三,8021x校园网拨号。具体如下。 预备 首先你得有个硬件能刷操作系统的路由器。我建议某宝买硬改的,很便宜。 在ubuntu中,操作系统更新和安装软件用的是apt-get,在OpenWrt里用的是opkg(我觉得是OpenWrt Package的缩写) 第二步可以联网进行操作,也可以本地安装。当然我一直觉得联网的好,不用编译配置啥的了… 刚刷完操作系统的时候路由器的无线网默认是关闭的,需要登录打开。 因为是操作系统,所以我们可以通过ssh root@192.168.1.1来对操作系统进行操作。 刷完路由器的那个web界面叫luci。下文会用到。 没找到中文语言包,所以下文全是英文。 中继 OpenWrt可以作为无线中继。在此感谢班长和姜导提供该技能包。 所谓无线中继,就是你用OpweWrt连接无线网,然后再把这个无线网的信号扩展了。这样就解决了一个路由器信号不够强的问题。其次,前文说道,OpenWrt是个Linux的操作系统,我们安装软件需要让路由器联网。 让路由器联网有两种方式,一种直接插网线到lan口。事实证明这样我就找不到路由器的ip了… 在咨询了班长之后我选择了无线中继的方式。 这有篇百度文库的教程写得很详细了我就不对步骤进行赘述了(百度文库还能有这种好材料…)因为我刷的是最新的cc版本路由器,所以界面不太一样,但是没啥差别。我只强调一个问题。 在第一步里,一定要设置lan口的ip,不能在同一个网段。我设置成192.168.10.1,设置完成之后,OpenWrt路由器会通过上级路由器获得一个ip,通过OpenWrt这个路由连接的设备,ssh的ip地址变成192.168.10.1,web访问也变成192.168.10.1。 全部设置完就可以通过OpenWrt路由器上网了,此时ssh到OpenWrt,发现已经可以ping了。 jump gfw 前几天发朋友圈问了个敏感问题,没想到那么多人回复… 我现在是要入党的人,但是我又是程序员,有时候确实不得不那什么。 所以在此也说一下,你们有需求可以私聊我,我很乐意帮忙,具体手机和电脑怎么做我就不写了。路由器也是因为要做比赛才倒腾的。 我用的是shadowsocks的方式,也可以用vpn,我们工作室的极路由提供了vpn的接口,表示vpn太难搭建。 openwrt-shadowsocksGithub地址。 首先下载预编译的ipk到本地安装。在shadowsocks-libev找到对应的机型。我的是ar71xx,然后找到那个下载次数最多的shadowsocks-libev-spec版本。这个是针对OpenWrt的优化版本。 下载完毕之后,通过scp命令上传到OpenWrt上,先opkg update,这一步是更新源,和我们ubuntu的update一样。 接着 opkg install shadowsocks-libev-spec_2.4.3-1_ar71xx.ipk 安装,他会自动的把需要的依赖包一并下载了。到这就完成了对ss的安装。 在shadowsocks-libev-spec从v1.5.2开始可以使用luci配置界面。所以我就找了一下luci的package,所有的package都在packages列表。luci-app-shadowsocks-spec_1.3.7-1_all.ipk我的叫这个,我就下载了然后继续scp上传,然后 opkg install luci-app-shadowsocks-spec_1.3.7-1_all.ipk 之后登陆web界面,这时候就有可视化的配置界面了。 输入你的ss账号密码就可以了。但是需要在最下面添加ignore list,让国内的网站直接连接网络,不然的话像我,就没法看nba直播了,很多视频优酷什么的也不能看了… 这一步其实是关键的,新建一个后缀为list的文件,然后输入这串命令 wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /dev/ignore.list 然后把ignore的路径设置到你配置的那个文件就可以了。 这时候在开腾讯nba就能看直播了…我简直,为了看球什么都干得出来。然后再连接路由器就可以Jump gfw了~ 8021x校园网拨号 不过我们不用更换源,首先我们需要 opkg remove wpad-mini...

一月 21, 2016 · 1 分钟 · Me

念书真的很幸福

后面尽量每周都写点东西,这是对自己的要求,也是2016年我想坚持做的一件事情。作为一个要从纯技术人员逐渐转型的人,写作,是记录,也是必需品。 念书,真的很幸福。 刚刚和一帆说,你觉不觉得过去的一星期特别累,各种事情。一帆和我说,所以说啊,学习才是最轻松的。 是啊,这已经不是我第一次觉得,学习轻松。 从大二加入工作室开始,没课的时候我基本上都会来工作室写代码。因为我们有企业的项目,项目的进度要求非常高,这就意味着你的工作量在增加,需要在有限的时间完成大量的东西,是很难的。 去年的这个时候,我们做了一个医疗方面的项目,我负责iOS版本医生端全部的开发。因为开发能力加上本身任务量就大,我每天大搞从早上九点就开始开发,中午大概休息两个多小时,然后到晚上九点。这种工作强度,不止一次让我吐血。 过去的一周,我和一帆接手了工作室。出去玩的疲惫还没缓过来劲又开始各种事情,除了安排没有安排的事情之外,我们还对后面的发展和要做的东西进行了一个计划,整理工作室的很多事情。我们还进行了初期的招新。 对我个人来说,我得保持自己在一个学习的状态,技术上还需要很多的积累,不仅是对于新技术的学习还是对于已掌握技术的扩展。我还带着肾哥在学习。还和班长姜导去了一趟沙河找老师做比赛。 过去的一周,我强迫性的让自己早起来面对每天的挑战。平均每天大概在八点多一点点就开始了新的一天。晚上坚持跑步,让自己保持一个好的状态。 记得玩的时候就说,忙点好,好是好。但是,很累。 回头来说学习。 我们总觉得学习很辛苦,学习是很辛苦。但是比起工作强度来说,不那么辛苦,学习的量是一定的,但是我相信没有那么费神。大部分的人选择在最后两星期来准备考试。那么平日里只要计划好,就可以在期末的时候很好的去应对。 学习的东西是死的,计划和项目是活的。 因为你不知道未来会发生什么,所以你总在害怕去面对。 过去的一星期里,我把我的大部分精力都放在了工作室上,每天晚上会考虑后面的发展,会考虑还有哪些事情没做。如果过去的一周是考试周,我只需要计划我的复习就可以了。这个其实不是很难。 大学的学习,充满着不确定性和时间。所以剩下的时间该怎么做,是需要去规划的。正是这种不确定性,决定了你是否会累与不累。 读书的时候,除了学习之外,你有大量的时间去做除了学习之外的事情。你可以出去玩,可以选择去写代码,当然你也可以选择去堕落。 这都没什么。 我总在强调好好学习,好好学习是因为未来的选择会更多。技术又好,成绩又好能保研,那么未来都是光明的。 好好学习,不挂科,可以让你有足够的精力去面对前面的困难,而不是挂科来影响你的心情。这大概就是好好学习的意义吧。 我总在说好好学习,最后我连自己都做不到。 所以呢?为什么念书好幸福? 因为你可以追求你所想的,一旦工作,你没了金钱的来源,你有了生活的压力,你所追求的,就不能是纯粹的情怀了。

一月 9, 2016 · 1 分钟 · Me

Mac升级10.11 EI Captain 填坑

上周日更新了新版的Mac OS 10.11 EI Captain,上午在工作室升级Xcode7还有keynote等等,下午安装操作系统和各种倒腾。最后发现时间都浪费在下午软件不能正常安装上了。特此写篇博客记录一下整个填更新的填坑过程。 其实我是很反对更新的,一更新就得踩坑,但是强迫症患者没法看到有更新不去更。 下面开始正文。 1. homebrew不能使用 homebrew本身是需要Xcode的command line的,而新版的Xcode7,应该是会把之前的command line删除了..所以即使你用sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer但是你还是没有办法使用homebrew,你在使用homebrew的时候,不论什么命令,都是Failure while executing: /usr/bin/otool -L /usr/bin/install_name_tool 当然,有sudo xcodebuild -license的原因,就是你没有同意xcodebuild的license。当然这些我都试了。还是不行,后来查查发现是command line没有选中的原因。 解决方法:首先xcode-select -p一般默认是sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer 但是Xcode7你需要切换到/Library/Developer/CommandLineTools,这时候就好了。 很多人的homebrew不能用是因为权限问题,在使用homebrew doctor的时候会提醒你。这点就不说了。 2. Xtrafinder不能使用 Xtrafinder更新完之后会提醒你怎么做,这就是苹果的rootless机制导致的,开开就OK了。 我想说的就是Xtrafinder会挡住finder一部分,前天好像已经出了更新,但是源没有换,所以还是0.25.6版本。V2ex上有人问了,大家都一样,不是电脑的问题所以不要着急。 3. gem更新 gem安装的东西,反正我的是都没了…因为苹果把/usr (except /usr/local)里的东西都再见了。需要把gem的默认安装路径重新设置一下。 所以我的rails还有博客的jekyll,当然,还有我的cocoapods都挂了。需要重新安装。 网上好多方法,说自定义GEM_HOME等等。我觉得都不太好,在stackoverflow上看到一个方法很好,分享一下。 打开terminal修改~/.gemrc 增加gem: -n/usr/local/bin这样就把gem的默认安装环境换到了/usr/local/bin下,这样更新gem就没问题了。 4.Xcode的Alcatraz不在window下显示 也就自己的Mac作大死解决这个问题。 网上有很多在github提issue,我看了很多,对着做了很多。里面说的都很详细,在此不贴,最后面有链接。 基本上原因就是,你的Alcatraz没有加入Xcode的UUID。 这里说明一下,每个Xcode版本的UUID不一样,所以最好的方法是先获取Xcode的UUID。 命令是defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 最后加到一个plist文件然后重启Xcode就可以了,大部分都是这样解决了。 当然,我用这个方法没有解决。万念俱灰下,重新用了百度..想看看国内人怎么解决的,记不得在cocoachina还是csdn看到一个人说,那些方法我都没有,我把Alcatraz下载下来运行了一下就ok了… 于是乎,我上github上下载了Alcatraz,运行了一下。。我也ok了。。 基本上遇到的大坑就这几个,踩完也没啥了。 但是我app store更新完新版本的Xcode7之后再安装Xcode6,app store就会更新我的Xcode6..而且我的homebrew也是只能识别我的Xcode6了…我一直无法解决。还有我的XQuartz一直显示过期也没法解决。简直,强迫症。 最后唠两句。 最近为啥没更新博客,我会说我同时写了几份代码么…完全没有时间。。 最近的心凉的很透彻。晚上看着微信洗脸。唉,说好了四星期之后做点其他事情,这都五星期了,还在写代码。在意的东西太多,不放弃一些永远只能这样。 还有,暂时是决定考研了。 有些事情,唉,就这了,没戏的事情总在想也没啥意义..还是忙一忙充实充实就不想了。 参考链接 1.关于 OSX 升级到 EI Captain 的解决方案...

十一月 18, 2015 · 1 分钟 · Me

Mac安装Aircrack-ng

9.4号中午去外面吃完冒菜回来都快三点了,这个点尴尬的不行。于是就去工作室倒腾点东西。也不想写代码,就开始各种在mac下装软件。项目基本上暂时没有什么要特别忙的,我也不能总写,都写了慎哥就没得写了。今晚上就把之前做的东西来个小记。 想到的是破译wifi,当然最终因为各种因素没破译成功。不过中间过程还是很享受的。下面开始。 百度了一下。有一篇MACOS苹果系统下破解无线网WPA,WPA2密码。用到的主要工具是Aircrack。于是就开始倒腾了。 安装macport 首先第一步要安装macport。macport据我理解,相当于homebrew,ubuntu下相当于apt-get install。根据官网来说,安装macport最简单的方法就是下载pkg文件直接安装,但是我在下载pkg安装过程中,会出现卡死的问题。google了半天没找到解决方法。于是就下载了源代码安装,这在官网上都有说明。前面什么安装xcode的command line tools那是装机必备我就不多说了。 下载之后在官网上有说明,解压之后进入目录,进行./configure && make && sudo make install 之后需要添加环境变量,我没看懂官网的说明,自行google了一下。看到很多人的博客都写过这个问题,我在此就摘录一下。 需要将/opt/local/bin和/opt/local/sbin添加到$PATH搜索路径中。然后编辑/etc/profile,这里需要超级用户。如果用vim的话需要wq!在profile里加入下面两句 export PATH=/opt/local/bin:$PATH export PATH=/opt/local/sbin:$PATH 然后就可以了,如果要立即生效,那么需要利用source命令source /etc/profile 这样就可以用了,执行sudo port -v selfupdate更新。到这步会发现好像仿佛是被墙了。。。 安装proxychains 然后我又陷入了难题,好不容易手动编译安装成功了。结果更新好像被墙了咋办。查查查,命令行下使用代理的方法。找到一个东西,叫做proxychains。搜这个用了好久,因为我用的是ss,ss支持的时socks5,而iterm支持http,这就麻烦了。后来在v2ex上发现hzlzh问了这个问题。我就安装这个了。 安装proxychains4非常简单,直接用homebrew就可以了。brew install proxychains-ng 安装完毕要设置代理 修改/usr/local/etc/proxychains.conf 最下面 [ProxyList] socks5 127.0.0.1 1080 测试proxychain能不能用,proxychains4 curl twitter.com会显示ok。我就不截图了。 proxychain可以让它后面的命令行直接走代理的路线,而不用直接进行网络请求。 我刚刚用这个加上home cask装了macdown。还是很不错的。因为很多命令行是需要进行网络请求的。 之后就可以proxychains4 sudo port -v selfupdate了。可能有点慢,不过我这次可以正常了。 安装aircrack-ng 最后的最后,我们可以用sudo port install aircrack-ng就可以安装aircrack了。 好了,剩下的就是按照那个博客说的来破解了…到这的时候我试了一下,但是班长突然打电话然我去取自行车,我就去了~后面的就没有后面了。 后面的安排 最近项目差不多算是完成了,后面的计划可能要调整一下状态,把RAC再看看,想看看动画,然后,继续开发下一个项目了~

九月 8, 2015 · 1 分钟 · Me

Block 我所理解的回调

FOR CM AND PLUSUB 废话 开发iOS距离一年还有四个月。block的文章看了很多。也在项目中使用了,但是使用率很低,仅限于最最简单的界面传值。 我最近处于一个深度学习和补作业做实验的阶段(重点是补作业和做实验),而且经历了两个项目现在对于OC的理解又更进了一步。于是抽时间把之前下载的关于block的视频又翻出来看了一下。有一些感受写出来,以便CM和PLUSUB以后的iOSer可以很快的学习到关于block的使用。以后这样的文章都会在标题加一个FOR CM AND PLUSUB。 概述 block就是闭包,可以用来回调。 再简单一点,指向函数的指针。 我现在只会简单的使用block,下午写了个demo利用block封装了afnetworking然后在另一个界面调用afnetworking的请求。当然不复杂。 上代码吧,不然再废话都解释不清楚什么是block。 part1 block的简单定义 我现在定义一个简单的block。 {% highlight objc %} void (^myBlock)(NSString *str);//1 myBlock = ^(NSString *str) { NSLog(@"—%@", str);//2 }; myBlock(@“11111”);//3 // Outputs:—11111 {% endhighlight %} 可以这么理解,我定义了一个返回值为void类型的block。void后面跟了一个函数,但是这个函数函数名是以^开头的,需要用括号包起来,参数也需要用括号包起来。参数可以是一个int类型,可以是一个NSString类型,还可以是一个函数!可以是多个参数还可以是一个函数。当然如果是int类型的block就需要return一个返回值了。 然后我们开始对这个void类型的函数进行定义。就是令它等于一个“^+参数”然后里面像定义一个函数一样就行了。 在调用这个block的时候就直接就myBlock加参数就可以了。 我们可以打断点来看一下整个block的执行顺序。我在代码后面加了标示。 执行顺序是1 3 2,可以看到myBlock没有按照程序执行的顺序来调用而是在调用之后执行了2的代码。这个例子可能不那么明显,但是可以开始初步理解回调。 part2 传参block 下面把难度加大一点,我们把block当参数传。然后看一个block的例子。 首先来回顾一个c语言里伟大的typedef,我们开头会利用typedef定义一个block。如果不利用typedef定义一个block,那么函数传参的时候会写很多代码。一会我会详述。 {% highlight objc %} #import “ViewController.h” typedef void (^MyBlock)(NSString *str);//typedef定义一个block @interface ViewController () @end @implementation ViewController (void)viewDidLoad { [super viewDidLoad]; MyBlock tblock = ^(NSString *str) { NSLog(@"—–%@", str);//1 }; [self testBlock:tblock];//2 } (void)testBlock:(MyBlock)mBlock //如果开始没有用typedef定义的话,此处的函数变为- (void)testBlock:(void(^)(NSString *str))myblock //简单的说格式就是 “返回值 + (^) + 参数 + 名字” { mBlock(@“1111”);//3 } // Outputs:—–1111 {% endhighlight %} 在上面的代码中,我们写了一个testBlock的函数,将我们的tblock作为参数传到了testBlock函数里面,然后再testBlock里用mBlock调用了我们所写的MyBlock这个函数。...

五月 29, 2015 · 2 分钟 · Me