2013年3月23日 星期六

vi 與 vim 的指令整理

vi 是 unix 家族下最功能強大的文字編輯器,讓用戶只要使用一個鍵盤就可以完成所有的編輯。而 vim 則是 vi 的加強版,甚至在 Windows 上也找得到 vim 的芳蹤。但 vi/vim 眾多的指令卻經常令初學者卻步,以下就是我所整理出來那些令人卻步的指令:

編輯模式

指令說明
*i在游標位置進入編輯模式
I在游標行的第一個非空白字元進入編輯模式
*a在游標位置後進入編輯模式
*A在游標行的最後一個字元進入編輯模式
*o向下新增一行,並進入編輯模式
O向上新增一行,並進入編輯模式
cc刪除游標行,並進入編輯模式
*[ESC]取消指令或退出編輯模式
游標移動
指令說明
*gg移到第一行
*G移到最後一行
*行數 → G移動到第 n 行
0移動到該行最前面
$移動到該行最後面
字數 → [Space]向右移動 n 個字元
*行數 → [Enter]向下移動 n 行

標記與複製

指令說明
*v開始字串標記
*V開始行標記
*v → [Ctrl]-V開始區塊標記
*d刪除標記的內容
*y複製標記的內容
*yy複製游標行
yG複製游標行到最後一行
y1G複製游標行到第一行
y$複製游標處到最後一個字元
y0複製游標處到第一個字元
*p在下一行貼上複製或刪除的內容
P在上一行貼上複製或刪除的內容
*[Ctrl]-R → 0在下一行貼上複製或刪除的內容,適用於編輯模式及指令行

搜尋與取代

指令說明
*/搜尋字串向下搜尋字串
**將游標移到字串上,直接按 “*” 也可以做向下搜尋
?搜尋字串向上搜尋字串
*:set ic搜尋時不分大小寫
*:set noic搜尋時要分大小寫
*n繼續下一個搜尋結果
*N繼續上一個搜尋結果
*:起始行,終止行s/搜尋字串/取代字串/gic從第 n 行到第 n 行取代字串 (後面的 g: 整行全部, i: 不分大小寫,c: 詢問)
*:1,$s/搜尋字串/取代字串/gic全部取代字串 (後面的 g: 整行全部, i: 不分大小寫,
c: 詢問)

刪除

指令說明
*dd刪除游標行
*dG刪除游標行到最後一行
d1G刪除游標行到第一行
*d$刪除游標處到最後一個字元
d0刪除游標處到第一個字元

檔案功能

指令說明
*:w存檔 (加 ! 表示強制存檔)
*:w 檔案名稱另存新檔
*:wq存檔並退出 vi
:e 檔案名稱編輯其它檔案
*:e!還原至檔案編修前的狀態
:r 檔案名稱讀入檔案內容,並加到游標行的後面
*:n切換到下一個開啟的檔案
*:N切換到上一個開啟的檔案
*:set nu顯示行號
*:set nonu取消行號顯示
*:files列出所有開啟的檔案

視窗分割

指令說明
*:new新增水平視窗
*:new 檔案名稱新增水平視窗,並在新增的視窗載入檔案
*:vnew新增垂直視窗
*:vnew 檔案名稱新增垂直視窗,並在新增的視窗載入檔案
*[Ctrl]-W → [方向鍵]切換視窗
*:only僅保留目前的視窗

其它

*指令說明
*J將游標行與下一行合併
*u還原指令
*[Ctrl]-R重做指令
*.重覆上一個指令
命令執行 linux 指令,並顯示執行結果
*:q退出 vi (加 ! 表示強制退出)

vim 的設定檔

通常我會編輯 /etc/vimrc,在檔案最後加入:
" 顯示列號
set number
" 語法高亮度顯示
syntax on
" 標記搜尋到的字串
set hlsearch
" 自動縮排
set autoindent
" 顯示說明
set ruler
" 顯示編輯狀態
set showmode
" 設定註解的顏色
highlight Comment ctermfg=cyan
" 設定搜尋到的字串顏色
highlight Search term=reverse ctermbg=4 ctermfg=7
" 設定 tab 鍵的字元數
set tabstop=4

2013年3月22日 星期五

tcpdump 的用法


tcpdump 可用來擷取通過某網路介面的封包。(需有 root 權限!)
這個很久以前上課就有教了,但都沒啥用到!最近因為要查 Mail Server 為啥無法寄信,才又重新上網找了一下相關資料。
參考:鳥哥Tsung Blog510CTO
基本選項有:
.-n:以數字顯示,不對 IP 作反解,但仍顯示服務名稱。
.-nn:直接以 IP 及 port number 顯示,而非主機名與服務名稱。
.-p:不要以 promiscuous mode 執行。
.-t:不要顯示 timestamp。
.-i:指令要監控的網路介面,如 eth0、lo、any 等。
.-e:使用資料連接層 (OSI 第二層) 的 MAC 封包資料來顯示。
.-c:監聽的封包數,如果沒有這個參數,tcpdump 會持續不斷的監聽,直到使用者輸入 [ctrl]-c 為止。
.-q:僅列出較為簡短的封包資訊,每一行的內容比較精簡。
.-s:抓比較長的 data 做一筆記錄。
.-v:輸出一個稍微詳細的資訊,例如在 IP 封包中可以包括 ttl 和服務類型的資訊。
.-A:封包的內容以 ASCII 顯示,通常用來捉取 WWW 的網頁封包資料。
.-X:可以列出十六進位 (hex) 以及 ASCII 的封包內容,對於監聽封包內容很有用。
.-w:如果你要將監聽所得的封包資料儲存下來,用這個參數就對了!後面接檔名。
.-r:從後面接的檔案將封包資料讀出來。那個『檔案』是已經存在的檔案,並且這個『檔案』是由 -w 所製作出來的。
《範例》 tcpdump -nn -i eth0
可指定條件式要求 tcpdump 只擷取某些封包。
條件式可以是單一的『基本條件式(primitives)』,
或用 and(&&),or(||),not(!) 以及『(』、『)』組合基本條件式而成。
常用的『基本條件式(primitives)』:
host 192.168.0.254來源或目的 IP 是 192.168.0.254
src host 192.168.0.254 來源 IP 是 192.168.0.254
dst host 192.168.0.254目的 IP 是 192.168.0.254
ether host aa:bb:cc:dd:ee:ff來源或目的 mac address 是 aa:bb:cc:dd:ee:ff
ether src aa:bb:cc:dd:ee:ff來源 mac address 是 aa:bb:cc:dd:ee:ff
ether dst aa:bb:cc:dd:ee:ff目的 mac address 是 aa:bb:cc:dd:ee:ff
net 192.168.0.0 mask 255.255.255.0來源或目的 IP 在 192.168.0.X 可加上 src 或 dst 做進一步限制
net 192.168.0.0/24同上
tcp/udp/icmp封包內有 tcp/udp/icmp 的資料
port domain來源或目的 port 為 domain (53) 可加上 src,dst 或 tcp,udp 做進一步限制
port 53同上
tcp src port smtp來源 port 為 TCP/25
範例:
tcpdump -i eth0 'tcp'
tcpdump -i eth0 'host 192.168.0.X'
tcpdump -i eth0 'tcp and host 192.168.0.X'
tcpdump -i eth0 'tcp port 22 and host 192.168.0.X'
tcpdump -i eth0 'tcp and (not port 22) and (net 192.168.0.0/24)'
看了鳥哥介紹 -X 的參數,忍不住也來進行個實驗,決定來抓抓 POP3 的封包,我先輸入下列指令來保存封包內容:
# tcpdump -i eth0 -nn -X 'port 110' -w packet
執行後,畫面就不會出現所抓取的封包內容,直接就寫到 packet 這個檔案中。接下來我再執行下列指令來檢視封包內容:
# tcpdump -nnXr packet |less
果不其然,終於也見識到了明碼傳輸的危險性了。
節錄一些「超級詳細 Tcpdump 的用法」的內容
第一種是關於類型的關鍵字,主要包括 host、net、port,例如 host 210.27.48.2,指明 210.27.48.2 是一台主機,net 202.0.0.0 指明 202.0.0.0 是一個網路位址,port 23 指明埠號是 23。如果沒有指定類型,預設的類型是 host。
第二種是確定傳輸方向的關鍵字,主要包括 src、dst、dst or src、dst and src。這些關鍵字指明了傳輸的方向。舉例說明,src 210.27.48.2,指明 IP 封包中來源位址是 210.27.48.2 , dst net 202.0.0.0 指明目的位址是 202.0.0.0。如果沒有指明方向關鍵字,則預設是不分方向(src or dst)。
第三種是協定的關鍵字,主要包括 fddi、ip、arp、rarp、tcp、udp 等類型。fddi指明是在FDDI(光纖分佈式數據介面)上特定的網路協定,實際上它是“ether”的別名,fddi 和 ether 具有類似的來源位址和目的位址,所以可以將 fddi 協議封包當作 ether 的封包進行處理和分析。其他的幾個關鍵字就是指明了擷取的封包協定。如果沒有指定任何協定,則 tcpdump 將會擷取所有協定的封包。
除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway、broadcast、less、greater。還有三種邏輯運算,反相運算式 not,!;與運算式 and,&&;或運算式 or,||。這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來說明。
A.想要擷取所有 210.27.48.1 的主機收到的和發出的所有的數據封包:
# tcpdump host 210.27.48.1
B.想要擷取主機 210.27.48.1 和主機 210.27.48.2 或 210.27.48.3 的通信,使用命令:(在命令行中使用小括號時,一定要加跳脫符號\)
# tcpdump host 210.27.48.1 and \( 210.27.48.2 or 210.27.48.3 \)
C.如果想要擷取主機 210.27.48.1 和除了與主機 210.27.48.2 之外所有主機通信的 IP 封包,使用命令
# tcpdump ip host 210.27.48.1 and ! 210.27.48.2
D.如果想要擷取主機 210.27.48.1 接收或發出的 telnet 封包,使用如下命令:
# tcpdump tcp port 23 host 210.27.48.1
E.對本機的 udp 123 埠號進行監視(123 為 ntp 的服務埠號):
# tcpdump udp port 123
F.系統將只對名稱為 hostname 的主機的通信數據封包進行擷取。主機名可以是本地主機,也可以是網路上的任何一台電腦。下面的命令可以擷取主機 hostname 發送的所有數據封包:
# tcpdump -i eth0 src host hostname
G.下面的命令可以擷取所有送到主機 hostname 的數據封包:
# tcpdump -i eth0 dst host hostname
H.我們還可以擷取通過指定閘道的數據封包:
# tcpdump -i eth0 gateway GatewayIP
I.如果你還想擷取主機指定埠號的 TCP 及 UDP 數據封包,那麼執行以下命令:
# tcpdump -i eth0 host hostname and port 80
J.如果我們只需要列出送到 80 埠號的數據封包,用 dst port;如果我們只希望看到返回 80 埠號的數據封包,用 src port。
# tcpdump -i eth0 host hostname and dst port 80  目的埠號是 80
或者
# tcpdump -i eth0 host hostname and src port 80  來源埠號是80,一般是提供 HTTP 服務的伺服器
K.如果條件很多的話,要在條件之前加 and 或 or 或 not
# tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80


若想要查本機端port 80,可以這樣寫
tcpdump -s 0 -A -vvv -nn -X dst port 80

2013年3月13日 星期三

centos 6.3 x64 环境下安装vpn客户端翻Q


前言:
   由于项目需要使用google云存储以及facebook, twitter 的API服务, 本地开发服务器需要翻Q.  特地折腾一个给本地服务器

先检查服务器是否安装过 ppp, pptp, pptp-setup, 
如果没有, yum -y install  安装之.

1yum -y install ppp pptp pptp-setup
2cp /usr/share/doc/ppp-2.4.5/scripts/pon /usr/sbin/
3cp /usr/share/doc/ppp-2.4.5/scripts/poff /usr/sbin/
4chmod 755 /usr/sbin/pon
5chmod 755 /usr/sbin/poff


然后使用pptpsetup命令建立拨号连接:
1pptpsetup --create test --server x.x.x.x --username vpnusername --password xxx

这样会生成一个名为test的vpn拨号账号,    然后编辑账号配置文件:
1vi /etc/ppp/peers/test
01# written by pptpsetup
02pty "pptp xxx.xxx.xxx --nolaunchpppd"
03lock
04noauth
05nobsdcomp
06nodeflate
07name vpnusername
08remotename test
09ipparam test
10file /etc/ppp/options.pptp
11defaultroute #使用本连接作为默认路由
12persist #当连接丢失时让pppd再次拨号
13require-mppe-128
14refuse-pap
15refuse-chap
16refuse-eap
17refuse-mschap

开始拨号
pon test
ifconfig 可以看到 vpn连接ppp0出来了.  
如果这个时候还是访问不到,  那么手工再加一下路由信息
1route add -net 0.0.0.0 dev ppp0
或者
1route add -net 10.10.2.0 network 255.255.255.0 dev ppp0
關閉vpn  

   poff

如果有問題可以先觀查 /var/log/messages

以上資料摘自 http://my.oschina.net/fishman/blog/96227