飞鸽传书
1. 介绍
古代通讯
飞鸽传书与鸿雁传书是一个意思,就是古人之间联系的一种方法,将信件系在鸽子的脚上然后传递给要传递的人。古代通信不方便,所以聪明的人利用鸽子会飞且飞得比较快、会辨认方向等多方面优点,驯化了鸽子,用以提高送信的速度。
现代通讯
飞鸽传书(IPMessenger),是由日本人ShirouzuHiroaki(白水启章)所发明的免费软件,是一款局域网内即时通信软件,基于TCP/IP(UDP);可运行于多种操作平台(Win、Mac、UNIX、Linux),并实现跨平台信息交流。不需要服务器支持,支持文件/文件夹的传送(2.00版以上),开发于90年代。通讯数据采用RSA/Blofish加密(2.00版以上),十分小巧,简单易用,而且用户可以完全免费使用它;2011年已有的版本包括:Win32,Win16,MacOS,MacOSX,X11,GTK,GNOME,Java等,并且公开源代码。
2. 飞鸽传书协议
ipmsg是用来在局域网中基于udp/tcp的应用层通信协议,功能如下:
收发消息
收发文件
收发文件夹
飞秋软件,想必大家都很熟悉,它是一个使用 飞鸽传书协议 完成局域网通信的一个软件而已,只要了解了 飞鸽传书的协议是怎样规定数据,那么咱们也可以做出类似的软件
3. 协议的格式
版本号:数据包编号:发送者姓名:发送者主机名:命令字:附加选项
如下是,发送一条消息:
1:123456789:itcast-python:localhost:32:hello
说明:
1 版本号,一般为1,较高版本的飞秋则较为复杂
123456789 数据包编号,主要用来标记这个数据包,一般不重复,所以可以使用time来得到一个
itcast-python 电脑的用户名
localhost 主机名
32 发送消息的命令
hello 发送的消息内容
附件:飞鸽传书-命令列表
# header
IPMSG_VERSION = 0x0001
IPMSG_DEFAULT_PORT = 0x0979
# command
IPMSG_NOOPERATION = 0x00000000
IPMSG_BR_ENTRY = 0x00000001
IPMSG_BR_EXIT = 0x00000002
IPMSG_ANSENTRY = 0x00000003
IPMSG_BR_ABSENCE = 0x00000004
IPMSG_BR_ISGETLIST = 0x00000010
IPMSG_OKGETLIST = 0x00000011
IPMSG_GETLIST = 0x00000012
IPMSG_ANSLIST = 0x00000013
IPMSG_BR_ISGETLIST2 = 0x00000018
IPMSG_SENDMSG = 0x00000020
IPMSG_RECVMSG = 0x00000021
IPMSG_READMSG = 0x00000030
IPMSG_DELMSG = 0x00000031
IPMSG_ANSREADMSG = 0x00000032
IPMSG_GETINFO = 0x00000040
IPMSG_SENDINFO = 0x00000041
IPMSG_GETABSENCEINFO = 0x00000050
IPMSG_SENDABSENCEINFO = 0x00000051
IPMSG_GETFILEDATA = 0x00000060
IPMSG_RELEASEFILES = 0x00000061
IPMSG_GETDIRFILES = 0x00000062
IPMSG_GETPUBKEY = 0x00000072
IPMSG_ANSPUBKEY = 0x00000073
# option for all command
IPMSG_ABSENCEOPT = 0x00000100
IPMSG_SERVEROPT = 0x00000200
IPMSG_DIALUPOPT = 0x00010000
IPMSG_FILEATTACHOPT = 0x00200000
IPMSG_ENCRYPTOPT = 0x00400000
IPMSG_UTF8OPT = 0x00800000
# option for send command
IPMSG_SENDCHECKOPT = 0x00000100
IPMSG_SECRETOPT = 0x00000200
IPMSG_BROADCASTOPT = 0x00000400
IPMSG_MULTICASTOPT = 0x00000800
IPMSG_NOPOPUPOPT = 0x00001000
IPMSG_AUTORETOPT = 0x00002000
IPMSG_RETRYOPT = 0x00004000
IPMSG_PASSWORDOPT = 0x00008000
IPMSG_NOLOGOPT = 0x00020000
IPMSG_NEWMUTIOPT = 0x00040000
IPMSG_NOADDLISTOPT = 0x00080000
IPMSG_READCHECKOPT = 0x00100000
IPMSG_SECRETEXOPT = (IPMSG_READCHECKOPT|IPMSG_SECRETOPT)
# encryption flags for encrypt command
IPMSG_RSA_512 = 0x00000001
IPMSG_RSA_1024 = 0x00000002
IPMSG_RSA_2048 = 0x00000004
IPMSG_RC2_40 = 0x00001000
IPMSG_RC2_128 = 0x00004000
IPMSG_RC2_256 = 0x00008000
IPMSG_BLOWFISH_128 = 0x00020000
IPMSG_BLOWFISH_256 = 0x00040000
IPMSG_AES_128 = 0x00080000
IPMSG_SIGN_MD5 = 0x10000000
IPMSG_SIGN_SHA1 = 0x20000000
# compatibilty for Win beta version
IPMSG_RC2_40OLD = 0x00000010 # for beta1-4 only
IPMSG_RC2_128OLD = 0x00000040 # for beta1-4 only
IPMSG_BLOWFISH_128OLD = 0x00000400 # for beta1-4 only
IPMSG_RC2_40ALL = (IPMSG_RC2_40|IPMSG_RC2_40OLD)
IPMSG_RC2_128ALL = (IPMSG_RC2_128|IPMSG_RC2_128OLD)
IPMSG_BLOWFISH_128ALL = (IPMSG_BLOWFISH_128|IPMSG_BLOWFISH_128OLD)
# file types for fileattach command
IPMSG_FILE_REGULAR = 0x00000001
IPMSG_FILE_DIR = 0x00000002
IPMSG_FILE_RETPARENT = 0x00000003 # return parent directory
IPMSG_FILE_SYMLINK = 0x00000004
IPMSG_FILE_CDEV = 0x00000005 # for UNIX
IPMSG_FILE_BDEV = 0x00000006 # for UNIX
IPMSG_FILE_FIFO = 0x00000007 # for UNIX
IPMSG_FILE_RESFORK = 0x00000010 # for Mac
# file attribute options for fileattach command
IPMSG_FILE_RONLYOPT = 0x00000100
IPMSG_FILE_HIDDENOPT = 0x00001000
IPMSG_FILE_EXHIDDENOPT = 0x00002000 # for MacOS X
IPMSG_FILE_ARCHIVEOPT = 0x00004000
IPMSG_FILE_SYSTEMOPT = 0x00008000
# extend attribute types for fileattach command
IPMSG_FILE_UID = 0x00000001
IPMSG_FILE_USERNAME = 0x00000002 # uid by string
IPMSG_FILE_GID = 0x00000003
IPMSG_FILE_GROUPNAME = 0x00000004 # gid by string
IPMSG_FILE_PERM = 0x00000010 # for UNIX
IPMSG_FILE_MAJORNO = 0x00000011 # for UNIX devfile
IPMSG_FILE_MINORNO = 0x00000012 # for UNIX devfile
IPMSG_FILE_CTIME = 0x00000013 # for UNIX
IPMSG_FILE_MTIME = 0x00000014
IPMSG_FILE_