老翅寒暑

一个老鸟的自白
随笔 - 79, 文章 - 0, 评论 - 674, 引用 - 24
数据加载中……

2009年6月20日

一个统计服务器网络流量的小程序

因为工作需要,要统计一下服务器的网络吞吐量,并且出一个图表。在搜索网络吞吐量软件时候,看到这篇文章,于是决定用脚本来实现这个功能。bigtall在原文的启发下,做了一些修改,去掉了对unix工具的依赖,把它变成了一个纯的批处理文件。希望能给有需要的人帮助。

 1 @echo off
 2 :args
 3 rem 处理参数
 4 if "%1" == "" goto help
 5 
 6 set stopfile="%temp%\netflow.stop"
 7 if "%1" == "stop" goto stop
 8 if "%1" == "start" goto start
 9 goto help
10 
11 :start
12 rem 继续分析start参数
13 set outfile=
14 set outcon=1
15 if "%2" == "" goto main
16 set outcon=
17 if "%2" == "console" set outcon=1
18 if not "%2" == "console" set outfile=%2
19 if "%3" == "console" set outcon=1
20 if "%outfile%" == "" if not "%3" == "console" set outfile=%3
21 
22 :main
23 echo 本程序每5秒统计一下网卡的流量, ctrl+c退出
24 
25 rem 删除stop记录
26 if exist %stopfile% del //f %stopfile%
27 rem 首次流量记录,初始化
28 echo WScript.Sleep(5000); > sleep.js
29 set curdate1=%date%
30 set curdate=%curdate1:~0,10%
31 set curdate1=
32 
33 if "%outfile%" == "" goto label2
34 if not exist %outfile% echo 日期,时间,接收总字节,发送总字节,本次接收字节,本次发送字节>>%outfile%
35 :label2
36 rem 其中字段内容为:日期,时间,接受总字节,发送总字节,本次接受字节,本次发送字节
37 for /"tokens=1,2,3" %%i in ('netstat -e ^| findstr 字节') do set prevrecv=%%j&&set prevsend=%%k
38 :begin
39 if exist %stopfile% goto mainexit
40 for /"tokens=1,2,3" %%i in ('netstat -e ^| findstr 字节') do set recv=%%j&&set send=%%k
41 set /a nrecv=%recv:~-9% - %prevrecv:~-9%
42 set /a nsend=%send:~-9% - %prevsend:~-9%
43 set prevrecv=%recv%
44 set prevsend=%send%
45 if "%outfile%" == "" goto label3
46 echo %curdate%,%time%,%recv%,%send%,%nrecv%,%nsend% >> %outfile%
47 :label3
48 if "%outcon%" == "1" echo %curdate%,%time%,%recv%,%send%,%nrecv%,%nsend%
49 cscript ////nologo sleep.js
50 goto begin
51 :mainexit
52 if exist %stopfile% del //f %stopfile%
53 if exist sleep.js del //f sleep.js
54 goto end
55 
56 :stop
57 echo 通知发送完成
58 echo . > %stopfile%
59 goto end
60 
61 :help
62 echo 网络流量统计
63 echo usage: netflow [start^|stop] [console] [logfile]
64 echo        start   开始运行,并输出到指定文件
65 echo        stop    停止统计
66 echo        console 运行输出时,输出一份到控制台
67 echo        logfile 运行输出时,输出一份到指定文件
68 goto end
69 
70 :end
71 

posted @ 2009-06-20 00:09 老翅寒暑 阅读(260) | 评论 (1)编辑

2008年12月29日

简单的个人帮助系统

     摘要: 编程的时候,需要参考许多的帮助,一个有良好组织习惯的人,一般会把需要用到的帮助都放到同一个文件夹里边,当要用到的时候,直接到文件夹中打开相应的帮助就可以了。但是bigtall的做法和大家可能有点不一样,因为我是一个懒惰的人,所以经常忘记把文档整理起来,而且不喜欢做什么事情都把一个资源管理器窗口打开着,我经常打开的窗口是cmd窗口,所以我编制了我自己的帮助系统:一个简单的批处理文件myhelp.ba... 阅读全文

posted @ 2008-12-29 15:45 老翅寒暑 阅读(751) | 评论 (1)编辑

2008年12月3日

把eclipse 3.4的插件移动到独立目录中

开发利器eclipse的3.4版和以前的版本有了一些比较重要的改动,对于bigtall来说,最大的问题是插件安装的问题。

我目前的做法是建立一个名字叫eclipseplugins的目录,然后把所有非eclipse内置的插件放到这个目录,比如插件名字叫XXX,就在eclipseplugins下建立一个XXX的目录,把该插件放进去,然后在eclipse的links目录下放置link文件。这个是原先的做法,但是在3.4下就不好用了。而且更大的问题是3.4下没有install插件到指定目录的功能了,虽然传说可以激活原先老的更新功能,没找到,也不愿意,有新的为啥不用呢。 所以花时间研究了一下自己的做法,给大家show一下。这个做法同样适合于3.4以前的版本------我们可以把任意的新安装插件挪出来

步骤如下:

  1. 安装插件之前,到eclipse目录下,运行控制台命令 dir /s > before.txt 把目录做一个快照,如果想更偷懒,那就简单 dir plugins features > before.txt 把这两个目录做一个快照。
  2. 打开eclipse安装插件。安装完了之后关掉eclipse
  3. 运行命令 dir /s > after.txt 或者 dir plugins features > after.txt
  4. 运行命令 fc /c /n /w before.txt after.txt 从结果中就可以看到plugins和features目录中新增加的内容了
  5. 在eclipseplugins目录下运行命令: md XXX\eclipse\plugins 和 md XXX\eclipse\features 其中XXX是你的插件的名字
  6. 打开资源管理器,把步骤4比较出来的多余文件移动到刚才创建的对应目录中
  7. 到eclipse目录下编辑文件configuration\org.eclipse.update\platform.xml,在尾部</config>之前插入site代码,并把步骤4找出的对应的条目移动到其中,代码如下
    <site enabled="true" policy="USER-EXCLUDE" updateable="true" url="file:。。/eclipseplugins/m2eclipse/eclipse/(修改成你的)">
    (移动到这里,这里保存一个例子,让大家看看样子)
    <feature id="org.maven.ide.eclipse.feature" plugin-identifier="org.maven.ide.eclipse" url="features/org.maven.ide.eclipse.feature_0.9.3.20080421-2352/" version="0.9.3.20080421-2352">
    </feature>
    </site>
  8. 继续在eclipse目录下编辑文件configuration\org.eclipse.equinox.simpleconfigurator\bundles.info,把步骤4 对应的目录位置修改掉。下面是示例修改之后的样子(加底色部分是bigtall增加的内容):
    org.maven.ide.components.qname,1.0.0.20080331-1600,file:。。/eclipseplugins\m2eclipse\eclipse\plugins\org.maven.ide.components.qname_1.0.0.20080331-1600\,4,false
  9. 在eclipse的dropins目录下创建link文件,如果是3.3及以前版本,请在links目录下创建。link文件内容只有一行,示例如下:path=d:/tools/dev/eclipseplugins/m2eclipse

通过这几步之后,重新启动eclipse,你会发现你的插件工作一切正常。如果哪天需要升级eclipse到更新的版本,简单删除eclipse目录,用新版本覆盖就可以了。

posted @ 2008-12-03 18:18 老翅寒暑 阅读(690) | 评论 (2)编辑

2008年8月26日

目录比较的小工具myfc

     摘要: 因为工作需要,对遗留项目进行规范化整理,面对多个不同版本的程序,如何整理出一个完整的有效的代码?目前的工具比如ultra compare或者号称最好用的beyond compare,具有的只是目录比较和文件比较功能,其中目录比较只是简单比较文件的属性差异,不会比较目录中各个文件的差异,所以用了几天时间,修改完善了我自己的myfc,一个纯批处理文件,具有的功能如下: 1.比较两个目录的差异,支持目录... 阅读全文

posted @ 2008-08-26 10:28 老翅寒暑 阅读(715) | 评论 (0)编辑

2008年6月7日

Kubuntu & Windows XP & OS X 10.5.2 安装笔记

     摘要:   阅读全文

posted @ 2008-06-07 17:58 老翅寒暑 阅读(1418) | 评论 (0)编辑

2008年5月15日

地震搜救手册

     摘要: 听说是网友突击翻译出来的,看了觉得有用处.感谢这么多热心人!除了捐款捐血之外,希望这个也是我贡献力量的一个方式,能够让需要的人及时看到!  阅读全文

posted @ 2008-05-15 15:37 老翅寒暑 阅读(302) | 评论 (0)编辑

2008年5月9日

ubuntu 8.04的安装记录

把自己的机器从vista换成了ubuntu 8.04.感觉顿时快了很多阿!
以下是记录安装过程中的一些命令,免得自己忘记.

1.设置更新服务器地址
如果觉得默认的ubuntu 8.04更新服务器不是很快的话,请按照参考文献1的内容配置对自己最快的服务器地址.
务必记住的是,请把最快的更新服务器地址放在/etc/apt/sources.list文件的最前位置.

2.网络部分
首要是安装一个多线程的下载工具,这里推荐MultiGet,一个同济大学校友的产品.有FlashGet的风范.地址在[http://multiget.sourceforge.net/].
电驴\BT等使用命令安装:sudo apt-get install mldonkey-server
然后到[http://sancho-gui.sourceforge.net/]下载mldonkey的图形界面.

浏览器firefox插件方面,我选择安装了如下几个:
Adblock Plus, Firebug, Flashblock, FlashGot, Greasemonkey, ImageZoom, Paragrasp, ScrapBook
具体请参考参考文献4

3.多媒体部分
安装各种解码器和播放器
sudo apt-get install gstreamer0.10-pitfdll gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse
更简单的话,可以输入sudo apt-get install gstreamer0.1* 就可以安装更多.不过用不到的也多

安装w32codecs,
sudo apt-get install w32codecs 如果报告找不到,则需要手工下载安装.这个地址[http://www.debian-multimedia.org/pool/main/w/w32codecs/],不过请注意,使用w32codecs是侵犯windows版权的行为(谁在乎呢?不过别说我没告诉你!).

内置的totem播放器在播放rmvb的时候会有问题,所以要安装mplayer
sudo apt-get install mplayer
要注意,我的机器默认配置使用命令"mplayer -vo x11 ~/d/film/some_film.rmvb"才能正常播放,原因是mplayer中的视频和音频参数设置有问题,请尝试选择正确的配置参数.
另外,请保证~/.mplayer/config文件存在,并内容包含行zoom=yes以便打开图形缩放功能.

4.系统配置和管理
执行本节内容时候,最好请参考所附参考文献2的内容,增强理解.

安装系统管理控制台webmin,避免我们自己一个一个配置文件去修改:
到[http://www.webmin.com/download.html]下载deb安装包,并且安装,图形界面直接使用"GDebi package installer"打开并安装;如果手工安装的话,使用命令:dpkg -i 安装包文件路径 来安装.然后在浏览器中输入https://localhost:10000就可以打开webmin界面.firefox会提示ssl证书不对,请把它加入到exception例外列表中即可.

不过这个时候并不能登录webmin,因为它需要使用root账号,默认的ubuntu是不开启的.所以需要使用命令sudo passwd root来给root设置一个新的复杂的密码,然后用root账号登录webmin即可.

如果觉得不安全,可以在webmin界面中把webmin服务设置成默认不启动,不过记得以后要用的时候,要用命令启动webmin服务:/etc/webmin/start,用完之后用命令/etc/webmin/stop关闭服务.

5.安装windows模拟环境
虽然装了ubuntu,但是完全抛弃windows是不可能的,所以我们需要两个工具wine和virtual box.前者好处是速度快,资源占用少;后者是模拟完全.命令如下:
sudo apt-get install wine
到[http://www.virtualbox.org/wiki/Downloads]下载最新版virtual box(目前已经被sun买下来了)的安装包,直接安装即可.

6.美化字体
请首先在virtualbox中安装一个windows xp环境,然后从中复制字体到你的~/myfonts目录下,然后到
sudo ln -s ~/myfonts /usr/share/fonts
sudo chmod 755 ~/myfonts/*
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv
最后把参考文献11中的配置内容存放到/etc/fonts/language-selector.conf,千万不要象有些帖子说的去覆盖或者修改/etc/fonts/font.conf,会启动不起来的.

7.修改ntfs的mount问题
发现ntfs盘不能写入,所以把在/etc/fstab中ntfs的mount行修改为如下:
/dev/sda5 /media/WORK ntfs-3g uid=1000,gid=1000,dmask=022,fmask=133,defaults,locale=zh_CN.UTF-8 0 0


安装一个通知程序,我需要定时给自己通知消息(编程容易忘记时间阿)
sudo apt-get install libnotify-bin
命令使用方法:notify-send "hello"

使用命令crontab -e,然后输入如下内容:
0-30/10 0   * * *   halt -p
30-59/10 22 * * *   halt -p
30-59/10 18 * * 1-5 halt -p
30-59/9 23  * * *   notify-send "系统将在24:00准时关机,请及时保存进度"
0-30/10 22  * * *   notify-send "system will shutdown at 22:30"
45  11  *   *   1-5 notify-send "launch time"
0  12,14,18 * * 1-5 export DISPLAY=:0 && totem --play ~/music.pls

多启动的GRUB的menu.lst中部分内容:

# This is a divider, added to separate the menu items below from the Debian
# ones.
title        Other operating systems:
root


# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/sda2
title        Microsoft Vista Ultimate
root        (hd0,1)
savedefault
makeactive
chainloader    +1


参考文献:
  1.  ubuntu Hardy(8.04)源列表大全
  2. [分享]从头开始对ubuntu进行优化
  3. ubuntu下WEBMIN的安装 [http://blog.chinaunix.net/u1/34948/showart_322026.html]
  4. 提高浏览体验的五十个最佳FireFox扩展插件[http://www.williamlong.info/archives/702.html]
  5. linux下如何定时启动图形应用程序 [http://ubuntu.group.javaeye.com/group/blog/41075]
  6. ubuntu 定时关机 [http://www.linuxdiyf.com/viewarticle.php?id=88888]
  7. Linux/Unix下定时任务系统--cron和crontab(拼凑)
  8. ubuntu下的项目管理工具dia, planner
  9. [http://www.debianadmin.com/enable-and-disable-ubuntu-root-password.html]
  10. Ubuntu下面经常要用到的命令[http://www.denimcc.cn/article.asp?id=383]
  11. 搞定Ubuntu字体,让你感觉像在windows中

posted @ 2008-05-09 16:50 老翅寒暑 阅读(1130) | 评论 (0)编辑

ubuntu 8.04下安装和使用systemtap

systemtap是一个linux下的系统调用和跟踪程序,如果您在windows下用过filemon或者processmonitor的话就明白了.systemtap功能比processmonitor更强大一些,定制性更高些.但是显然,和大多数linux程序一样,也更难用!
为了装这个systemtap,翻了好多贴子,最简单的方法如下:
  1. 运行命令:sudo apt-get install linux-image-debug-`uname -r`
  2. 运行命令: sudo ln -s vmlinux-debug-`uname -r` vmlinux-`uname -r`
  3. 运行命令:sudo apt-get install systemtap
如此,就装好了,可以构造一个简单的脚本文件a.stp,如下:
probe syscall.open
{
  printf ("%s(%d) open (%s)\n", execname(), pid(), argstr)
}
 然后用命令运行:sudo stap ./a.stp 如果顺利的话,就可以看到输出了.不过我这里运行到pass5的时候报错:/usr/lib/systemtap/stapio terminated,正在查找原因中.

如果不习惯使用这么高定制性的工具的话,可以改用strace,用法简单:strace -f -o out_trace.txt /opt/eclipse/eclipse 我这里是用来跟踪eclipse运行时候的文件读写记录.


参考文献:
  • http://blog.chinaunix.net/u/12679/showart_529575.html (注:这个方法不好用,我在xubuntu下界面出问题,而且stap无法运行)
  • https://bugs.launchpad.net/ubuntu/+source/systemtap/+bug/106957
  • http://sourceware.org/systemtap/tutorial/node5.html 有关systemtap脚本的编写
  • http://www.ibm.com/developerworks/cn/linux/l-systemtap/ 使用Systemtap调试内核
  • http://www.xxlinux.com/linux/article/development/soft/20051125/67.html 使用truss,strace,ltrace跟踪


posted @ 2008-05-09 12:58 老翅寒暑 阅读(427) | 评论 (0)编辑

2008年3月26日

从许霖案和soff案中发现的有趣问题

写本文的目的不是跟潮流或者引人眼球,而是突然发现了几个有趣的问题。

首先我们看许霖案。案情想必大家也清楚,工行的柜员机出问题了,取1000元只扣1元,于是一个叫做许霖的小伙子就取了17.5万,然后被抓住判了无期。有人就黑色幽默地说用171次才取了这么一点钱,就这种没出息的样子也该判无期。我们不是法律人士,当然也不会去找什么条款,但是作为一样是靠“逻辑”吃饭的程序员,我们可以从逻辑的角度来做一点分析。首先我们来看许霖“作案”的顺序流程:

  1. 去银行取款
  2. 柜员机处在故障状态
  3. 取款171次,获得17.5万
  4. 潜逃
  5. 被抓获

关注过此案的朋友应该注意到,所有的分析文章都是从第3点开始分析的,有说什么柜员机是共犯啊、潜逃中间曾经要联系还款啊、还有什么自首、什么质疑金融机构的定义什么的,不过我看杀伤力都不算大。从技术的角度来看,其实第2点最为致命:如何证明柜员机处于故障状态?

首先我们要找一种可能性,就是柜员机取款1000扣1元算作是“正常工作”的场景。我想大家都知道商场会经常搞促销活动,比如“买一送一”什么的,那么银行有没有可能“促销”呢?如果是一种“正常”的“取1送999”的话,许霖就是无罪的。那么控方如何来证明这个柜员机确实是故障状态呢?最有力的证据应该是柜员机生产商提供的"该批次"柜员机的“产品说明书”,或者提供“当时”由工行和厂商联合认定的作为合同附件的“需求说明书”。

其实归根到底,就是“软件BUG的认定问题”。如何来认定一个软件的行为属于“BUG"还是正常的功能,唯一的标准就是合同随附的“需求说明书”。不过从中国IT现状来看,我想控方99%是提供不出这个东西的。由此引出了附加的问题:

  • “厂商已经如数赔偿”能不能说明导致许霖取款的漏洞就是BUG?
  • 没有该批次的说明书,用其他批次的说明书代替是否可行?或者现在开“证明”来承认是BUG,是否有效(有没有串供嫌疑)?
  • 柜员机有没有“调试模式”以便来每次放款之后测试取款功能正常?如果有,是不是可以说明这就是管理者想要提供的“优惠”?

总结一下就是:需求说明书其实真的很重要。

附加说明:前两天出了一个英国的柜员机“买一送一”事件,但是俺确实是在之前去WC的时候先想到这个问题的

其次我们来看soff案,现在一审宣判出来了,我们不说什么“tx过河拆桥”、什么“司法独立”等等意义不大的话,只从技术方面来谈这个问题。这个案子技术上涉及到了如下的几个方面:

  1. 使用程序外挂调用非开放功能的问题
  2. 未经同意发布对方程序的问题
  3. 擅自清除人家的广告图片问题
  4. 在人家的界面上插广告获利的问题
  5. 绑定插件的问题

soff案的起诉书里边基本都涉及到了以上的4点,而且判决书里边也差不多都对此进行了认定,那么我们就来逐条分析一下:

关于外挂问题,其实无非就是常用的3种方法,一种是微软的detour技术,直接修改函数入口处的字节码;一种就是api注入,通过修改程序入口偏移实现;另外一种就是通过公开的回调接口。其实tx自己也使用钩子截获了鼠标事件,而且去年tx的不兼容vista的事情充分说明tx自己使用了windows不支持的非公开的技术。如果说用外挂技术也可能获罪的话,tx这些算是在干什么?法院的判决把正常的技术行为看作是“非法”的,这对产业、对社会、对技术进步都是一种伤害。不过我们也庆幸,幸好M$没有出来告,否则还是这家法院来判的话,中国的软件业至少搞反病毒的都要坐牢去。至于提出什么“插件的bug被误认为是tx的bug”导致“tx被误解”之说,tx不兼容vista的那件事情,明明是tx的bug却被一些愤青上纲上线说成M$故意打压,造成了M$的名誉被损害,这又怎么说呢?

关于未经同意发布对方程序的问题,其实这个就是一个不折不扣的侵权了。现在网上出现了许多的“打包党”,把人家的安装程序解开,重新加入自己的插件再打包,无论如何都是说不过去的。你看intel为了一个.h的头文件,跟深圳东进公司打了一年的官司呢。

关于清除广告的问题,按理说应该是属于侵权,可是这个关系到一个“修改运行时代码是否合法”的问题。如果说是合法的,那么清除广告也就没问题,但是要说修改运行时代码是非法的,那么windows加载程序的时候要修改程序的入口代码地址是不是也非法?金山词霸截获我程序的api入口来获取字符串内容、看门狗拦截api调用更改我程序的运行方式算不算非法?soff如果用M$的detour库,是不是就算M$而不是soff侵权呢?如果说擅自去掉广告是修改了对方应用程序的外观界面,那么windows桌面主题算干的什么活?如果说再限定说不许修改窗口“里面”的内容,那么如果用跟随一个空白窗口的方式覆盖掉广告是否就是合法的?

关于在人家界面上插广告获利的问题,其实很难判断。如果插广告算是侵权,那么搜狗拼音、google拼音跟我的窗口一起出现一起消失,而且还打自己的logo,算不算给自己做广告呢?如果说像拼音那样的独立窗口就不算,其实soff也用的是自己的独立窗口啊。

至于绑定插件,只要不是用别人的东西来打包,插件不是强制安装而且无法卸载的话,我看也没有什么问题嘛!

总结一下就是:让外行来判定技术的对错问题,伤害太大!

全文的总结:两个案子都是涉及到广大老百姓每个人的切身利益密切相关,同时又都是争议极大、可判可不判的案子。对照杨善除恶、扶助弱小的法律目标:

  • 如果许霖案要判了,无非就是大家以后不碰柜员机多吐出的钱而已;但是soff案判了,程序员难道以后就不去深入到系统去编程?还是永远只用公开的api?如果不让广大的程序员深入专研技术,国家的网络信息安全靠谁去保卫?靠城管吗?
  • 如果许霖案不判,以后银行就要改进工作制度,软硬件的订购行为就会标准化。如果soff案不判,tx就会想办法用“不作恶”来吸引用户,加强软件测试并且提供更好的操作体验。

我想,相对于以上的两种分析,都不判对社会的促进最大,而判了,则是继续养了一群懒人,并且促使他们躺在判决书上继续懒下去。

posted @ 2008-03-26 22:39 老翅寒暑 阅读(3594) | 评论 (55)编辑

2008年1月3日

101个LINQ例子

     摘要: 101 LINQ Samples 说明:本文摘抄自Microsoft的MSDN网站,因为原文不方便快速阅读和学习,故此调整如下。本文所有权利归Microsoft公司所有。如果您觉得本文侵犯了您的著作权,请来信告知,我将即时改正!多谢! 所有的代码运行结果请点击代码上的链接,到MSDN网站去看。 Restriction Operators Where - Simple 1 public void... 阅读全文

posted @ 2008-01-03 16:19 老翅寒暑 阅读(1524) | 评论 (3)编辑