客戶端至客戶端協議
此條目翻譯自其他語言維基百科,需要相關領域的編者協助校對翻譯。 |
客戶端至客戶端協議(英語:Client-to-client protocol ,簡稱CTCP)是互聯網中繼聊天(IRC)客戶端之間的一種特殊類型的通信。
CTCP是現今使用的大多數IRC客戶端支持的一種常見協議。CTCP擴展了原始的IRC協議,允許用戶查詢其他客戶端或頻道(使頻道中所有客戶端都回復CTCP特殊信息)。此外,CTCP可以用來編碼信息,發送原始IRC協議的鏈路不允許發送的信息,例如包含換行或字節值為0(NULL)的信息。CTCP不在客戶端之間建立直接連接,但它通常用於協商DCC連接。
CTCP允許用戶查詢遠程客戶端正在使用的客戶端版本(通過CTCP VERSION
)或時間(CTCP TIME
)等信息。它還實現了/me命令(通過CTCP ACTION
)。
歷史
ircII是第一個實現了CTCP和DCC協議的IRC客戶端。[1]Michael Sandrof在1990年將CTCP協議在ircII 2.1版中實現[2],Troy Rollo在1991年將DCC協議在2.1.2版本中實現。[3]
結構
CTCP採用一條PRIVMSG
與NOTICE
消息實現,消息中的第一個和最後一個字符是ASCII值0x01。此外,IRC協議中不允許的字符將被轉義。由於NOTICE
按標準應產生一條回復,CTCP消息採用PRIVMSG
發送,而回復採用NOTICE
而非PRIVMSG
實現。
CTCP查詢在大多數客戶端上按下列方式初始化:
CTCP <target> <command> <arguments>
其中<target>是目標的暱稱或頻道名稱,<command> 是CTCP命令(例如VERSION
),<arguments> 是發送給<target>的額外信息。
常用CTCP命令
請注意,下列CTCP命令和回復因客戶端而不同,但大多數主要的IRC客戶端支持它們。因您的IRC客戶端不同,傳入特定CTCP命令後,您可能會收到或不會收到自動的回覆或響應,並且這些自動響應可能因客戶端不同而有差異。
VERSION
CTCP VERSION
請求將返回目標正在使用的IRC客戶端的名稱和版本,某些情況下還提供一些技術信息,諸如操作系統、時鐘頻率、CPU製造商和CPU架構/指令集。
下面是將一個CTCP VERSION
請求發送到運行有HexChat客戶端(XChat的一個復刻)的回覆:
VERSION HexChat 2.9.1 [x86] / Windows 8 [1.46GHz]
TIME
CTCP TIME
請求將返回目標計算機的本地時間。決於IRC客戶端,回復可能是包含日期、時間(12小時格式或24小時格式),年(例如2019)以及某種時區(例如AEST)。
下面是將一個CTCP TIME
發送到使用ChatZilla客戶端後的回覆:
TIME Fri 23 Nov 2019 19:26:42 AEST
PING
CTCP PING
請求將測量現有兩個客戶端之間的直接ping速率(不算服務器)。CTCP PING
命令採用的方式是,發送一個整數參數(一個時間戳)到目標客戶端,然後目標客戶端提供完全相同的數字參數來響應。之後計算原始時間戳與當前時間戳的差異,將結果顯示給發起CTCP PING的用戶。在過程中通常使用毫秒級的時間戳,因為大多數用戶使用的寬頻互聯網連接通常只有1秒以下的ping延遲。
一個CTCP PING
請求的示例,從XChat客戶端發送給目標<nickname>:
CTCP PING 23152511
在之後,根據所獲樣本差異產生的結果:
Ping reply from <nickname>: 0.53 second(s)
DCC
- 參見直接的客戶端至客戶端。
參見
參考資料
- ^ Piccard, Paul; Brian Baskin; George Spillman; Marcus Sachs. IRC Networks and Security. Securing IM and P2P Applications for the Enterprise 1st. Syngress. May 1, 2005: 386. ISBN 1-59749-017-2.
The authors of the ircII software package originally pioneered file transfers over IRC.
- ^ See the 'NOTES' and 'source/ctcp.c' files included with ircii-2.1.4e.tar.gz[永久失效連結]
- ^ See the 'UPDATES' and 'source/dcc.c' files included with ircii-2.1.4e.tar.gz[永久失效連結]