第 153 期 以 IPP2P 控管 P2P 軟體─自由軟體鑄造場電子報─智邦公益電子報
enews.url.com.tw · February 07,2012[技術專欄] 以 IPP2P 控管 P2P 軟體
吳惠麟/文
前言:
隨著 internet 的風行,相關的資安問題也層出不窮,除了傳統的病毒及網路釣魚等威脅外,不當使用 P2P 軟體所衍生的資安問題也日漸受到重視,在本文中,筆者將應用開源碼社群中的 IPP2P 搭配 netfilter(linux 系統上最有名的防火牆軟體,即一般人所熟知的 iptables)機制,來建構一個可控管 P2P 軟體的防火牆系統。在本方案中所使用到的軟體如下表所示:
軟體名稱 | 說明 | 官方網址 |
Fedora 11 | 所使用的作業系統 | |
L7-filter | Netfilter 的外掛核心模組,將新增此模組才可讓 Netfilter 具有應用層的封包分析能力 | |
Kernel 2.6.28 | 本次所使用的Linux核心程式,L7-FILTER 需重新編譯核心,在本方案中,筆者採用 2.6.28版本 | |
iptables 1.4.3 | Netfilter的管理應用程式,L7-FILTER 需重新編譯 iptables,新增 L7 的比對項目 | |
IPP2P | 阻檔 P2P 軟體程式 | |
相關 patch 檔 | Ipp2p 的相關修正檔(包含 iptables 及 kernel)的修正檔 | http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-iptables-1.4.0.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) 於核心處理封包的流程上,針對通過的封包實施檢查及過濾。系統架構如下圖所示:
-
PREROUTING:當封包進入時即會經過 PREROUTING 檢查點,這也是封包進入後所遇到的第一個檢查點。接下來,封包會判斷是否已到達目的主機,如果確定則會進入 INPUT 檢查點,否則即進入 FORWARD 檢查點;
-
INPUT:當封包發現己到達目標主機時即會進入本機並經過 INPUT 檢查點,否則將進入 FORWARD 檢查點,繼續往下個目標主機前進;
-
OUTPUT:當封包經由本機發出即會經過 OUTPUT 檢查點;
-
FORWARD:如封包發現並非到達目標主機,即會經過 FORWARD 檢查點;
-
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 軟體的防火牆,我們需要下列的工作:
-
重新編譯核心,使核心能夠控管到 L7 的封包
-
安裝 L7-FILTER
-
安裝 IPP2P
-
重新編譯 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 的核心來編譯。相關步驟如下:
-
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.gz
#取得 2.6.28 kernel 的原始碼 -
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 -
將 linux-2.6.28.tar.gz 解壓縮並置於/usr/src/linux2.6.28目錄下
-
將 netfilter-layer7-v2.22.tar.gz 解壓縮並將其中的 kernel-2.6.25-2.6.28-layer7-2.22.patch 複製到 /usr/src/linux2.6.28
-
cd /usr/src/linux-2.6.28
-
patch -p1<kernel-2.6.25-2.6.28-layer7-2.22.patch
#修正核心組態,新增 L7 MATCH 模組 -
make oldconfig
#利用系統原有的參數來設定核心組態(讀者有興趣可參閱 /boot/config-2.6.29.4-167.fc11.i686.PAE,此檔案記錄目前系統核心所使用的參數【不一定最精簡,但保證穩定】。 在設定的過程中,系統會詢問一些問題,除了support (NETFILTER_XT_MATCH_LAYER7) [N/m/y/?]
設定為m
,其餘皆使用預設即可 -
make
#編譯核心,在編譯的過程中,筆者曾發生 getline() 的錯誤,這是因為在核心程式 (unifdef.c) 中有自定義一個 getline 函數,剛好與標準的函數庫 getline 名稱相同而造成錯誤。讀者只需在 scripts/unifdef.c 中,把 getline 名稱改成另外的名稱即可 -
make modules
#編譯核心模組 -
make modules_install
#安裝核心模組 -
make install
#重新安裝核心並重新設定開機組態(讀者需修改 /etc/grub.conf 將預設開機設為 kernel 2.6.28【將 default=1 改為 default=0】) -
reboot
#重新開機後,即會使用新編譯的核心開機。讀者可利用uname –r
指令來驗證是否為 2.6.28 的核心。
IPP2P 為 netfilter 標準的外掛模組,主要目的在於控管 P2P 軟體。根據官方網站所述,支援的 P2P 軟體如下表:
參數 | P2P 軟體 | 通訊協定 |
| eDonkey, eMule, Kademlia | TCP and UDP |
| KaZaA, FastTrack | TCP and UDP |
| Gnutella | TCP and UDP |
| Direct Connect | TCP only |
| BitTorrent, extended BT | TCP and UDP |
| AppleJuice | TCP only |
| WinMX | TCP only |
| SoulSeek | TCP only |
| Ares, AresLite | TCP only |
安裝步驟如下:
-
wget http://netfilter.org/projects/iptables/files/iptables-1.4.3.tar.bz2
-
解開並將 iptables 的原始碼置於 /home/johnwu/iptables-1.4.3
-
cd /home/johnwu/iptables-1.4.3
-
先針對 iptables 做 configure。
./configure --prefix=/usr/local/iptables143 --with-ksource=/usr/src/linux-2.6.28/
-
解開 ipp2p 壓縮檔並進入該目錄中
-
下載相關的 patch 檔
-
wget http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-iptables-1.4.0.patch
-
wget http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-iptables-1.4.1.patch
-
wget http://www.caronico.com/linux/ipp2p-0.8.2-iptables-1.4.3.patch
-
wget http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-kernel-2.6.22.patch
-
wget http://aur.archlinux.org/packages/ipp2p/ipp2p/ipp2p-0.8.2-kernel-2.6.28.patch
-
-
修正 patch 檔,請依次執行下列指令:
-
patch p1<ipp2p-0.8.2-kernel-2.6.22.patch
-
patch -p1<ipp2p-0.8.2-kernel-2.6.28.patch
-
patch -p1<ipp2p-0.8.2-iptables-1.4.0.patch
-
patch -p1<ipp2p-0.8.2-iptables-1.4.1.patch
-
patch -p1<ipp2p-0.8.2-iptables-1.4.3.patch
-
-
修正 ipp2p 所附的 Makefile
-
將
ld -shared -o libipt_ipp2p.so libipt_ipp2p.o
改為$(CC) -shared -o libipt_ipp2p.so libipt_ipp2p.o
(不然編譯出來的執行檔會有問題) -
在 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 原始碼所在的目錄
-
make
#編譯成功後會產生ipt_ipp2p.ko及libipt_ipp2p.so -
cp libipt_ipp2p.so /usr/local/iptables143/libexec/xtables/
-
cd iptables-1.4.1 && make && make install
#編譯 iptables
-
測試
筆者的測試環境為 IPP2P 主機當成 NAT 主機,其餘客戶端主機均透過此主機連到外面去,在此即不多說 NAT 原理,有興趣的讀者可自行參閱相關文件。請依序下達下列指令:
-
echo "1">/proc/sys/net/ipv4/ip_forward
#開啟主機 ip forward功能 -
/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) 指向此台主機,如果可正常上網即表示設定正確。 -
/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
查看是否有下列的資訊,如下圖示:
至此,讀者可將本機的預設閘道器 (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 的最新版本為 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 的文法標示功能除了主要的 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 可以呼叫 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 之中直接完成。使用時直接在檔案中標示要處理的字串,再從「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 便是其中一個絕佳的例子。