• 使用selenium提取HTML中的内容

    例如我们需要提取

    <div id="a"><span id="b">content</span></div>

    中的content,以Python为例:

    第1个办法:使用text属性:先 elem=find_element_by_id(‘b’),再用 elem.text 属性;

    第2个办法:使用get_attribute / get_property方法,先 elem=find_element_by_id(‘b’),然后用 elem.get_attribute(‘innerHTML’);

    另外,如果 elem=find_element_by_id(‘a’),elem.get_attribute(‘innerHTML’) 获取到的会是<span id=”b”>content</span>

  • Python 文字转码问题的解决:ignore, replace

    用Python处理中文,肯定是每个人都曾经烦过的问题。

    生产环境是Python2,任务是把unicode字符串如 u’\uxxxx\uxxxx\uxxxx’ 转换为gbk保存,用的是str.encode(‘gbk’)方法。

    然而,经常会出现类似这样的异常:

    UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\uxxxx’ in position 0: illegal multibyte sequence

    原因是遇到了某些非法字符,而蛋疼的是,一大串字符串里面只要遇到一个非法字符,就会报错,这可不是我们希望的。

    解决办法:从帮助文档可知,函数原型是 encode([encoding], [errors=‘strict‘]),decode函数也是一样,默认用的是严格的策略,一遇到问题就抛出异常,我们可以把它改为’ignore’或者’replace’等值,就可以避免异常了。

  • OpenWrt USB挂载的一些备忘

    在挂载U盘时失败,dmesg提示找不到某些codepage,才知道这还和Native Language Support有关。

    要记得装上 kmod-nls-cp437、kmod-nls-iso8859-1、kmod-nls-utf8 这3个包。

    另外还有 kmod-usb-core kmod-usb-ohci kmod-usb-uhci kmod-usb2 kmod-usb-storage kmod-usb-storage-extras block-mount kmod-fs-vfat kmod-fs-ntfs 等包。

  • 使用iptables模拟Symmetric NAT

    如果想让一个P2P程序不能穿透,比较好的办法就是把NAT类型改为对称型的,即Symmetric.

    之前以为NAT类型对于一个路由器是固定的,后来google到了使用iptables模拟的方法,当然Symmetric NAT也有很多不同的具体实现形式,这里模拟的是其中的一种。

    系统为OpenWrt,执行命令

    WAN_IF = “eth0”  # 你的WAN接口
    iptables -t nat -A POSTROUTING -o $WAN_IF -j MASQUERADE --random

    即可。

     

    测试的结果是,对于同一个LAN IP:Port,对不同的Dst IP,映射到的WAN Port会差异比较大;而如果只改Dst Port,端口增量不大,可能为1。

     

    相关参考:
    http://albert-oma.blogspot.bg/2013/12/nat-router.html

  • 深圳长城宽带使用两个月有感

    先说重点:槽点最大在于国外的资源和UDP被限制。

    平时找各种资料,难免要访问位于境外的网站。记得一开始速度还有100kB 200kB,但是最近完全没法用了,http连接基本不能建立,浏览器就一直在在转。
    不要以为是地球另一端的网站才这样,香港的服务器一样是这样。

    经过一点点分析,当访问一些境外(还是说不在长宽自家资源白名单)IP时,会被NAT到一个东莞的IP,然后就很慢很慢很慢很慢很慢。又测试了一下直接发送UDP报文,直接震惊了我:发送100次另一端可能都接收不了几次,我总算是有点理解UDP的“不可靠”了。

    不仅是国外的UDP,就算是国内的UDP,也照丢不误:NTP时间同步,我向正确的服务器IP发了请求,但是根本收不到服务器的回复,换个网络环境,瞬间ok,呵呵了。

    另外,就算是国内的网站,也会时不时遇到死活加载不出来的情况,例如某网站的图片是放到另外一个域名下,然后那域名有点问题,于是整个网站的图片都看不到了。另外,DNS也会随机抽风(我改用第三方DNS也如此)。
    还有蛋疼的是,国内的出口经常不固定,微博经常给我发邮件,说我在哪个哪个省登录了,次数多了就冻结我的账户,都冻结过几次了。

    再反过来说说长宽自家的资源,例如一些视频网站直播网站一些大网站,都有比较好的优化,例如下载某些资源的时候,会直接302重定向到长宽自己的ip下,例如http://123.45.67.89/foo.com/path/file.ext,然后下载速度就飞快了。所谓的100M,是指这些优化过的资源有100M吧,呵呵。至于境外的网站?视乎网站的优化吧,例如github还行,打开成功率比较高;完全没有优化的,大部分情况下打不开,就算能打开,0.1M的速度可能都没有,呵呵。

    然而,这个“优化”有时候会有反作用:这相当于劫持了真正的资源,到它自己的资源库中,隐私问题就不说了,它自己的资源有时候是错的!!!!例如更新linux系统时,如果用http的源,经常就被劫持到了它的服务器上,然后hash验证就过不了,导致更新失败。

    另外一个是P2P简直没法用,BT下载我是从来没见过有速度,测了一下NAT的类型,就是对称型的Symmetric NAT,P2P看来是不用多奢望了。

    之前还不懂别人为什么喷,自己用过了才知道。

    总结:国外垃圾、网游呵呵、P2P更不用想。只用来看看优酷土豆爱奇艺乐视的电视剧,估计会比较满意,可惜这不是我的需求。

  • 华南理工大学新校园网认证协议的一点分析

    新的客户端似乎与drcom有较大的联系,我根据身在现场的同学抓的包,给出一点点分析,并基于scapy写出了一个简单的认证客户端(希望能用)。

    1. Start

    Start包很简单,向固定的MAC地址(01:80:c2:00:00:03)发送请求。1

    阅读更多…

  • 推荐TraceMyIP – IP与域名相关工具

    http://tools.tracemyip.org/

    用这个工具,我用来查询域名对应的IPv4/v6地址,相当于有了一个临时的准确的DNS解析,可以在一定程度上解决DNS污染的问题,配合路由器上的dnsmasq,效果还不错。

  • ESP8266 ESP-12E Flash NodeMCU Firmware / 刷NodeMCU固件

    After googling this topic, I used to think it’s easy to flash the firmware to an ESP-12/12E, just connect the wires and simply click will do it. However I encountered some problems and I managed to solve it. So I write this post to share my experience.

    My NodeMCU firmware is built on http://nodemcu-build.com/

    After flashing with esptoolnodemcu_flasher from bbs.nodemcu.com / official ESP8266 Flash Tool, the ESP-12E could not boot normaly, I got outputs from baudrate 115200 or 74880 such as:

    Fatal exception 28(LoadProhibitedCause):
    epc1=0x40224847, epc2=0x00000000, epc3=0x00000000, excvaddr=0x03001581, depc=0x00000000
    
     ets Jan  8 2013,rst cause:2, boot mode:(3,0)
    
    load 0x40100000, len 29804, room 16 
    tail 12
    chksum 0x4a
    ho 0 tail 12 room 4
    load 0x3ffe8000, len 2208, room 12 
    tail 4
    chksum 0xb7
    load 0x3ffe88a0, len 8, room 4 
    tail 4
    chksum 0xfb
    csum 0xfb
    don't use rtc mem data

    or

    Fatal exception 0(IllegalInstructionCause):
    epc1=0x40210354, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000
    
     ets Jan  8 2013,rst cause:2, boot mode:(3,0)
    
    load 0x40100000, len 29804, room 16 
    tail 12
    chksum 0x4a
    ho 0 tail 12 room 4
    load 0x3ffe8000, len 2208, room 12 
    tail 4
    chksum 0xb7
    load 0x3ffe88a0, len 8, room 4 
    tail 4
    chksum 0xfb
    csum 0xfb
    don't use rtc mem data

    It’s something like this post, maybe it’s not enough to flash firmware to 0x00 and esp_init_data_default.bin to 0x3fc000. What I know is that the chip can’t boot.

    After few days, I had an idea. I grabbed an NodeMCU Dev Board, and used esptool’s read_flash command to dump the 4 MByte flash:

    $ sudo esptool.py --port /dev/ttyUSB0 read_flash 0x00 4194304 4m.bin
     # 4194304 = 4*1024*1024  4MByte

    And, I successfully flashed it to an ESP-12E module by official ESP8266 Flash Tool with the config

    20160331135207After a restart, try using 115200 baudrate to connect it. And everything seems good.

     

    At last of this post, is my hardware connections and the 4MByte flash dump file. Make sure that GPIO0 is low if you want it to boot  flash mode and high(or float) for normal mode.

    20160331141407

    4MByte binary file: 4m.7z

     

    ================== Below is the Chinese version =======================

    本来以为刷个ESP-12E很简单的,但是我刷了就不行,后来找了个NodeMCU把它的flash整个读取了再整刷编程器固件就好了。

    后来做了个用GPIO0做输出的电路,但是之后发现容易导致GPIO0电平不对(GPIO0有连外部电路,开机时GPIO0大约只有1.7V,导致无限进入刷机模式,后来把外部输出换了,GPIO0悬空,开机时就变回高电平了)。感觉GPIO0、2、15还是不要乱来比较好。

     

     

    ================================================================

    Later I encountered a problem like

    “boot mode:(7,7)
    waiting for host”

    And the solution is that make sure GPIO15 is LOW, instead of float.

  • 京东被ISP劫持 怎么破?

    表现有两个:

    第一,会被跳转到如 http://www.jd.com/?utm_source=xxxxx&utm_medium=xxxxxx&utm_campaign=xxxxxx&utm_term=xxxx 这样的地址,百度一轮发现应该是TCP劫持。

    第二,在浏览商品时,页面被插入广告,按F12发现在<head>里面被插入了一段script。

     

    怎么破?

    1. 换DNS是没用的。
    2. 改host,或者配置路由器的dnsmasq。可以解决第二个问题。
    3. 使用https而不是http。在greasyfork找https的脚本,让它给 http://*.jd.com/* 自动跳转到https,可以解决问题一和二。这点还是阿里系做得好,全是https了。
    4. 找工信部投诉,从根本解决流氓行径。