ubuntu 安装 Redis

ubuntu 自带的 redis 版本太老了,居然是去年1月的版本。决定自己编译安装新版本。

1
2
3
4
5
6
7
sudo aptitude install build-essential
sudo aptitude install tcl    # 可能需要指定版本
wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
make test

redis-server Redis 服务器文件.
redis-sentinel 守护程序 (监控和故障转移).
redis-cli 命令行界面工具.
redis-benchmark 基准测试.
redis-check-aof and redis-check-dump 损坏数据修复工具.

手动拷贝文件到需要的地方时一个好主意。

sudo cp src/redis-server /usr/local/bin/
sudo cp src/redis-cli /usr/local/bin/
也可以使用 make install.

测试时出现过下面的错误,原因是内存不足,完整测试大约需要300M内存,加大内存即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[err]: Slave should be able to synchronize with the master in tests/integration/replication-psync.tcl
Replication not started.
[ok]: AOF rewrite of list with linkedlist encoding, int data
[ok]: EVAL does not leak in the Lua stack
[ok]: EVAL processes writes from AOF in read-only slaves
[ok]: We can call scripts rewriting client->argv from Lua
[ok]: Call Redis command with many args from Lua (issue #1764)
[ok]: Number conversion precision test (issue #1118)
[ok]: String containing number precision test (regression of issue #1118)
[ok]: Verify negative arg count is error instead of crash (issue #1842)
[ok]: Correct handling of reused argv (issue #1939)
I/O error reading reply
 
[exception]: Executing test client: I/O error reading reply.
I/O error reading reply
    while executing

参考:

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-redis

http://redis.io/topics/quickstart

Redis 命令参考

http://redis.readthedocs.org/en/latest/index.html

持久化(persistence)

http://redis.readthedocs.org/en/latest/topic/persistence.html

socket.io socket.join 房间名称不允许带” . “,怎么都发不出去消息,试了半天把房间名里面的.去掉了正常了。

一个客户端加入了 gdebug.ping 房间,服务器用 socket.to(“gdebug.ping”).emit(“gdebug.info”,data); 发消息,怎么试就试收不到。。。

最后发现把 . 去掉,改成 gdebug ping 就能收到消息了。

socket.io 文档太简单了,很多资料都没有。

解决 ElementTree 无法处理中文,UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 76-99: ordinal not in range(128)

ET.fromstring 传进去 unicode 字符串提示 UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 76-99: ordinal not in range(128)。

encode(‘utf-8′) 后传进去提示 ValueError: multi-byte encodings are not supported,不支持多字节编码。

python 的中文支持真是头痛,这个如果用 sys.setdefaultencoding=’utf-8′ 可以解决,但是觉得直接为了这个直接修改了全局编码不太好,最后发现可以用如下代码解决:

1
2
3
4
5
6
7
8
9
try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET
 
 
utf8_parser = ET.XMLParser(encoding='utf-8')
tree = ET.parse(StringIO(r.text.encode('utf-8')), parser=utf8_parser)
root=tree.getroot()

https://gist.github.com/GameXG/89b92a9a94456ff2da85

Android Studio 发布时不混淆代码及解决 Gradle DSL method not found: ‘runProguard()’ 错误

刚开始使用 Android Studio 结果发布时不混淆代码,已经在设置里面配置了 proguardFile ,但发布时还是没有混淆代码,也没有生成mapping.txt文件.
从网上搜索出来的全是

buildTypes {
release {
runProguard true
proguardFile ‘proguard-rules.txt’
}

增加了 runProguard true 后直接报如下错误:
Error:(41, 0) Gradle DSL method not found: ‘runProguard()’
Possible causes:

  • The project ‘Cardboard’ may be using a version of Gradle that does not contain the method.
    Gradle settings
  • The build file may be missing a Gradle plugin.
    Apply Gradle plugin
  • 无奈跑到 Android Tools Project Site 翻文档发现0.14.0 (2014/10/31) runProguard 改名成了 minifyEnabled ,照着操作就可以了.

    参考:

    http://tools.android.com/tech-docs/new-build-system

    http://tools.android.com/tech-docs/new-build-system/user-guide

    http://developer.android.com/tools/help/proguard.html

反编译apk res\values-en\strings.xml:154: error: invalid symbol: ‘do’ 错误解决

出现这个错误的原因是apk加密混淆时按 a、b、c…aa、ab 的顺序重新生成的资源名称结果轮到 do 和关键字一样了。解决办法是重命名,直接把所有的资源文件全部打开然后替换 “do” 到 “d_o” , “if” 到 “i_f” 。就可以解决这个问题。

稍微记一下,现在 django 关调试模式需要配置 ALLOWED_HOSTS = [] 否则 Bad Request (400)。

稍微记一下,现在 django 关调试模式需要配置 ALLOWED_HOSTS = [] 否则 Bad Request (400)。

ALLOWED_HOSTS 填的是允许的域名列表,可以用 ‘*’ 来泛匹配。

今天早上部署 django 网站的时候被坑的不轻,根本找不到错误日志,最后无奈本地关调试模式 runserver 后看到提示才知道的。

python 使用 pycrypto‎ 实现 AES 加密解密

http://www.voidspace.org.uk/python/modules.shtml#pycrypto 有 windows 下编译好的包,直接安装就可以。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import hashlib
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
>>> def encrypt(key,text):
        # 密钥key 长度必须为16(AES-128), 24(AES-192),或者32 (AES-256)Bytes 长度
        # 所以直接将用户提供的 key md5 一下变成32位的。
	key_md5 = hashlib.md5(key).hexdigest()
        #  AES.MODE_CFB 是加密分组模式,详见 http://blog.csdn.net/aaaaatiger/article/details/2525561
        # b'0000000000000000' 是初始化向量IV ,16位要求,可以看做另一个密钥。在部分分组模式需要。
        # 那个 b 别漏下,否则出错。
	cipher = AES.new(key_md5,AES.MODE_CFB,b'0000000000000000')
        # AES 要求需要加密的内容长度为16的倍数,当密文长度不够的时候用 '\0' 不足。
	ntext = text + ('\0' * (16-(len(text)%16)))
        # b2a_hex 转换一下,默认加密后的字符串有很多特殊字符。
	return b2a_hex(cipher.encrypt(ntext))
 
>>> def decrypt(key,text):
	key_md5 = hashlib.md5(key).hexdigest()
	cipher = AES.new(key_md5,AES.MODE_CFB,b'0000000000000000')
	t=cipher.decrypt(a2b_hex(text))
	return t.rstrip('\0')
 
>>> encrypt('111','012340000000000000000000000000000000000000056')
'a37e0dda14a9678fcc82b8e16387c498c7206122195b1b91269a637322d776c48a28342d24b31879a35a0e77480a1dab'
>>> decrypt('111','a37e0dda14a9678fcc82b8e16387c498c7206122195b1b91269a637322d776c48a28342d24b31879a35a0e77480a1dab')
'012340000000000000000000000000000000000000056'
>>>

[原创] 不安全的互联网系列(2) 家庭路由器部分

一个虚构的场景,某受害者在某大论坛看到一篇标题党的帖子,打开了发现有很多很小的打不开的图片,就发帖声讨楼主。却不知道路由器的dns已被攻击者修改了。下次受害者打开 chewang.net 跳转到山赛hao123网站是小事。打开淘宝购买东西付款时没注意地址栏没有锁标志或者没注意付款界面显示的付款内容就付款了,结果等了几天没收到货找淘宝才知道自己根本没给卖家付款,而是把钱打给攻击者了,这就很悲剧了。

当然了,上面那个场景并不容易实现,有些要求,比如路由器弱口令、被攻击者猜到了路由器IP,攻击者猜对路由器型号,才会受到攻击。看似艰难,但是很多路由器是默认密码,IP地址更大部分都是192.168.1.1,主流的路由器型号也不是很多,受害者就很多了,听说13年一次大范围攻击中在网的路由器4%的中招了。详细情况大家可以搜索“路由CSRF”。这里说一下解决办法:1.修改默认密码,2.修改默认路由器地址,3.经常去更新路由器固件(祈祷路由器厂家在路由器有漏洞时更提供新固件)。

上面写得是用户浏览网站中的招,但是实际上还有另外一个中招的可能,部分路由器默认对外网公开了一些服务,例如web、telnet 等服务,虽然只有极少数路由器有这个问题,但是也需要注意,如果设备再有后门密码,或者登陆验证跳过就被杯具了。有些人会扫整个互联网,尝试找到有问题的设备的哦。

这一块就不再细说了,各个品牌的路由器问题并不统一,而且在不断出新的问题。这里有国外的一份路由器漏洞列表,但是并不全,甚至一些国内品牌都不存在,只能作参考。地址是: http://routerpwn.com/ 。

建议只能是修改默认密码,修改默认IP,自己确认没有在外网开web、telnet 等服务,在更新到最新固件,这样一般就没什么大问题了。

[原创] 不安全的互联网系列(1) 局域网部分(含WLAN)

互联网从1969至今一运行了45年了,但是其安全性并不是很好。我打算列出一些我知道的安全问题。本来打算做一个零基础的科普,结果发现细节太多了,零基础科普再说吧,下面的内容需要相应的基础知识。

先从局域网开始,大约10年前的集线器就不说了,那个根本没有安全性可言。目前大部分家庭及网吧使用的交换机也是有安全问题的,ARP 攻击及 CAM 攻击是两个比较明显的安全问题。

先说一下 ARP 攻击,这个现在已经烂大街了,就是发虚假的ARP包欺骗其他计算机,使得其按攻击者的意图错误的设置自身的 ARP 表,造成攻击者可以将受害者对特定IP的访问引导至特定的网卡硬件地址(并不一定是真实的硬件地址,可以是伪造的)的计算机。典型的攻击例子是攻击者电脑开启IP转发功能,广播IP地址是网关IP、硬件地址是自身的 ARP回应包,使得局域网所有电脑会将上网的上行流量发送到攻击者电脑再由攻击者电脑转发给真实网关,使得攻击者可以截获所有明文的登录用户名及密码等数据(关于 https 加密的下面在单独说明)。

如果是仔细些其实还可以向路由器发伪造的arp包,使得下行流量也会经过攻击者。还可以同时使用js缓存投毒,将自身伪造的 Jquery 等库插入被攻击者浏览器缓存,使得 arp 虚假广播结束后也可以持续几天甚至几个月的时间控制被攻击者浏览器大部分网站,详细信息单独介绍。

受影响范围:基本上所有的家庭网络、大部分WLAN网络、很少的网吧、大部分办公电脑。解决方法:1.全局域网ARP绑定,麻烦些,需要网关和所有计算机都得双向绑定。2.VLAN端口隔离,这个有个缺陷是局域网普通电脑无法互相通信了,最常见的windows文件共享、打印机共享、局域网联机游戏对战、机顶盒等手机遥控遥控等功能全部无法使用,这个成本还可以,有不少便宜的支持 VLAN 端口隔离的交换机,但是也只能保护上行流量,无法保护下行流量(感谢 semicircle21@v2ex 补充)。3.程控交换机绑定端口IP及MAC,这个成本就高了。

然后就是 CAM 攻击了。交换机和集线器的区别就是一般转发包时会根据包的目的MAC地址将包转发到对应的端口,而不是广播到所有的包。交换机是通过各个端口发出来的包的源 MAC 来确定这个端口连接着的设备的 MAC 地址的,然后会存放到交换机的 CAM 表里面。但是如果交换机碰到的一个包的目的MAC地址在 CAM 表里面不存在怎么办?交换机就会退化为集线器,向所有端口广播这个包。所以 CAM 溢出攻击是通过发送大量的不同源MAC地址的包塞满 CAM 表,造成正常的 CAM 记录被挤掉,使得交换机退化为集线器,然后开网卡混杂模式就可以监听到整个局域网的流量提取用户名密码等数据了。

还有其实也可以仔细的操作,并不需要溢出CAM表,攻击者可以高速的以路由器MAC地址为源地址来发包,使得交换机认为攻击者持有路由器MAC地址而将发送到路由器MAC地址的数据转发给攻击者,完事后攻击者还可以广播网关IP的ARP请求包来使得路由器发ARP回应包来恢复交换机对网关的绑定。一般路由器再次发包交换机就会再次将MAC地址绑定回路由器所在的交换机端口,一般路由器都很繁忙,所以 CAM 攻击并不能完整的获得整个网络上面的数据。

受影响范围:所有的非程控交换机,所有的未用VLAN隔离或未做MAC地址和端口绑定的程控交换机。解决办法:1.还是VLAN端口隔离,缺陷和上面的ARP攻击一样,但是也只能保护上行流量,无法保护下行流量(感谢 semicircle21@v2ex 补充)。2.为交换机端口绑定MAC地址,缺点还是和ARP攻击解决办法一样,成本高,维护麻烦。

接着说一下现在大范围普及的 WLAN 吧。WLAN 分为两个方面,连接别人的 WLAN 热点有可能被钓鱼攻击,WLAN 热点本身有可能被人攻击。先说钓鱼攻击,攻击者伪造一个移动的 cmcc 的热点,受害者当成真实的移动cmcc了上去,输入了cmcc用户名密码就会被攻击者把账号密码偷到手了,受害者就有可能被攻击者盗用 wlan 账号,电话费就… 如果攻击者用心点,弄个4G上网卡或者直接用受害者的账号连接到真实的cmcc上面去,使得受害者还可以上网,那还可以捕获到用户的所有上网流量,所有明文的密码被攻击者捕获了(同上面,https 加密的问题单独在讲)。甚至还可以更进一步向ARP攻击一样做js缓存投毒,使得受害者即使断开了与虚假 wlan 网络的连接一样会收到攻击者的控制,持续时间从几天到数月不等。

不要以为不连接cmcc之类的公共网络,只连接单位的、商场的、熟悉的 wlan 就安全了,攻击者其实可以通过将真正的wlan击垮,而自己搭建一个同名的wlan来钓鱼。甚至有部分运营商定制机只要碰到名称是运营商名称的 wlan 就自动连接,更加容易被攻击。受影响范围:1.所有的无密码的 wlan 都有可能是伪造的。2.所有的密码公开的或者可被破解的 wlan 都有可能是伪造的。解决办法:实在不确定 wlan 安全性通过 wlan 上网的时候就挂vpn吧。

WLAN 热点本身也有可能被攻击。无密码 WLAN 就不用说了,WEP加密的密码可轻松被破解,WPA加密也不建议使用了。目前 WPA2 加密还是安全的,前提是关闭 WPS 功能及使用高强度密码。不过目前的问题是大部分新路由器都默认开启 WPS 功能,使得攻击者可以在数小时内破解 wlan 密码,之后是简单的蹭网还是像本文开头介绍的 ARP 攻击来攻击整个局域网或者击垮本wlan建一个同名同密码的钓鱼wlan甚至直接攻击路由器修改dns长时间控制着这个 wlan 就不好说了。关于攻击路由器的可行性下面再单独说明。也可以通过开启无线路由器的客户隔离功能来减少一些影响,但是这个相当于交换机的vlan,会像arp攻击里面介绍的一样影响很多功能,而且无法拦截对路由器的攻击,不建议家庭使用,强烈建议公共场所 wlan 使用。对了还有另一个安全隐患,wlan万能钥匙之类的软件设置不好会共享 wlan 密码,你再好的加密再复杂的密码也没用了。你可能说你不会装这类软件,但是你的家人呢,来串门的亲戚、朋友、同事呢?受影响范围:各种家庭单位wlan。解决办法:1.使用 WPA2 ,关闭 WPS 功能,公共场所wlan开启客户隔离功能,路由器使用最新的固件,路由器管理密码设置为复杂密码,wlan密码设置为复杂密码,为访客建立单独的访客 WLAN 热点(感谢 semicircle21@v2ex 补充)。但是这样也无法解决公共场所 wlan 攻击者建立同名同密码 wlan 的问题,只能客户连接 wlan 的时候挂 vpn 来解决了。

总结一下:有线局域网部分由于必须通过网线接入局域网才能攻击,大部分家庭用户只要保证自己的电脑、机顶盒、手机都使用请更新补丁就问题不大(虽然木马病毒之类的东西能攻击整个局域网,但是你只要保证有个靠谱的杀毒软件就没问题了,一般家庭用户不是重点目标,没人会费工夫做免杀的病毒单独针对你的)。WLAN 部分怎么说呢?在外边不要连接 wlan ,非要用的话需要挂 vpn ,而且 vpn 最好是自己搭建的,我只能给出这个建议了。虽然严格将来连接自己的 wlan 都要挂 vpn ,因为自己的wlan也有可能是攻击者伪造的,但是一般用户不是重点目标,没人专门攻击你的。wlan 热点间传播的病毒目前只出了实验版本,据说效果不好。

局域网部分差不多就这样了,关于路由器及js缓存投毒等之后在单独写。今天先睡了,什么时间想起来再增加一些参考链接吧。

更新:感谢 semicircle21@v2ex 的补充,为访客提供访客WLAN,Port VLAN 一样会被欺骗下行流量(https://www.v2ex.com/t/143975#reply1)。

原创文章。转载请注明:转载自GameXG,谢谢!

原文链接地址:http://www.chenwang.net/2014/11/04/%E5%8E%9F%E5%88%9B-%E4%B8%8D%E5%AE%89%E5%85%A8%E7%9A%84%E4%BA%92%E8%81%94%E7%BD%91%E7%B3%BB%E5%88%971-%E5%B1%80%E5%9F%9F%E7%BD%91%E9%83%A8%E5%88%86%EF%BC%88%E5%90%ABwlan%EF%BC%89/

UBNT AirOS 4种无线模式 的区别。

很早之前专门查过,当时路由器有ARP绑定,无线模式设置的是站模式,结果全部上不去网,路由器显示无线后面的设备的MAC地址全是无线设备的MAC地址。解决办法是设置为 站 WDS 模式或接入点WDS模式。这两天又用到了,怕忘了,记一下。

站模式:会通过无线连接到接入点(即无线AP),但是和网线连接有一个区别是会把 AirOS 后面设备的MAC全部改成桥本身的MAC地址,如果网络模式是网桥模式并且路由器等设备做了ARP绑定就会出现上不了网的现象,需要修改为带WDS的无线模式。

站 WDS 模式:会通过无线连接到接入点(即无线AP),相当于一根网线直接直接连接,不会修改 AirOS 后面设备的MAC地址,如果主路由有ARP绑定推荐本模式或无线接入点WDS模式。

接入点模式:即无线AP模式,允许其他设备炼乳本网络。

接入点 WDS 模式:会自动的和同样 ESSID、密码、同样接入点 WDS 模式的设备自动组网,AirOS 之间自动通过通过无线通信,不需要网线连接,而且每个 AirOS 设备都同时提供无线AP功能,手机设备都可以直接连接进来,应该还提供无缝漫游功能(未实测)。 实测过两个 AirOS 都开接入点 WDS模式,双方之间没有网线连接,网络模式都是网桥模式,其中一个 AirOS 设备通过网线和路由器连接,手机可以连入 AirOS

无觅相关文章插件,快速提升流量