關於本報

自由軟體鑄造場電子報
報主:中央研究院資創中心
創刊日期:2004-06-03
發報頻率:雙週刊
訂閱人數:3,349
官網:

近期電子報


訂閱便利貼


將貼紙語法置入您的網站或部落格當中, 訪客可以輸入mail取得認證信,並按下確認連結後, 快速訂閱您的報紙。
預覽圖
訂閱自由軟體鑄造場電子報報
自由軟體鑄造場電子報
-----------------------------------------------------------------------------------------------------
Plurk FaceBook Twitter 收進你的MyShare個人書籤 MyShare
  顯示內嵌語法

自由軟體鑄造場電子報
發報時間: 2010-07-13 11:00:00 / 報主:OSSF
[公益聯播]信義、南港區身心障礙者資源中心-徵求行政志工!!!!
本期目錄
[技術專欄] 以 IPP2P 控管 P2P 軟體
[源碼秘技] 跨平台的文字編輯器 - TEA
[技術專欄] 以 IPP2P 控管 P2P 軟體
吳惠麟/文

前言:

隨著 internet 的風行,相關的資安問題也層出不窮,除了傳統的病毒及網路釣魚等威脅外,不當使用 P2P 軟體所衍生的資安問題也日漸受到重視,在本文中,筆者將應用開源碼社群中的 IPP2P 搭配 netfilter(linux 系統上最有名的防火牆軟體,即一般人所熟知的 iptables)機制,來建構一個可控管 P2P 軟體的防火牆系統。在本方案中所使用到的軟體如下表所示:


軟體名稱

說明

官方網址

Fedora 11

所使用的作業系統

http://fedoraproject.org/

L7-filter

Netfilter 的外掛核心模組,將新增此模組才可讓 Netfilter 具有應用層的封包分析能力

http://l7-filter.sourceforge.net/

Kernel 2.6.28

本次所使用的Linux核心程式,L7-FILTER 需重新編譯核心,在本方案中,筆者採用 2.6.28版本

http://www.kernel.org/

iptables 1.4.3

Netfilter的管理應用程式,L7-FILTER 需重新編譯 iptables,新增 L7 的比對項目

http://netfilter.org/

IPP2P

阻檔 P2P 軟體程式

http://www.ipp2p.org/

相關 patch 檔

Ipp2p 的相關修正檔(包含 iptables 及 kernel)的修正檔

http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-iptables-1.4.0.patch
http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-iptables-1.4.1.patch
http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-kernel-2.6.28.patch

什麼是 (netfilter/iptables)

Netfilter 機制是 linux 系統上最有名的 L4 (Level 4) 防火牆,其中 netfilter 指的是核心處理的模組,而 iptables 即為設定管理 Netfilter 的使用者程式。所謂 L4 意指 Netfilter 運作 OSI (Open system Interconnection) 模型的第四層(國際標準組織所提出的共通標準化的通訊協定標準),OSI 模型共分七層,各層各司其職,概述如下(由下而上):

實體層 (Physical Layer)

主要定義底層傳輸介面的電氣媒體 (MEDIA),傳輸方法 (TRANSMISSION METHOD) 與佈線方式 (TOPOLOGY) 等等。

資料連結 (Data LinK Layer)

定義如何確保資料正確傳輸,及將資料切割並加上來源與目的地位址與資料長度等訊息,包裝成頁框 (FRAME),在此層中具有 MAC 資訊。

網路層 (Network Layer)

負責資料繞徑 (ROUTING ),包括轉換地 (TRANSLATES ADDRESSES),尋找最佳路徑 (BEST ROUTING) 與管理流量 (TRAFFIC),在此層中具有 IP 等資訊。

傳輸層 (Transport Layer)

確保資料到達順序與正確性,在此層中具有埠等資訊。

會談層 (Session Layer)

定義連結建立與結束的對話。

表達層 (Presentation Layer)

處理資料格式,包括格式轉換,加密 (ENCRYPTION) 與解密 (DECRYPTION),壓縮 (COMPRESSION) 與還原。

應用層 (Application Layer)

定義供應用程式存取的介面與功能。

由上可知,netfilter 即是運作在傳輸層中,所能掌握的資訊即為 IP、埠及 MAC 等相關資訊。這也是為什麼 netfilter 要控管 P2P 軟體需要新增 IPP2P 模組的原因。在未新增 IPP2P 模組之前,netfilter 僅能以 IP 位址(來源或目的),埠資訊(來源或目的),MAC 資訊(來源或目的)控管來往的封包。如此對於使用固定埠的網路服務或許有控管的能力,但對於未使用固定埠的網路服務(如某些 P2P 軟體會使用動態埠【即每次使用會使用不同埠】)卻無能為力。所以欲控管如 P2P 等軟體,我們需要利用解析應用層的資訊,來辨識 P2P 的服務。在新增 IPP2P 模組之前,我們必需先修正 (patch) 核心,讓核心具有應用層解析的能力,這需要 L7-FILTER 的幫忙。先讓 netfilter 具有分析應用層封包的能力,後再使用 IPP2P 的模組,藉由分析應用層封包的特徵碼來辨識 P2P 軟體並加以控管。Netfilter分為核心模組與應用程式,以下先簡單說明 NETFILTER 機制:

  • 核心模組 (MODULE)

    Netfilter 利用掛鉤 (HOOK) 的方式,將相關的核心模組掛鉤 (HOOK) 於核心處理封包的流程上,針對通過的封包實施檢查及過濾。系統架構如下圖所示:

 [技術專欄] 以 IPP2P 控管 P2P 軟體

  1. PREROUTING:當封包進入時即會經過 PREROUTING 檢查點,這也是封包進入後所遇到的第一個檢查點。接下來,封包會判斷是否已到達目的主機,如果確定則會進入 INPUT 檢查點,否則即進入 FORWARD 檢查點;

  2. INPUT:當封包發現己到達目標主機時即會進入本機並經過 INPUT 檢查點,否則將進入 FORWARD 檢查點,繼續往下個目標主機前進;

  3. OUTPUT:當封包經由本機發出即會經過 OUTPUT 檢查點;

  4. FORWARD:如封包發現並非到達目標主機,即會經過 FORWARD 檢查點;

  5. POSTROUTING:當封包要離開系統主機時會經過 POSTROUTING 檢查點,這也是封包進入後所遇到的最後一個檢查點。

  • 應用程式

    Netfilter 提供 iptables 應用程式,用來設定 Netfilter 檢查點的過濾規則。設定規則是以表格 (table) 及鏈 (chain) 的概念來設定,Netfilter 總共提供了三個表格及五個規則鏈。

    • Filter:主要提供封包過濾,可過濾 TCP、UDP、MAC、ICMP 等類型封包,包含 INPUT、FORWARD 和 OUTPUT 等規則鏈。

    • nat:提供 SNAT 及 DNAT 等功能,可用來 IP 偽裝,讓網域內的多台電腦可共用一個公共 IP 上網。本表格包含 PREROUTING、POSTROUTING、OUTPUT 等規則鏈。

    • mangle:主要用來修改封包內容,包含 PREROUTING、POSTROUTING、FORWARD、INPUT 和 OUTPUT 等規則鏈。

以下簡略說明 iptables 的語法結構,如下例:

Iptables [-t table] command [match][-j target/jump]

[-t table]

用來指定要設定那個表格的規則,如未指定即預設為 filter。

Command

命令,通常後會接鏈 (chain) 名稱。常用命令如下:

-A 在指定的鏈 (chain) 之後新增一個規則
-D 在指定的鏈 (chain) 之後刪除一個規則
-F 清除規則
-L 顯示規則
[match]

比對條件。常用的比對條件如下:

-d 指定套用規則的目的主機或 IP 位址
-I 當封包進入 FORWARD、OUTPUT 或 POSTROUTING 所通過的網路介面名稱(如 eth0)

(其餘相關的設定參數就請有興趣的讀者自行參閱手冊)

[-j]

目標(表示設定規則的目的),常用目的選項如下:

ACCEPT 表示允許封包通過

DROP 表示丟棄封包

RETURN 表示直接離開目前規則,直接跳到下個規則比對

QUEUE 表示將封包重導到本機的佇列 (QUEUE) 中,通常用來供其它應用程式處理

如下為一設定範例:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

-A INPUT:在 INPUT 的鏈 (chain) 上新增一規則
-p tcp --dport 80:比對條件(表示如果通訊協定為 tcp 且目的埠為 80)
-j ACCEPT:即表示接受

(整段的規則為如果封包為 tcp 型式且目標埠為 80 即讓它通過)

  • 安裝說明

    基本上要建造一個可控管 P2P 軟體的防火牆,我們需要下列的工作:

    1. 重新編譯核心,使核心能夠控管到 L7 的封包

    2. 安裝 L7-FILTER

    3. 安裝 IPP2P

    4. 重新編譯 iptables,使 iptables 能設定 L7 的比對規則

L7-FILTER 為 Netfilter 標準外掛的模組,利用特徵碼的方式來加強 Netfilter 解析 L7 應用層的封包能力來辨識出不同的應用程式。至此,讀者可能會有個疑問,既然 L7-FILTER 已可辨識 L7 應用程式,那應該可辨識出 P2P 軟體,為何還需要 IPP2P,這涉及到兩套軟體實作的方式,L7-FILTER 是採用正規表示法來比對每個 L7 應用程式的連接 (CONNECT) 前 20 個 byte 的方式,而 IPP2P 則是將常用的 P2P 軟體特徵碼直接寫入程式中,這意謂著 IPP2P 將會比 L7-FILTER 模組更能精確地辨識出 P2P 軟體並加以控制。根據 L7-FILTER 官方網址的說明,以 Kernel 2.6.28 的相容性最佳,因此本次我們將採用 2.6.28 的核心來編譯。相關步驟如下:

  1. wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.gz #取得 2.6.28 kernel 的原始碼

  2. wget http://downloads.sourceforge.net/project/l7-filter/l7-filter kernel version/2.22/netfilter-layer7-v2.22.tar.gz?use_mirror=ncu #取得 L7-FILTER 原始碼,目前最新的版本為 2.2

  3. 將 linux-2.6.28.tar.gz 解壓縮並置於/usr/src/linux2.6.28目錄下

  4. 將 netfilter-layer7-v2.22.tar.gz 解壓縮並將其中的 kernel-2.6.25-2.6.28-layer7-2.22.patch 複製到 /usr/src/linux2.6.28

  5. cd /usr/src/linux-2.6.28

  6. patch -p1<kernel-2.6.25-2.6.28-layer7-2.22.patch #修正核心組態,新增 L7 MATCH 模組

  7. make oldconfig #利用系統原有的參數來設定核心組態(讀者有興趣可參閱 /boot/config-2.6.29.4-167.fc11.i686.PAE,此檔案記錄目前系統核心所使用的參數【不一定最精簡,但保證穩定】。 在設定的過程中,系統會詢問一些問題,除了 support (NETFILTER_XT_MATCH_LAYER7) [N/m/y/?] 設定為 m,其餘皆使用預設即可

  8. make #編譯核心,在編譯的過程中,筆者曾發生 getline() 的錯誤,這是因為在核心程式 (unifdef.c) 中有自定義一個 getline 函數,剛好與標準的函數庫 getline 名稱相同而造成錯誤。讀者只需在 scripts/unifdef.c 中,把 getline 名稱改成另外的名稱即可

  9. make modules #編譯核心模組

  10. make modules_install #安裝核心模組

  11. make install #重新安裝核心並重新設定開機組態(讀者需修改 /etc/grub.conf 將預設開機設為 kernel 2.6.28【將 default=1 改為 default=0】)

  12. reboot #重新開機後,即會使用新編譯的核心開機。讀者可利用 uname –r 指令來驗證是否為 2.6.28 的核心。

IPP2P 為 netfilter 標準的外掛模組,主要目的在於控管 P2P 軟體。根據官方網站所述,支援的 P2P 軟體如下表:

參數

P2P 軟體

通訊協定

--edk

eDonkey, eMule, Kademlia

TCP and UDP

--kazaa

KaZaA, FastTrack

TCP and UDP

--gnu

Gnutella

TCP and UDP

--dc

Direct Connect

TCP only

--bit

BitTorrent, extended BT

TCP and UDP

--apple

AppleJuice

TCP only

--winmx

WinMX

TCP only

--soul

SoulSeek

TCP only

--ares

Ares, AresLite

TCP only

安裝步驟如下:

  1. wget http://netfilter.org/projects/iptables/files/iptables-1.4.3.tar.bz2

  2. 解開並將 iptables 的原始碼置於 /home/johnwu/iptables-1.4.3

  3. cd /home/johnwu/iptables-1.4.3

  4. 先針對 iptables 做 configure。./configure --prefix=/usr/local/iptables143 --with-ksource=/usr/src/linux-2.6.28/

  5. wget http://www.ipp2p.org/downloads/ipp2p-0.8.2.tar.gz

  6. 解開 ipp2p 壓縮檔並進入該目錄中

  7. 下載相關的 patch 檔

    1. wget http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-iptables-1.4.0.patch

    2. wget http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-iptables-1.4.1.patch

    3. wget http://www.caronico.com/linux/ipp2p-0.8.2-iptables-1.4.3.patch

    4. wget http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-kernel-2.6.22.patch

    5. wget http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-kernel-2.6.28.patch

  8. 修正 patch 檔,請依次執行下列指令:

    1. patch p1<ipp2p-0.8.2-kernel-2.6.22.patch

    2. patch -p1<ipp2p-0.8.2-kernel-2.6.28.patch

    3. patch -p1<ipp2p-0.8.2-iptables-1.4.0.patch

    4. patch -p1<ipp2p-0.8.2-iptables-1.4.1.patch

    5. patch -p1<ipp2p-0.8.2-iptables-1.4.3.patch

  9. 修正 ipp2p 所附的 Makefile

    1. ld -shared -o libipt_ipp2p.so libipt_ipp2p.o 改為 $(CC) -shared -o libipt_ipp2p.so libipt_ipp2p.o(不然編譯出來的執行檔會有問題)

    2. 在 ifndef $(IPTABLES_SRC) 的區段中,將 IPTVER 改為 1.4.3

    如下示:

      ifndef $(IPTABLES_SRC)     IPTVER =1.4.3     IPTABLES_SRC = $(wildcard /home/johnwu/iptables-$(IPTVER))  endif 

其中 /home/johnwu/iptables-$(IPTVER) 為 iptables 原始碼所在的目錄

  1. make #編譯成功後會產生ipt_ipp2p.ko及libipt_ipp2p.so

  2. cp libipt_ipp2p.so /usr/local/iptables143/libexec/xtables/

  3. cd iptables-1.4.1 && make && make install #編譯 iptables

  • 測試

筆者的測試環境為 IPP2P 主機當成 NAT 主機,其餘客戶端主機均透過此主機連到外面去,在此即不多說 NAT 原理,有興趣的讀者可自行參閱相關文件。請依序下達下列指令:

  1. echo "1">/proc/sys/net/ipv4/ip_forward #開啟主機 ip forward功能

  2. /usr/local/iptables143/sbin/iptables -t nat -A POSTROUTING -o XXX.XXX.XXX.XXX -s 192.168.2.0/24 -j MASQUERADE #利用 MASQUERADE 功能設定 NAT 功能。在本例中,對外實際 IP 為 XXX.XXX.XXX.XXX,而 192.168.2.0 網域的內部主機均能以此真實 IP 上網。請讀者自行依據本身環境自行調整。在設定完成後,讀者可將內部主機的閘道器 (gateway) 指向此台主機,如果可正常上網即表示設定正確。

  3. /usr/local/iptables143/sbin/iptables -A FORWARD -m ipp2p --ipp2p -j DROP #設定阻檔全部支援的 P2P 軟體,或者讀者可視個別情況來決定欲阻擋的 P2P 軟體,如:iptables -A FORWARD -m ipp2p --bit -j DROP(設定阻檔個別的p2p軟體,如本例即為阻檔 BitTorrent)

在讀者設定完成後,可利用 iptables –L 查看是否有下列的資訊,如下圖示:

[技術專欄] 以 IPP2P 控管 P2P 軟體

至此,讀者可將本機的預設閘道器 (gateway) 指向 ipp2p 所在的主機,後即可開啟 BT 軟體來測試是否可阻檔 P2P 軟體,限於時間及設備因素,筆者僅測試 BitTorrent 此款軟體。其餘的 bittorrent 軟體就請讀者自行測試了。




[源碼秘技] 跨平台的文字編輯器 - TEA

官方網站:http://tea-editor.sourceforge.net/
下載網址:http://ncu.dl.sourceforge.net/project/tea-editor/tea-editor/28.0.0/tea-28.0.0.tar.bz2 (222KB)
註:Ubuntu 可直接使用 APT/YUM 進行安裝,指令為 sudo apt-get install tea。

簡介

每 個人在使用電腦上的軟體時,多半都會有一些個人的習慣。以 Shell 為例,有人喜歡 bash,也有人非使用 tcsh 不可。文字編輯器也是一樣,純文字介面的 vi、joe、pico,或是 emacs 都有不少的支持者,圖形介面的 gedit 則是大多數 GNOME 桌面環境的使用者,在圖形環境下進行文書編輯時的第一選擇。

許多 UNIX 或 Linux 的相關書籍,都會建議初學者直接使用 vi 這套著名的文字編輯器,甚至建議即使在圖形作業環境下,也採用開啟終端機再執行 vi 的方式進行文字編輯的相關工作。vi 以其操作介面難以上手而聞名,許多人學了大半天,還是無法理解或是記憶相關的操作指令。雖然 vi 被視為學習 UNIX 或 Linux 系統時一定要學會的文字編輯器之一,功能也有其獨到之處,但在圖形操作介面已經相當成熟的今天,並不一定非要學習 vi 不可。因為有許多圖形介面的文字編輯器不但可以做到與 vi 相同的功能,甚至提供更多。本文所要介紹的 TEA 編輯器,便是最好的一個例子。TEA 本身雖然是在 Linux 平台上進行開發,但也提供 Windows 版本,屬於跨平台的文字編輯器之一。

[源碼秘技] 跨平台的文字編輯器 - TEA
▲ TEA 的執行畫面

TEA 的功能與特色

目 前 TEA 的最新版本為 28.0.0,本身是使用 Qt 4.4 開發而成。先前 TEA 曾經推出使用 GTK+ 2.4 所開發的 TEA-GTK 版本,但目前 GTK 版本只發行至 17.6.6 版,暫時沒有開發新版本的計畫,所以建議在系統中安裝 Qt,並直接使用 TEA Qt 版本。

由於 TEA 本身是一套純文字檔案的文書編輯器,因此在檔案編輯完成準備進行存檔時,自然只有純文字的格式可以選擇。有趣的是,TEA 雖然只能儲存為純文字格式,但在可以讀取的檔案格式當中,卻可以支援許多文書處理軟體所產生的檔案格式。其中包括 OpenOffice.org 主要使用的開放文件格式(Open Document Text)、先前舊版本的 OpenOffice.org 所使用的 SWX 格式、KWord 所使用的 KWD 格式、Abiword 本身所使用的檔案格式,或是 Windows 系統上常見的 Rich Text Format (RTF) 等等。這樣的功能可以讓使用者直接利用 TEA 讀取原先以其他特定格式所儲存的文書檔案,並轉換格式儲存為更具可攜性的純文字格式。如果需要進行文書檔案的格式轉換,相當適合使用 TEA 進行相關的工作。

許多應用程式所佔用的磁碟空間都相當龐大,雖然目前硬碟的取得成本相當低廉,但一套軟體動輒數十甚至數百 MB 的執行檔與相關的程式庫檔案,累積下來所佔用的硬碟空間還是相當驚人。一般而言圖形介面的軟體通常會給人一種龐然大物的印象,但 TEA 卻扭轉了這樣的定見。以原始碼而言,222KB 的大小或許無法代表任何意義,但如果連結至 TEA 的下載網址,便會發現 Linux 版本的 ELF 格式執行檔,在解壓縮後其大小僅有 1.1MB 左右。通常體積較小的程式,在功能上可能較為陽春,所以程式碼不大。但以 TEA 所提供的功能來看,體積較小的結果,很可能是因為程式本身在設計時有經過一定程度的最佳化,才能精簡到這樣的程度。

目前大多數的編輯軟 體,為了提供同時編輯多個檔案的功能,都會採用頁籤方式作為操作介面,也就是將每一個正在編輯中的檔案,使用不同的頁籤作為區隔。TEA 也不例外,本身支援同一時間編輯一個以上的檔案,亦採用頁籤的編排設計方式,讓使用者可以立即得知目前正在編輯的檔案為何,並可快速切換與檢視其他已開啟 的檔案。由於頁籤的設計與畫面編排方式在使用上非常方便,因此 TEA 除了在顯示目前已開啟檔案時會使用頁籤觀念以外,一些常用功能也會以頁籤方式進行整合,並顯示在畫面右方。例如點選「manage」即可進入檔案管理功能 以進行檔案處理的相關工作;「tune」可以直接進入設定畫面,並決定 TEA 在操作介面上的各種設定。「learn」則是 TEA 本身所提供的線上說明文件,如果在操作時對於 TEA 的各種功能有不清楚的地方,可以直接進入此畫面查詢線上說明文件。如果要返回編輯畫面,點選「edit」頁籤即可。

[源碼秘技] 跨平台的文字編輯器 - TEA
▲ TEA 在畫面上方與右方都採用頁籤方式作為操作介面

使 用文字編輯器的場合相當多,除了進行純文字文件的編輯工作以外,在進行程式開發相關的工作時,也有許多人會直接使用一般的文字編輯器,而非使用整合開發環 境所內建的編輯器。與目前大多數的編輯器相同,TEA 會自動判斷目前所編輯的檔案內容是否為程式原始碼,並套用適合的文法標示功能,以不同的顏色或是字型顯示程式中的關鍵字,或是區別字串、數值等不同的資料 型態。目前 TEA 的文法標示功能除了主要的 C/C++ 語言以外,另外還支援 Basic、C#、Fortran、Java、NASM、Pascal、Perl、PHP、Verilog、XML、HTML,以及 XHTML 等各種不同的程式語言。此外,像一般的 Shell Script(目前僅支援 Bash 的 Shell Script),或是 TeX/LaTex 的文件,以及主要作為語系翻譯功能使用的 gettext PO 檔,TEA 也支援相關格式的文法標示功能,在處理檔案時會對使用者有相當程度的幫助。但較為可惜的是,TEA 目前尚未支援程式碼折疊與尋找配對括號的功能,這二項功能如果可以在未來的版本之中加入,相信會有更多程式設計師採用 TEA 作為編輯程式原始碼時的主要工具。

由於編輯 HTML 網頁原始檔時,可能需要經常使用特定的 HTML 標籤,因此 TEA 特地將 HTML 常用的標籤整合至 Markup 選單中,並指定熱鍵至一部份標籤之中,例如文字所採用的標題大小、是否置中、插入連結等功能都是 TEA 整合至 Markup 選單中,並經常會使用到的 HTML 標籤。如果 HTML 檔案編輯到一個程度,希望先行檢視該檔案的顯示結果時,則可以利用 TEA 的使用外部瀏覽器預覽功能進行處理。使用時從「View」選單中執行「Preview with default browser」,即可使用預設的瀏覽器檢視檔案的編輯成果。

此外,由於目前檔案編碼的格式相當混亂,在處理不同語言所建立的文件時更容 易遭遇相關的問題,因此文字編輯器是否可以正確處理不同編碼所產生的文件,也成了相當重要的功能之一。TEA 在開啟文件時,會自動判斷文件所使用的編碼格式為何,並自動以該種編碼進行解讀與顯示。如果 TEA 的判斷不正確,使用者亦可在開啟檔案時直接指定所要使用的編碼格式,如此一來便可避免因為編碼格式不正確,而無法在畫面中顯示正確文字的情況發生。

[源碼秘技] 跨平台的文字編輯器 - TEA
▲ 使用者可以在開啟檔案時,直接指定檔案的編碼格式,或是交給 TEA 自動進行判斷。

除 了文字編碼問題以外,文法檢查功能也是文字編輯器相當重要的功能之一。為了避免發送出去的文件有太多拼字上的錯誤,TEA 可以呼叫 aspell 或是 Hunspell 等工具程式進行文章內容的拼字檢查,並告知使用者是否有拼字錯誤的問題存在。由於目前僅支援 aspell 與 Hunspell,如果要檢查拼字是否正確,但該文件所使用的語言並不是這二套工具程式所支援的語系,則拼字檢查功能將無法使用。

TEA 另外還內建了一個檔案管理功能,可以進行一些基本的檔案操作,例如建立新目錄、更改檔名、刪除檔案等等。此外,也可以利用此功能進行檔案檢查碼的計算,目 前支援 MD4、MD5 與 SHA1 三種雜湊演算法。在需要進行檔案檢查碼的比對時,先在檔案管理畫面選擇欲計算的檔案,再從「Fm」選單中點選「File information」->「MD5 checksum」(或是「MD4 checksum」、「SHA1 checksum」),即可在畫面下方的訊息視窗中得知此檔案的檢查碼為何。如果需要進行檔案的壓縮,亦可從「Fm」的「ZIP」選單中進行處理,包括建 立新的ZIP壓縮檔、將檔案加入已存在的ZIP檔等功能都有支援。TEA 的檔案管理功能也支援書籤功能,可以將常用的目錄加入到檔案管理功能之中的書籤,將來在需要開啟此目錄之中的檔案時,即可進入檔案管理功能,並直接從書籤 選取該路徑的項目,即可立即將檔案管理員的工作目錄切換至該目錄之中。

[源碼秘技] 跨平台的文字編輯器 - TEA
▲ TEA 內建檔案管理功能,可以進行基本的檔案處理工作。

TEA 在字串處理方面也有相當良好的功能支援,無論是排序字串、反轉字串,或是去除字串前後的空白字元等相關的字串處理作業,都能在 TEA 之中直接完成。使用時直接在檔案中標示要處理的字串,再從「Functions」選單中選取「Text」分類,並點選欲使用的字串處理功能即可。TEA 另外還提供了摩斯密碼轉譯功能,可以直接將英文或俄文轉成摩斯密碼,或是將摩斯密碼轉成英文或俄文。雖然這並不是相當常用的功能,但在需要進行摩斯密碼的 編碼或解碼時,亦可利用 TEA 進行轉換。

除了文字編輯的相關功能之外,TEA 本身也是一個小型的圖片瀏覽器與圖片轉換工具。TEA 可以支援一些常見的圖形檔格式,並直接在 TEA 的介面中進行瀏覽與格式轉換,亦可利用 TEA 進行圖片的縮放功能。目前 TEA 支援的圖片格式包括 PNG、JPEG、GIF、BMP、SVG、TIFF 與 TGA 等格式,已經包含了大多數人經常會使用的圖片檔案格式。圖片瀏覽與處理的相關功能方面,TEA 自然無法與其他專為圖形處理所設計的軟體一較高下。但如果只是需要基本的圖片檢視與處理功能,TEA 也相當適合處理相關的作業。

結語

文 字編輯器常給人功能相當陽春的感覺,但這樣的工具程式卻是不可或許的工具之一,也因此有許多人認為非要學會 vi,才能在 UNIX/Linux 的操作上發揮更大的功效。但事實證明,只要選對了工具,UNIX/Linux 的使用者並不一定要選用 vi 不可。圖形介面的文字編輯器也有許多好工具可以使用,TEA 便是其中一個絕佳的例子。
推薦訂閱
【ACTION! 走讀社區開麥拉】 屏東社區深度旅遊體驗暨短片徵選活動開鑼了!@【藍色東港溪保育協會網路通訊】
介紹一個免費資訊與網路新知網站@【網頁研習室【網頁製作系列報導】】
自由軟體鑄造場電子報
轉寄『第 153 期 以 IPP2P 控管 P2P 軟體』這期電子報

寄信人暱稱  寄信人email
收信人暱稱  收信人email

  • 社群留言
  • 留言報主