2009/10/24

網頁快照 CutyCapt

前陣子一時興起,用php寫了一個快照的站台(網頁抓成影像檔 )
但是因為server掛了,所以停了一段時間....還好今天終於想起來了,我用的
程式是  CutyCapt
http://cutycapt.sourceforge.net/

他是用 QT開發的程式可以讓你在命令列下直接上網抓整個頁面快照
也就是說只要有 Linux + QT 就可以工作了
安裝請參考:官網的他應該試用 debian 測試的
% sudo apt-get install subversion libqt4-webkit libqt4-dev g++
% svn co https://cutycapt.svn.sourceforge.net/svnroot/cutycapt
% cd cutycapt/CutyCapt
% qmake
% make
% ./CutyCapt --url=http://www.example.org --out=example.png

Using CutyCapt without X server
如果你只是用純文字介面的話,需要透過 xvfb-run 程式,執行畫面抓取的程式

         % sudo apt-get install xvfb-run  (安裝)

         % xvfb-run --server-args="-screen 0, 1024x768x24" ./CutyCapt --url=... --out=... (執行)

如果要 Windows 版的請到這裡抓,CutyCapt也有提供,
http://sourceforge.net/projects/cutycapt/
但如果遇到 IE only 的網站就只好用這一套了
http://code.google.com/p/minemine/wiki/WebPageGrabber

程式碼待續....

氣象報告 ?? API ??

這實在太銷魂了,難怪現在一堆程式開發者越來越有創意....一堆現成的應用讓你用
剛剛本來在查詢看 clock 用 jquery 如何製作
http://jquery.jclock.js.googlepages.com/jclock.html 找到這篇
但有順便看到一篇
http://mypaaji.com/index.php/2009/07/06/jquery-weather-widget/
jquery 抓天氣資訊來顯示的效果
通常在國內我都直接抓氣象局的 RSS ,台灣的氣象水準可說是一流的
預報及精準度也值得推薦.
後來看了一下 source code 發現 試用 google 的 ig api 勒!!
http://www.google.com/ig/api?weather=taipei 直接就可以用了
然後 jquery 再把他包裝一下,就變成這樣
http://mypaaji.com/tut/weather/

看起來 yahoo 也有提供,但沒那麼多時間玩啦!
http://developer.yahoo.com/weather/

先忙其他的,晚點再來玩更多....

2009/10/22

DDOS攻擊-use apache command ab

* ab 為 apache 用來做apache效能測試的一個指令
$ ab --help
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
-n requests Number of requests to perform
-c concurrency Number of multiple requests to make
-t timelimit Seconds to max. wait for responses
-p postfile File containing data to POST
-T content-type Content-type header for POSTing
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. 'Apache=1234. (repeatable)
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-h Display usage information (this message)
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
-f protocol Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL)

* apache 的 ab 指令
ab -n 10000 -c 10000 http://網址 > ddos.txt

* 更狠一點,把命令留在主機,如果該主機為大水管,可以封鎖小水管,透過-c -n 參數來決定封鎖該小水管幾天。
nohup ab -n 10000 -c 10000 http://網址 >ddos.txt 2>ddos_err.txt &

* 經典錯誤使用範例:
http://admin.pixnet.net/blog/post/501100

* 還有一些其他的流量測試軟體,也可以成為 DDOS 的工具
iperf 官方網站 http://sourceforge.net/projects/iperf/
中文介紹 http://benjr.tw/?q=node/369

* 另外一套 網站壓力測試工具 webbench
# http://cs.uccs.edu/~cs526/webbench/webbench.htm
# http://freshmeat.net/projects/web-bench/

mysql 資料庫自動備份shell script與還原

* 自動備份資料庫 shell script
#/bin/bash
# backup databas to ftp site
# you need wput and mysql client/admin tools
# use yum or apt-get or get manually
# wput http://wput.sourceforge.net/
# write by mtchang.tw@gmail.com

# your ftp address and folder address
ftp_addr='240.112.69.29/sql'
# ftp account and password
account='cccccc'
acc_pw='cc'

# to backup mysql dbase ,account and password
db='mtchang'
dbuser='mtchang'
dbpassword='cccccccccc'

# get year,month,day,hour
da=$(date +%Y%m%d%H%k%M)
h=$(hostname)
# generate filename like linue.jangmt.com_200910101010_mtchang.sql
filename="$h"_"$da"_"$db".sql
# use mysqldump dump $db data to sql file
echo "mysqldump $db -u$dbuser -p$dbpassword --opt > $filename" | sh
# use bzip2 compress sql file
echo "bzip2 $filename" | sh
# upload file to ftp server
echo "wput ftp://$account:$acc_pw@$ftp_addr/$filename.bz2" |sh
# check success or fail ?
echo "upload $filename.bz2 to ftp is $?"
# erase file
echo "rm -rf $filename.bz2" |sh

* 先執行測試
mtchang@www:~/backup$ ./sqlbackup.sh
--10:50:59-- `www.cm.nsysu.edu.tw_20091022101050_mtchang.sql.bz2'
=> ftp://cccmbk:xxxxx@240.112.69.29:21/sql/www.cm.nsysu.edu.tw_20091022101050_mtchang.sql.bz2
Connecting to 240.112.69.29:21... connected!
Logging in as cccmbk ... Logged in!
Length: 6,093,043

10:51:00 (jangmt.com_20091022101050_mtchang.sql.bz2) - `84.88M/s' [6093043]

FINISHED --10:51:00--
Transfered 6,093,043 bytes in 1 file at 28.74M/s
upload www.cm.nsysu.edu.tw_20091022101050_mtchang.sql.bz2 to ftp is 0

* 寫入定時排成,每天早上 04:00 定時備份
# crontab -e
0 4 * * * /home/mtchang/backup/sqlbackup.sh

* 參考
# http://www.study-area.org/tips/mysql_backup.htm
# man mysqldump
# man mysql

還原待續.....

2009/10/18

卡馬代練計畫

卡馬代練計畫
這個梗真的不錯,看起來像是 M$7的舔秘點.....
http://funp.com/t762093 但是我好像以前就幹過這檔事是了,因為有人發出了需求...
當個專業的 MIS 就是要滿足需求

於是就在網路上找了 卡馬機器人 , 的 lib
http://code.google.com/p/rlplurkapi/
請下載,裡面有 php 及 python 的程式
http://code.google.com/p/rlplurkapi/downloads/list
解開發會發現有個 example.php 但是不太會用,算以亂改一通....
基本上就改成大概這樣,分成
1.定時 post 氣象預報(氣象局即時 rss)
2.及定時 post 正妹圖(flickr的rss)

#!/usr/bin/php
<?php
// plurk 帳號資訊
$nick_name = 'mtchang.xx@xxxx.com';
$password = 'xxxxxxxx';

require 'RLPlurkAPI.php';

$plurk = new RLPlurkAPI();
$plurk->login($nick_name, $password);


// -------------------------------------
function getCWB($string){

if($string=='kaohsiung') {
        // 高雄氣象報告
        $file_xml="cwbdata_36_02.xml";
        $xml = simplexml_load_file($file_xml, 'SimpleXMLElement',LIBXML_NOCDATA);
        // 由氣象局的 RSS 顯示天器相關資訊
        // $xml->channel->item->pubDate;
        $cwbdate_title = $xml->channel->item->title;
        $cwbdata_url   =  $xml->channel->item->link;
        $cwbdata_desc  = $xml->channel->item->description;
        preg_match_all('/.*%/', $cwbdata_desc , $cwbdata);

        $today = getdate();

        $data="\n目前時間:".$today[mon].'-'.$today[mday].'-'.$today[hours];
        $data=$data."\n氣象報告:".$cwbdata[0][0];
        // print_r($cwbdata[0]);
        // echo $data;
        // $plurk->addPlurk('en', 'says', "高雄市天氣:$data");

        return $data;
        }
}
// usage sample: echo getCWB('kaohsiung');


// -------------------------------------
// 定時 POST 文
// ------------------------------------

echo "\n\n------ addPlurk 定時post文 ------\n";
$today = getdate();
print_r($today);

/* 變數如下,如需其他時間請自行更改,但需配合 cron 設定
Array 
(
    [seconds] => 51
    [minutes] => 20
    [hours] => 23
    [mday] => 30
    [wday] => 6
    [mon] => 5
    [year] => 2009
    [yday] => 149
    [weekday] => Saturday
    [month] => May
    [0] => 1243696851
)

*/

echo '目前時間:'.$today[mon].'-'.$today[mday].'-'.$today[hours].'-'.$today[minutes]."\n";

if($today[hours]==0 AND $today[minutes]==0) {            // test ok 9/6

    $plurk->addPlurk('en', 'says', '踩線...i am robot... ');

}elseif( ($today[hours]==8 AND $today[minutes]==0) OR ($today[hours]==17 AND $today[minutes]==0) ) {

        // 高雄氣象報告
        $cwbdata=getCWB('kaohsiung');
        $plurk->addPlurk('en', 'says', " $cwbdata ");
        echo "\n氣象報告 running....\n".$cwbdata;

}
/*  因為抓到的 rss xml 會有抓錯正妹的狀況,所以先關了...
elseif($today[minutes]==0 ) {      // 以下為正妹robot

        $file_xml="flickr.xml";
    
        $xml = simplexml_load_file($file_xml, 'SimpleXMLElement',LIBXML_NOCDATA);
        //print_r($xml);
    $rand=$today[hours];    // 0~19依序輪撥正妹
        //$rand=rand(0,19);
        $beauty=$xml->entry[$rand]->link[2];
        $published=$xml->entry[$rand]->published;
        $link="\n正妹保卡馬".$published.' '.$beauty[href][0]."\n";
    echo $link;
    $plurk->addPlurk('en', 'says', "$link");
}
*/


* 當然這樣是不會動的,還要加上 crontab 排程,讓資訊可以變動流通

mtchang@www:~/public_html/svn/plurk-php$ crontab -l
# m h  dom mon dow   command
0 0-20 * * * /home/mtchang/svn/plurk-php/gocron.sh

mtchang@www:~/svn/plurk-php$ more gocron.sh 
#!/bin/bash
cd /home/mtchang/svn/plurk-php
# update cwb data
w3m http://www.cwb.gov.tw/rss/forecast/36_02.xml > cwbdata_36_02.xml
w3m http://www.cwb.gov.tw/rss/forecast/36_14.xml > cwbdata_36_14.xml


# run plurk check
/home/mtchang/svn/plurk-php/skip_karma.php 

* 本來還有寫判斷與聚集詞彙的功能,但常常暴走後來就整個不想理他了.其實這可以很好玩的
* 中研院中文斷詞系統,有提供api可以玩 http://ckipsvr.iis.sinica.edu.tw/
* 後來 yahoo 也出了一個 http://tw.developer.yahoo.com/cas/ 也是要註冊api才可以玩

結合斷詞系統就可以寫得更棒了....只是我沒有時間...只能在這裡嘴炮.

Msnlib 及 msn text 介面

簡介
* 這是一個Python的程式主要是為 MSN Messenger 8的通訊協定 。
* 這個其實是一個函示庫(msnlib) ,which uses a non-blocking callback scheme. 包含在這個函示庫中有一支文字模式的客戶端程式 msn ,其中類似於 mirc 的介面。

安裝

* 請參考 http://blitiri.com.ar/p/msnlib/

wget http://blitiri.com.ar/p/msnlib/files/3.6/msnlib-3.6.tar.gz

* 切換成 root 權限解開套件,並執行 install 安裝

[root@mt msnlib-3.6]# ./install

* 先設定你的 msn帳號,他會問你的帳號及密碼並將他存放在下列兩個地方

Creating the directory hierachy (/home/mtchang/.msn)
Creating the configuration file (/home/mtchang/.msn/msnrc)

* 執行 msn setup

msnsetup

* 啟動 msn

[mtchang@mt msnlib-3.6]$ msn
* MSN Client (3.6) *
Loading config... done
Logging in... done
Sending user list request... done
Status set to online
07:41:18PM *9milHIKIKOMORI is idle
07:41:18PM 天威 is busy
07:41:18PM *help<蟲*red+u is away
07:41:18PM *sierra ♬ Ebom 。 坐看雲起時。 ♡〞
.....略

使用
* 提示符號為 [msn]
* ? 可以顯示目前的指令說明

[msn] ?
Command list:
status [mode]   Shows the current status, or changes it to "mode", which can
                be one of: online away busy brb phone lunch invisible idle
q               Quits the program
w               Prints your entire contact list
ww              Prints your entire contact list, including email addresses
wn              Prints your entire contact list, including real nicks
wr              Prints your reverse contact list
wd              Prints the differences between your forward and reverse lists
e               Prints your online contacts
ee              Prints your online contacts, including email addresses
eg              Prints your online contacts with the groups
en              Prints your online contacts, including real nicks
h               Shows your incoming message history
add e [n] [g]   Adds the user "e" with the nick "n" to the group "g"
del nick        Deletes the user with nick "nick"
ren nick new    Renames the user with nick "nick" to appear as "new"
lignore [nick]  Locally ignores the user, or display the locally ignored users
lunignore nick  Removes a user from the locally ignored users list
block nick      Blocks a user
unblock nick    Unblocks a blocked user
g               Shows the group list
gadd gname      Adds the group "gname"
gdel gname      Deletes the group "gname". Note that all the users in the
                group will be deleted too.
gren old new    Renames the group "old" with the name "new"
color [theme]   Shows or set the color theme to "theme"
close nick      Closes the switchboard connection with "nick"
config          Shows the configuration
info [nick]     Shows the user information and pending messages (if any),
                or our personal info
nick [newnick]  Changes your nick to "newnick" or shows own nick
privacy p a     Sets whether accept messages from people not on your list (p)
                and require authorization (a)
m nick text     Sends a message to "nick" with the "text"
a text          Sends a message to the last person you sent a message to
r text          Sends a message to the last person that sent you a message
invite u1 to u2 Invites u1 into the chat with u2

In most cases, where you are asked for a nick, you can alternatively enter the
email.  This makes it easier to handle people with weird or long nicks.


* 看線上好友包含email

[msn] ee

* 送訊息: m 對方email帳號 訊息內容

[msn] m ssssssss@hotmail.com hello
Message for ssssssss@hotmail.com queued for delivery
Flushing messages for ssssssss@hotmail.com:
07:45:56PM ssssssss@hotmail.com >>> hello


參考
* msnlib 官方網站 http://blitiri.com.ar/p/msnlib/
* I'MFish 這是一套以msnlib為基礎的GUI介面水族缸程式,把你的msn上面的使用者當成魚在水族缸講話。
* [mrcoffee] is an MSN bot used to notify the office about coffee in progress.
* ichatbot is 一個MSN 機器人
* 清華大學資訊系黃能富教授 msn 分析 9 ver
* 寫得很多的 msn 分析,但是舊版的..
* 微軟的套件開發的msn robot
* http://phorum.study-area.org/index.php/topic,44854.0/topicseen.html 一個 php 發 msn 的程式
* 網站 http://blog.teatime.com.tw/1/post/200

PHP與PERL的比較

作者 Robert Kline 將 perl 與 php 兩各的比較,及相關的函式用法
做了一個很棒的列表!! 讓不會 perl 的我,也可以很快的就進入狀況.
(當然,前提是你要會php...)
http://www.antigreen.org/vadim/ProgLanguageComparison/perl2php.html
另外有個網站寫了個 perl 轉換到 php 的轉換器,看來也很好玩...XD,至於轉換完後能不能跑,你可以試試看..
http://www.sixbynine.net/perl2php/translate.php
* 這裡有差異比較 http://tnx.nl/php.html perl 及 php 的比較

* code 在 blogger 內貼上,用 http://formatmysourcecode.blogspot.com/ 這個轉換.

2009/10/17

tcpdump 到 sniffer , 這果然是個邪惡的工具.

昨天本來是在練習網路封包的抓取,判斷並使用網路分析器....目前流行的有兩套 for windows版的,幾乎念資工的都會遇到,用這個來瞭解網路.當然CCNA也會用到.
目前比較有名的是 wireshark 這套 opensource 的軟體
(他其實就是以前的etherreal,只是作者換公司沒辦法帶走這個商標)
http://www.wireshark.org/ 
網路上有很多教學文章,可以參考這裡
另外一套是 packetyzer 這套也是opensource
http://sourceforge.net/projects/packetyzer/
但兩套都是以 winpcap 來開發的,差別只是UI及內容的解析能力而已.
http://www.winpcap.org/
但其實我還是不太清楚,winpcap 和 libpcap 的關係,我猜可能是有人把他改寫成windows的lib巴!
libpcap 這個 lib 也是 opensource
http://sourceforge.net/projects/libpcap/
然後其實在 linux 下也有一套 tcpdump 文字介面的探測器,一般用法如下:

* man tcpdump 的語法部份
SYNOPSIS
tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ]
[ -C file_size ] [ -F file ]
[ -i interface ] [ -m module ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -Z user ]
[ expression ]
* 大陸的中文翻譯 http://fanqiang.chinaunix.net/a1/b5/20010924/1000011342_b.html
* 簡單易懂,底下用了幾個參數說明如下
# -s 0 封包抓完成,預設沒有抓完全
# -i eth1 指令網卡抓取
# -nn 不要作 dns 反解,加快顯示速度
# port 1863 指的是 expreesion 中對於 tcp port 1863 msn port 的擷取
* example 範例如下:
[root@linux ]# tcpdump -i eth1 -s 0 -nn port 1863
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
20:35:56.701302 IP 140.117.69.174.49265 > 64.4.16.40.1863: . ack 4099310568 win 251
20:35:57.535320 IP 140.117.74.59.2137 > 207.46.124.54.1863: P 2422497404:2422497564(160) ack 2763176839 win 65535
20:35:57.623174 IP 140.117.69.174.49265 > 64.4.16.40.1863: . ack 496 win 256
* 更進一步的用法,把他用 -w 參數寫入檔案
# -X 會把 ascii 及 hex 兩個同時列出來
# tcpdump -i eth1 -s 0 -nn -X -w temp.msn.txt port 1863
* 如果需要可以在 expression 加入 host 192.168.1.254 之類的過濾
# tcpdump -i eth1 -s 0 -nn -X -w temp.msn.txt port 1863 and host 192.168.1.254


* 後來想說找找看有沒有可以看起來更有趣的東西,例如直接抓出msn的內容之類的....於是就找到下面的 perl 程式碼. msn sniffer use perl
* 來源 http://www.757.org/~joat/wiki/index.php/Perl_-_MSN_IM_Sniffer 原始站台好像掛了,連google都找不到.
使用說明:
To capture live traffic from device eth0 run:
msndump.pl -i eth0

To capture from tcpdump traffic.pcap file run:
msndump.pl -r traffic.pcap
* 程式碼備份..純備份.
#!/usr/bin/perl -w
# quick dirty msn sniffer
# http://miscname.com/
# $Id: msndump.pl,v 1.3 2004/11/17 10:00:33 meh Exp $

# you need Net::Pcap and Net::Packet
# use cpan or get manually
# http://search.cpan.org/CPAN/authors/id/A/AT/ATRAK/NetPacket-0.04.tar.gz
# http://search.cpan.org/CPAN/authors/id/K/KC/KCARNUT/Net-Pcap-0.05.tar.gz

my $lowuid='1001';
my $lowgid='1001';

my $filter = 'tcp and port 1863';

# no modify below
use Getopt::Std;
use Net::Pcap;
use NetPacket::IP;
use NetPacket::Ethernet qw (:strip);
use Fcntl;
$|=1;
my $flags |= O_NONBLOCK;

my %opts;
getopt("wicr",\%opts);
if ( (!($opts{i})) && (!($opts{r})) ) {
print "[ msndump - miscname.com ]\n Usage:\n\t-i rl0 || -r file.pcap\n\t-c X - capture X packets\n\t-w freshIMz.txt\n\n";
exit;
}

if ((!$opts{r}) && ($> != '0')) {
die ("you need uid 0\n");
}

# main loop
my $exitvar = '0';
while ($exitvar == '0') {

# create pcap
my $pcap = &cap_pkt;
if (!($pcap)) {
die ("cant capture\n");
}

# drop privs
my $GID="$lowgid";
my $UID="$lowuid";
my $EGID="$lowgid $lowgid";

# -w if set
if ($opts{w}) {
open (FILEOUT,">$opts{w}") || die ("cant open $opts{w} ($!)\n");
fcntl(FILEOUT, F_SETFL, $flags) or die ("couldn't set nonblock for $opts{w} ($!)\n");
}

# capture loop
if (($opts{c}) && ($opts{c} =~ /(\d+)/)) {
print "stopping after $1 packets\n";
Net::Pcap::loop($pcap, $1, \&proc_pkt, 0);
$exitvar = '1';
} else {
Net::Pcap::loop($pcap, -1, \&proc_pkt, 0);
my %stats;
Net::Pcap::stats($pcap, \%stats);
print "saw $stats{ps_recv} packets, dropped $stats{ps_drop}\n";
}

# free it
print "cleaning up\n";
Net::Pcap::close($pcap);
# close fh
if ($opts{w}) {
print "wrote $opts{w}.\n";
close FILEOUT;
}
}

# sub procs below
sub cap_pkt {

my ($pcap,$dev,$err,$mask,$net,$filter2);
my $snaplen = 14096; # seen some big im's :(
my $promisc = 1; # promisc of course
my $timeout = 0; # timeout

# file.pcap?
if ($opts{r}) {
print "reading from '$opts{r}'\n";
$pcap = Net::Pcap::open_offline($opts{r}, \$err);
if (!($pcap)) {
die("error opening $opts{r} ($err)\n");
}
} else {

# set dev from cmdline
$dev = $opts{i};
print "dumping on '$opts{i}'\n";

# get netmask for filter
if ((Net::Pcap::lookupnet($dev, \$net, \$mask, \$err)) == -1 ) {
die ("Net::Pcap::lookupnet failed ($err)\n");
}

# open it
$pcap = Net::Pcap::open_live($dev, $snaplen, $promisc, $timeout, \$err);
if (!($pcap)) {
die ("can't create packet fd ($err)\n");
}
}

# sanity check
if (!($pcap)) {
die ("sanity check failed - \$pcap null\n");
} elsif (!($mask)) {
$mask = '0'; # for open_offline
}

# make filter struct
if (Net::Pcap::compile($pcap, \$filter2, $filter, 1, $mask) != '0') {
die ("broken filter ($filter)\n");
}
# apply
Net::Pcap::setfilter($pcap, $filter2);

return $pcap;
}

sub proc_pkt {

my($user_data, $hdr, $pkt) = @_;
my ($user,$msg);

my $ip_obj = NetPacket::IP->decode(eth_strip($pkt));
#my $ip_obj = NetPacket::IP::strip($pkt);

# check if its a message (or a p2p file transfer)
# if your reading this, include 'P2P-Dest:' in your message body to avoid sniffer ;)
if (($ip_obj->{data} !~ /MSG/m) || ($ip_obj->{data} =~ /P2P-Dest:/m)) {
;
} else {
print $ip_obj->{data};
# extract goodies
if ( (($ip_obj->{data} =~ /MSG (.*)\@(.*)/)) || (($ip_obj->{data} =~ /P4-Context: (.*)/)) ) {
$user = "$1\@$2";
}

if ($ip_obj->{data} =~ /X-MMS-IM-Format:\s.*\r(.*)/s) { #\s\w+\=\w+\;\s\w+\=\w+\;\s\w+\=\w+\;\s\w+\=\w+\;\s\w+\=\w+\;(.*)/m) {
$msg = $1;
}

# display if we have both
if (($user) || ($msg))
{
if(!$user)
{
$user = "unknown user";
}
if (!($opts{w})) {
print "\n----------------------------------------------------\n";
print "src_ip($ip_obj->{src_ip}) dst_ip($ip_obj->{dest_ip})\n";
print "TO/FROM: $user\nMESSAGE:\n$msg\n";
} else {
print FILEOUT "\n----------------------------------------------------\n";
print FILEOUT "src_ip($ip_obj->{src_ip}) dst_ip($ip_obj->{dest_ip})\n";
print FILEOUT "TO/FROM: $user\nMESSAGE: \n$msg\n\n";
}
}
}
}

#e0f

* 這程式是靠 perl CPAN 函式庫的 Net::Pcap and Net::Packet 兩個套件開發的,所以你必須要去取得這兩個函式酷並安裝上去.
# you need Net::Pcap and Net::Packet
# use cpan or get manually
# http://search.cpan.org/CPAN/authors/id/A/AT/ATRAK/NetPacket-0.04.tar.gz
# http://search.cpan.org/CPAN/authors/id/K/KC/KCARNUT/Net-Pcap-0.05.tar.gz
*but debian 安裝起來不是很方便,尤其我用的是 64bit 的os 沒有現成的 binary 檔案
只好參考這篇重新打包一個 .deb 檔案,然後安裝
http://web.suffieldacademy.org/ils/netadmin/docs/software/aimsniff/


* 但基本上這隻程式要跑在公司網路上,然後要看得到東西,你必須對你的 swtich 或是 route 作 port mirror 的動作.底下是之前對 ExtremeXOS 的筆記
* 手冊關於Mirroring 的語法說明
Mirroring

* Page.209
* Mirroring Examples

Mirroring is disabled by default. To enable mirroring in single port, the following command can be used:

enable mirroring to port
# To enable mirroring on multiple ports, use the following command:
enable mirroring to port-list loopback-port
# The port-list is a list of monitor ports which will transmit identical copies of mirrored packets. The
# loopback-port is an otherwise unused port required when mirroring to a port-list. The loopback-port is
# not available for switching user data traffic.
# To disable mirroring, use the following command:
disable mirroring

* 實作 -把全部的 vlan 塞到 port2
CoM-X450.1 # enable mirroring to port 2
* CoM-X450.2 # configure mirroring add vlan CoM
* CoM-X450.3 # configure mirroring add vlan vlan71
* CoM-X450.4 # configure mirroring add vlan vlan72
* CoM-X450.5 # configure mirroring add vlan vlan73
* CoM-X450.6 # configure mirroring add vlan vlan74
* CoM-X450.7 # configure mirroring add vlan vlan75
* CoM-X450.8 # configure mirroring add vlan vlan76
* CoM-X450.9 # configure mirroring add vlan vlan77
* CoM-X450.10 # configure mirroring add vlan vlan78
* CoM-X450.11 # show mirroring
Mirroring Mode: Standard
Mirror port: 2 is up
Number of Mirroring filters:9
Mirror Port configuration:
All ports in vlan CoM
All ports in vlan vlan71
All ports in vlan vlan72
All ports in vlan vlan73
All ports in vlan vlan74
All ports in vlan vlan75
All ports in vlan vlan76
All ports in vlan vlan77
All ports in vlan vlan78


* 本想說應該可以滿足了,但發現也有人用 java寫了一個 msn sniffer ....等等,這人看起來像是中山資管系的...XD..

* Packet Reading with libpcap 使用 C 語言與 libpcap 開發的封包擷取器,有時間再來玩!!
http://www.systhread.net/texts/200805lpcap1.php

* python 也有 pcap 的函式庫 http://pylibpcap.sourceforge.net/ 好多好多.....

2009/10/10

透過Squid Proxy降低網內使用者使用facebook的可用頻寬

因為最近在 facebook 種田的越來越多,但是對於這種使用者通常很難制止他不要用,整個facebook擋掉又會造成使用者覺得網路故障了,一直找理由煩網管。當網路的瀏覽藉由 Transparent Proxy 來管理後可以透過 squid 2.2 以後的 delay_pools 功能達到降低某個網站的使用頻寬。讓使用者錯覺為facebook使用者過多,網路比較慢,進而放棄在公司網路種田的問題。

當然這樣的公告或許也是一種處理的方法。

底下提供使用 Proxy(Transparent Proxy) 的 delay_pools 功能的頻寬限制功能達成
以下所有設定是在 proxy 已定設好得狀況下的修改

  • 對 facebook.com 作限制,先觀察一下 facebook.com 的網址
[root@linux squid]# tail /var/log/squid/access.log  
  • 會發現在台灣用的大多是 facebook.com 及 fbcdn.com 這兩個網址結尾,用whois 查詢他沒有公開他的網段。
  • 加入在 squid.conf 加入 URL,使用 dstdomain 規劃 acl
acl facebook dstdomain .facebook.com .fbcdn.com   
# 如果不確定有沒有生效,你可以先使用 http://ftp.isu.edu.tw 作測試  
# acl facebook dstdomain .isu.edu.tw  
delay_pools 1  
delay_class 1 1  
delay_access 1 allow facebook  
# 把速度降得更低 6400/8=6.4KBytes 左右  
delay_parameters 1 6400/6400  
  • 測試,上去玩玩看就知道!!!慢到爆....XD
  • 參考:
  1. http://www.study-area.org/tips/cbq_init/cbq_init.htm
  2. http://hi.baidu.com/luoctao/blog/item/d00c5cfaa0daa09f58ee90b5.html
  3. http://quark.humbug.org.au/publications/squid/aclsquid.html



詳細請參考 http://wiki.jangmt.com/index.php/253-ch7#Proxy_Server

三十分鐘帶你的PHP上雲端--心得

因為沒有機會去 COSCUP 2009 ,但拜網路科技發達所賜可以聽到一些很棒的topic
畢竟自己摸索還是太慢了.!!

2009議程表 http://coscup.org/2009/zh_tw/program

所有影片列表  http://www.youtube.com/view_play_list?p=13C2C285B3F464EF

但因為有很多主題,需要有錢才玩得起...在目前缺錢的狀況下只能從簡單的玩起

推薦 三十分鐘帶你的 PHP 上雲端 

做了28年的專業的IT人....哈哈....

簡單快速又有力...有示範 Windows Azure Platform 的使用





2009/10/06

CentOS 5.3 MRTG 流量分析報表

MRTG 流量分析報表

  • mrtg 流量報表產生套件:mrtg-2.14.5-2 ,請自行使用 yum 安裝
  • snmpd 服務套件,請自行使用 yum 安裝
net-snmp-5.3.1-19.el5
net-snmp-libs-5.3.1-19.el5
net-snmp-utils-5.3.1-19.el5
  • 先設定 snmpd 服務,讓系統提供snmpd服務,mrtg會抓取snmpd的資料當作流量報表資訊.
[root@server153 mrtg]# vim /etc/snmp/snmpd.conf 
# 把原本的資料全部刪除貼入下面的資料,記得本來的先備份
com2sec local localhost public
com2sec mynetwork 192.168.3.0/24 public
# 將 192.168.3.0/24 改為目前所在IP網段
group MyRWGroup v1 local
group MyROGroup v1 mynetwork
group MyRWGroup v2c local
group MyROGroup v2c mynetwork
view all included .1 80
access MyROGroup "" any noauth prefix all none none
access MyRWGroup "" any noauth prefix all all all
syslocation CentOS 5.3
syscontact snmp
  • 重新啟動 snmpd
# /etc/init.d/snmpd restart
正在停止 snmpd:                                            [  確定  ]
正在啟動 snmpd:                                            [  確定  ]
  • 檢查 snmpd 服務有否啟動
# netstat -tnulp | grep 161
udp        0      0 0.0.0.0:161                 
0.0.0.0:*                               5320/snmpd
  • 使用 snmpdwalk 驗證,輸出會類似下面這樣
# snmpwalk localhost -c public -v 1 
[root@server153 snmp]# snmpwalk localhost -c public -v 1 
SNMPv2-MIB::sysDescr.0 = STRING: Linux server153.example.com
 2.6.18-128.el5xen #1 SMP Wed Dec 17 12:22:24 EST 2008 i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (15359) 0:02:33.59
SNMPv2-MIB::sysContact.0 = STRING: snmp
SNMPv2-MIB::sysName.0 = STRING: server153.example.com
SNMPv2-MIB::sysLocation.0 = STRING
.....(skip)....
  • 當 snmpd 可以使用後,就讓 mrtg 程式自動去抓並產生流量報表
# 切換到 centos 預設的 mrtg 目錄 /var/www/mrtg
[root@server153 mrtg]# cd /var/www/mrtg
# 產生 mrtg.cfg 設定檔
[root@server153 mrtg]# cfgmaker public@192.168.3.153 > mrtg.cfg
# 編輯 mrtg.cfg 設定檔將 WorkDir: /var/www/mrtg 修改為這樣
[root@server153 mrtg]# vim mrtg.cfg 
WorkDir: /var/www/mrtg
# 將 mrtg.cfg 產生成為 html 網頁檔案
[root@server153 mrtg]# indexmaker mrtg.cfg > index.html
# 執行 mrtg 對 mrtg.cfg 產生檔案,因為有編碼問題所以提出警告
[root@server153 mrtg]# mrtg mrtg.cfg 
-----------------------------------------------------------------------
ERROR: Mrtg will most likely not work properly when the environment
       variable LANG is set to UTF-8. Please run mrtg in an environment
       where this is not the case. Try the following command to start:

       env LANG=C /usr/bin/mrtg mrtg.cfg 
-----------------------------------------------------------------------
# 依據提示的說明,連續執行三次即可產生所需的檔案(第一次才需要)
[root@server153 mrtg]# env LANG=C /usr/bin/mrtg mrtg.cfg
[root@server153 mrtg]# env LANG=C /usr/bin/mrtg mrtg.cfg
[root@server153 mrtg]# env LANG=C /usr/bin/mrtg mrtg.cfg
  • 寫入排程,mrtg 最小單位為 5 分鐘
[root@server153 mrtg]# crontab -e 
*/5 * * * * env LANG=C /usr/bin/mrtg /var/www/mrtg/mrtg.cfg
  • 觀看網頁,但因為 mrtg 為 /var/www/mrtg 檔案,可以使用 virtual host 設定為一個站台直接觀看即可。
  • 設定 apache vhost 網址:web.mtchang.blogdns.com 目錄:/var/www/mrtg/
# vim /etc/httpd/conf/httpd.conf


    ServerAdmin mtchang.tw@gmail.com
    DocumentRoot /var/www/mrtg/
    ServerName web.mtchang.blogdns.com


# /etc/init.d/httpd restart
  • 這樣直接觀看 web.mtchang.blogdns.com 就可以看到流量報表了

2009/10/04

網路大學排名

這個網站整理出了國內各大學的網路排名,這個量表能夠真正代表學校的排名嗎?
其實並不一定,但至少可以證明這學校在網頁資訊的呈現是有用心的。
http://uni-ranking.myweb.hinet.net/web/web.htm
如果說把這個排名結果拿來當作招生的宣傳,還是可以矇騙不少不清楚網頁排名是怎麼一回是的人。
大學排名的另類思考─西班牙世界大學網路排名-高等教育評鑑中心

如果你想知道更詳細的資訊,請直接上該調查的網站
http://www.webometrics.info/rank_by_country.asp?country=tw

底下提供幾個具體有效的方式,對於SEO不一定有幫助,但對於資料被 robot 抓到的機會會較為容易。
如果你的學校需要提昇排名的話不用花那麼多錢去重寫網頁,改一下網頁就可以達到很好的效果。
但真的要提升到很前面的排名,還是真的要有料才可以的。

具體有效的SEO方法

基本注意事項

  • 鏈接避免使用IP
  1. 例如:
    <a herf="140.117.111.111">外星球</a>
  2. 儘量以網域名稱為鏈接
  • 鏈接link避免在Flash裡面
  • 避免在網站內使用框架 iframe or frame
  • 儘可能給予每個網頁 title , title 為該頁內容之主題
  1. 例如:
    <title>國立中山大學管理學院</title> 
  • 儘可能給予每個網頁 keyword , keyword 為該頁內容之主題
  1. 例如:
<meta name="keywords" content="中山大學 EMBA NSYSU Taiwan University 臺灣 中山大學 高雄 入學 第一   南台灣高等教育學府 MBA 企研 企管碩 中山管院 管院 不分系 高階經營管理碩士班 西子灣 西灣 中山企研 中山EMBA   中山MBA APEMBA IBMBA 中山企研 EMBA口試 EMBA排名 企研所排名 企研所 MBA排名 商學院 商管學院 企管系   企管研究所 企研所 企管碩士 中山資管 中山財管 中山傳管 傳管所 財管系 中山人管 升學 教育 進修 AACSB   企研中山 MBA中山 國際交換 國際交換學生 國際交換生 企業管理學系 財務管理學系 資訊管理學系 資管系   公共事務管理研究所 公事所 中山公事所 人力資源管理研究所 傳播管理研究所 醫務管理研究所 人管所 醫管所   念企管 考企管 延緩分流 大一大二不分系 中山管理評論 中山管理教室 電子商務時報 電子商務 ectimes " />  
  • 儘可能給予每個網頁 簡單的敘述
  1. 例如:
<meta name="description" content="中山大學管理學院歷史:國立中山大學自民國68年7月開始籌備,  並於民國69年秋季在美麗的高雄西子灣校區正式招生,經歷了整整二十年的成長,目前校內有四百多位教師及  八千位學生,分佈在文、理、工、管理、社會及海洋等六個學院中,成為台灣最活躍的國立綜合大學之一,不  但在學術研究及教學成果上日求精進,廣獲好評,成為教育部發佈重點支持的國內九所大學之一,更廣泛參與  社會服務,對於協助高雄及南部地區的成長與發展有相當卓著的貢獻。由於高雄為重要之工商都市,因此本校  管理學院在創校之初即已肩負重要任務,首先創立了企業管理學系及研究所,開始推動本校的管理教育。民國  73年8月管理學院正式奉準成立,由林基源博士擔任首任院長,後來更在黃俊英博士、劉維琪博士、劉常勇博士  、梁定澎博士、黃英忠博士、蔡敦浩博士、蔡憲唐博士及現任梁定澎博士等歷任院長及眾多優秀同仁的共同努力  下,才有今日的規模與成績。" />

完成基本注意事項後

  • 將你的網站告訴Google (請確實完成基本注意事項,否則Google機器人對您的網站搜索成效有限)
  1. 做法請參考 https://www.google.com/webmasters/tools/docs/zh_TW/sitemap-generator.html
  • 增加外部鏈接
  1. 外部鏈接在整體SEO裡佔了將近50%的比重,外部鏈接越多,將直接影響SEO的成效。
  2. 方法:與其他教育網站或學校網站做鏈接

追蹤網頁流量

  • 使用Google Analytics
  1. http://www.google.com/analytics/zh-TW/