本文只包含壹些比較重要的命令和操作機制的中文翻譯。更詳細的內容請參考文末的IPMSG協議英文文檔。
聲明:以下協議省略了壹些編程過程中沒有用到的協議內容。Ipmsg協議原文為日文,以下協議內容由本人翻譯自金澤先生的英文文檔(cugb_cat)。該翻譯文檔可以自由傳播和使用。
IP信使傳輸協議(第九版草案)1996/02/21
在2003/01/14年修訂
H.Shirouzu
[電子郵件]shirouzu @ h . email . ne . jp[/email]
關於IP messenger:
IP Messenger使用TCP/UDP協議來提供消息和文件(目錄)的發送和接收。
特點:
IP Messenger可以安裝在任何安裝了TCP/IP協議棧的操作系統上,利用在線用戶的動態識別機制,可以與所有在線用戶交換信息。
運行機制介紹:
使用TCP/UDP端口(默認端口為2425),使用UDP協議發送和接收消息,使用TCP協議發送和接收文件(文件夾)。
1,命令字:
1)基本命令字(32位命令字的低8位)
IPMSG_NOOPERATION不做任何事情。
IPMSG_BR_ENTRY用戶在線。
IPMSG_BR_EXIT用戶退出。
IPMSG_ANSENTRY在線通知
IPMSG_SENDMSG發送消息。
IPMSG_RECVMSG通知收到消息。
IPMSG_GETFILEDATA請求通過TCP傳輸文件。
IPMSG_RELEASEFILES停止接收文件。
IPMSG_GETDIRFILES請求傳輸文件夾。
2)選項位(32位命令字的高24位)
IPMSG_SENDCHECKOPT傳輸檢查(要求對方提供確認信息)
IPMSG_FILEATTACHOPT傳輸文件選項
3)附件類型命令(文件類型命令字的低8位)
IPMSG _ FILE _常規普通文件
IPMSG文件目錄文件
IPMSG_FILE_RETPARENT返回上壹個目錄。
2.數據包格式(使用字符串):
1)數據包格式(版本1的格式)
版本號(1):包號:發送者名稱:發送者主機名:命令字:附加信息。
2)例子如下
" 1:100:shirouzu:Jupiter:32:Hello "
3.數據包處理概述:
1)用戶標識
IPMSG啟動時,向網絡廣播命令IPMSG_BR_ENTRY,提示所有在線用戶有新用戶到來(即“我來了”);所有在線用戶都會將新在線用戶添加到自己的用戶列表中,並向新在線用戶發送IPMSG_ANSENTRY命令(即“我在線”);新的在線用戶將在接收到IPMSG_ANSENTRY命令後將該在線用戶添加到他的用戶列表中。
2)發送和接收消息
使用IPMSG_SENDMSG命令發送消息,消息內容添加在附加信息中;接收消息時,如果對方要求回復確認(IPMSG_SENDCHECKOPT位開啟),則需要發送IPMSG_RECVMSG命令,將對方發送的包的編號放在附加信息中發送給發送方。
3)附件的擴展(在第9版中增加)
帶有IPMSG _ FILEATTACHOPT位的IPMSG_SENDMSG命令可用於傳輸文件。文件屬性和內容被添加在附加信息中,並且文件內容被添加在消息內容之後,並且通過' \0 '與它們分開。傳輸文件時,消息內容(包括格式)後會添加以下信息:文件序號:文件名:大小(單位:字節):最後修改時間:文件屬性[:附加屬性=val1[,val2…][:附加信息=…]:\ a:文件序號…
(文件大小、上次修改時間和文件屬性都是十六進制數字,如果文件名包含“:”,請使用“::”。
當接收方開始接收文件時,文件傳輸請求命令IPMSG_GETFILEDATA將被發送到發送方的TCP端口(與UDP的發送端口相同),發送方發送的包號、文件序列號、偏移量(均為十六進制格式)將被寫入附加信息區壹起發送。文件發送方在收到請求信息並驗證無誤(沒有任何格式或加密)後,將開始發送文件。
當接收端接收到目錄文件時,會發送壹個IPMSG_GETDIRFILES命令,該命令帶有發送端發送的包號:文件號:偏移量(均為十六進制格式)的附加信息區,以請求傳輸目錄文件;發送方在附加信息區添加頭信息長度:文件名:文件大小:文件屬性:文件內容(除文件名和文件內容外,其余均為十六進制),頭信息長度為頭信息長度到文件內容前分隔符':'的字符數。
當文件屬性為IPMsg_FILE_DIR時,IPMsg可以自動識別為目錄,下壹個文件的數據在目錄之後。
當文件屬性是IPMsg_FILE_RETPARENT時,IPMsg識別出它的動作是返回到前壹個目錄。在這種情況下,文件名是“.”它的屬性是當前目錄的值。
帶IPMSG協議的英文版:
引用:
最初的ipmsg協議規範是用日語編寫的。
這份文件是金澤先生翻譯的。
此文檔尚未驗證。
-
IP信使通信協議(草案-9) 1996/02/21
修改於2003年06月05日
H.Shirouzu
[電子郵件]shirouzu @ h . email . ne . jp[/email]
-
關於IP Messenger
這是使用TCP/UDP端口的發送/接收消息服務。
特征
如果在您的機器上使用TCP/IP,IP Messenger可以安裝在任何操作系統上。
動態成員識別可以在您的網絡或指定的網絡內完成。
您可以在所有IPMsg成員之間交換消息。
功能描述
使用TCP/UDP端口(默認值:2425)。請參見以下描述
(消息發送/接收:UDP,文件發送/接收:TCP)
1.命令
1)命令功能(命令號32位中的低8位)
IPMSG_NOOPERATION無操作
IPMSG_BR_ENTRY服務條目(用廣播命令啟動)
IPMSG_BR_EXIT退出服務(以廣播命令結束)
IPMSG_ANSENTRY通知新條目
IPMSG_BR_ABSENCE更改缺勤模式
IPMSG_BR_ISGETLIST搜索有效的發送主機成員
IPMSG_OKGETLIST主機列表發送通知
IPMSG_GETLIST主機列表發送請求
IPMSG_ANSLIST主機列表發送
IPMSG_SENDMSG消息傳輸
IPMSG_RECVMSG消息接收檢查
IPMSG_READMSG消息打開通知
IPMSG_DELMSG消息丟棄通知
IPMSG_ANSREADMSG消息打開確認通知(從版本8增加)
TCP的IPMSG_GETFILEDATA文件傳輸請求
IPMSG_RELEASEFILES丟棄附件文件
IPMSG_GETDIRFILES附件分層文件請求
獲取IPMSG版本信息。
IPMSG_SENDINFO發送IPMSG版本信息。
IPMSG_GETABSENCEINFO獲取缺勤句子
IPMSG_SENDABSENCEINFO發送缺勤句子
IPMSG_GETPUBKEY RSA公鑰獲取
IPMSG_ANSPUBKEY RSA公鑰響應
2)選項標誌(命令號32位中的高24位)
IPMSG_ABSENCEOPT缺席模式(成員識別命令)
IPMSG_SERVEROPT服務器(保留)
IPMSG _ DIALUPOPT發送個人成員認可命令
IPMSG_SENDCHECKOPT傳輸檢查
IPMSG_SECRETOPT密封消息
IPMSG_READCHECKOPT密封消息檢查(從ver8添加)
IPMSG_PASSWORDOPT鎖
IPMSG _廣播消息
IPMSG_MULTICASTOPT多點傳送(多點傳送選擇)
IPMSG_NEWMUTIOPT新版本多播(保留)
IPMSG _ AUTORETOPT自動響應(乒乓保護)
IPMSG_NOLOGOPT沒有日誌文件
IPMSG_NOADDLISTOPT通知BR_ENTRY之外的成員
IPMSG _ FILEATTACHOPT文件附件
IPMSG_ENCRYPTOPT代碼
IPMSG_NOPOPUPOPT(不再有效)
IPMSG_RETRYOPT重新發送標誌(在獲取主機列表時使用)
3)擴展代碼標誌(十六進制格式組合)
IPMSG_RSA_512
IPMSG_RSA_1024
IPMSG_RSA_2048
RC2_40
IPMSG_RC2_128
IPMSG_RC2_256
IPMSG_BLOWFISH_128
IPMSG _河豚_256
IPMSG_SIGN_MD5
4)附件的擴展文件(fileattr低8位)
IPMSG _文件_常規
IPMSG _文件_目錄
IPMSG_FILE_RETPARENT
IPMSG_FILE_SYMLINK
IPMSG_FILE_CDEV
IPMSG _文件_BDEV
IPMSG _文件_FIFO
IPMSG_FILE_RESFORK
5)附件文件擴展屬性(fileattr高24位)
IPMSG_FILE_RONLYOPT
IPMSG_FILE_HIDDENOPT
IPMSG_FILE_EXHIDDENOPT
IPMSG_FILE_ARCHIVEOPT
IPMSG_FILE_SYSTEMOPT
6)附件文件的擴展文件屬性
IPMSG_FILE_UID
IPMSG _文件_用戶名
IPMSG_FILE_GID
IPMSG _文件_組名
IPMSG_FILE_PERM
IPMSG_FILE_MAJORNO
IPMSG_FILE_MINORNO
IPMSG_FILE_CTIME
IPMSG _文件_時間
IPMSG_FILE_ATIME
IPMSG_FILE_CREATETIME
IPMSG _文件_創建者
IPMSG _文件_文件類型
IPMSG _文件_查找信息
IPMSG _文件_ACL
IPMSG_FILE_ALIASFNAME
IPMSG_FILE_UNICODEFNAME
2.命令格式(使用所有字符串)
1)命令(格式版本-1)
Ver(1):數據包編號:發送者名稱:發送者主機:命令編號:附加部分
2)使用當前命令格式發送/接收消息的示例
" 1:100:shirouzu:Jupiter:32:Hello "
3.命令流程概述
1)會員認可
IPMSG_BR_ENTRY命令向當前
初創時的成員。
所有成員在收到通知消息後都會將新成員添加到他們的列表中。
IPMSG_ANSENTRY命令向新成員發回消息。
新成員通過獲取當前成員數據
IPMSG_ANSENTRY命令。所有成員都可以通信,只要
IP數據包存在。
IPMSG_BR_ABSENCE命令廣播缺席模式取消或
所有成員的昵稱變更。但是,IPMSG_ANSENTRY命令
不發回消息,這不同於IPMSG_BR_ENTRY
命令。
IPMSG_BR_ENTRY、IPMSG_ANSENTRY和IPMSG_BR_ABSENCE命令
為缺勤模式使用IPMSG_ABSENCEOPT標誌。給…輸入昵稱
附加命令。
為無法聯系到的撥號用戶添加IPMSG _ DIALUPOPT標誌
廣播命令。成員識別命令需要
單獨發送給帶有此可選標誌的成員。
(擴展組)IPMSG_BR_ENTRY和IPMSG_BR_ABSENCE命令
通過在當前組名後添加新組名來發送組名
命令格式字符串(在當前
命令和擴展名稱)。
2)發送/接收消息
發送消息使用可以輸入消息的IPMSG_SENDMSG命令
在擴展區域。
接收消息僅發回IPMSG_RECVMSG命令
如果IPMSG_SENDCHECKOPT標誌打開。輸入原始包號
到擴展區域。
廣播消息發送使用IPMSG_BOADCASTOPT命令
並且IPMSG_SENDMSG標誌應該打開。
需要將自動發送數據包(缺席通知)添加到IPMSG_AUTORETOPT
為了乒乓保護。如果壹個或另壹個數據包打開,則
確認/自動發送數據包沒有發送回來。
發送消息密封需要是上的IPMSG_SECRETOPT數據包。
在這種情況下,接收消息發送IPMSG_READMSG命令。
將原始數據包編號輸入擴展區。
(附加IPMSG_NOADDLISTOPT)
當從
不在您的發送/接收列表中,IPMsg將通過以下方式確認主機
發送IPMSG_BR_ENTRY命令或將主機名添加到
發送/接收列表。
但是,需要避免單次消息發送/接收操作。
向IPMSG_SENDMSG命令添加IPMSG_NOADDLISTOPT標誌。
(版本8中的附加IPMSG_READCHECKOPT)
當IPMSG_READMSG命令包含IPMSG_READCHECKOPT標誌時,
IPMsg進程與帶有
IPMSG_SENDCHECKOPT標誌。
但是,Send Message使用IPMSG_ANSREADMSG命令,
而不是IPMSG_RECVMSG。
3)消息發送/接收加密擴展(在版本9中添加)
使用公鑰(RSA)和公鑰(RC2/河豚魚)的組合。
(加密擴展區使用十六進制格式。)
(公鑰獲取)發送IPMSG_GETPUBKEY命令接收
消息。接收消息獲取IPMSG_ANSPUBKEY,它
意味著從發送消息中接收RSA公鑰。
IPMSG _ get pubkey/IPMSG _ ANSPUBKEY都需要值
加密能力(例如IPMSG_RSA_1024)標誌首先使用“或”
延伸部分
另外,在IPMSG_ANSPUBKEY中,公鑰寫成EE-NNNNNN
E = exposition n = method) devideby“:”。並輸入f分隔符'-'
在E和n之間。
在第二次發送/接收過程後,可以跳過該序列
記憶公鑰和加密數據。
(加密消息)在發送者創建了壹個
發送方和接收方都支持的公共密鑰可以加密消息。
此外,接收方的公鑰對公共密鑰進行加密。
(加密消息傳輸)IPMSG_ENCRYPTOPT用於
IPMSG_SENDMSG。在延伸的第壹部分,輸入值
是公鑰和公鑰類型驗證的結果。
然後使用由“:”劃分的公鑰加密的公鑰。
然後輸入由“:”劃分的公鑰加密的消息。
如果兩者都支持IPMSG_SIGN_XXX,那麽添加':'和signeture。
此外,在編碼填充的方法中,PKCS#1ECB密鑰用於RSA,
PKCS#5 CBC公共密鑰用於RC2/河豚。
此外,與條目相關的數據包顯示了
使用IPMSG_ENCRYPTOPT的加密支持
4)帶文件附件的擴展(從版本9開始提供)
帶有IPMSG _ FILEATTACHOPT標誌的IPMSG_SENDMSG命令
文件傳輸(下載許可)通知發送消息
帶著依戀。
在消息和附件文件數據後輸入' \0 '。
fileID:filename:size:mtime:fileattr[:extend-attr = val 1
[,val2...][:extend-attr2=...]]:\a:fileID...
(size、mtime和fileattr描述十六進制格式。
如果文件名包含“:”,請替換為“::”。)
當接收消息下載附件文件時,IPMSG_GETFILEDATA
命令向相同編號的TCP端口請求數據傳輸包
作為UDP發送端口號。輸入packetID:fileID:到擴展區的偏移量。
(全部使用十六進制格式。)
文件傳輸方收到請求。在意識到這是壹個正確的請求後,
然後發送指定的數據(無格式)
當數據接收方下載分層附件文件時,
使用IPMSG_GETDIRFILES命令並輸入packetID:fileID
並發送數據傳輸請求包。
(全十六進制格式)
數據發送方發送以下分層數據格式。
header-size:filename:file-size:file attr[:extend-attr = val 1
[,val2...][:extend-attr2=...]]:內容-數據
下壹個標題大小:下壹個文件名...
(除文件名和內容數據之外的所有十六進制格式)
header-size是從header-size的開頭到分隔符“:”
那是在內容數據之前。extend-attr可以省略並多次使用
擴展屬性。使用“=”輸入數據。
當fileattr是IPMSG_FILE_DIR時,IPMSG會自動識別它
在目錄中,下壹個文件數據在目錄之後。
當fileattr是IPMSG_FILE_RETPARENT時,IMPsg識別它返回
到父目錄。在這種情況下,文件名總是“.”和屬性
值是當前目錄數據。
發送過程直接從附件開始,並返回
IPMSG_FILE_RETPARENT命令添加到附件目錄。
為入口包添加IPMSG _ FILEATTACHOPT標誌,以支持
附件文件。
5)其他命令
獲取不同版本時,發送IPMSG_GETINFO命令。
接收方將版本信息字符串發送給
擴展區域。
發送IPMSG_GETABSENCEINFO命令以獲取缺勤消息。
如果狀態是缺席模式,接收方發送回IPMSG_SENDABSENCEINFO。
如果狀態不是缺勤模式,則返回壹個字符串“不是缺勤模式”。
6)確認/重試
如果用於IPMSG_SENDMSG或IPMSG_RECVMSG的確認分組沒有被遞送
在指定的時間內,它將被再次發送。
重試動作的數量或間隔周期取決於當前條件。
4.其他的
1)換行
發送消息中的換行符使用UNIX類型(“0”)進行了標準化。
如有需要,請更換。
2)分隔符“:”
:'用作分隔符。用戶名不能使用此分隔符
和主機名。
如果使用/主機名包含“:”,請用另壹個符號替換,
例如“;”。
雖然使用這個分隔符還不成問題,但是我可以創建壹個
轉義序列。
3)漢字編碼
SJIS
5.聯系人電子郵件地址
電子郵件[email]shirouzu @ h . email . ne . jp[/email]
註意
命令代碼見ipmsg.h。
請把妳的意見和建議用電子郵件發給我。