目录



 


飞鸽传书主界面


ipmsg全称:IP Messenger,中文名为“飞鸽传书”,是一款由一个名叫H.Shirouzu的 日本人开发和维护的用 C语言写的 局域网聊天和文件传输工具。后来发展为很多志愿者共同开发多种版本。它是一个小巧方便的即时通信软件,它适合用于局域网内甚至广域网间进行实时通信和文档共享。特别是在局域网内传送文件/文件夹的效率很高。它具有很多优点,如数据通讯不需要建立 服务器、直接在两台电脑间通信和数据传输,支持文件及文件目录的传输,安全快捷以及小巧方便等优异特点,因此很多公司都采用它作为部门、公司内部的 IM即时通信工具。


Ipmsg - 功能介绍


- IPMsg 是一款局域网内即时通信软件, 基于 TCP/IP(UDP).
可运行于多种操作平台(Win/Mac/UNIX/Java), 并实现跨平台信息交流.
- 不需要服务器支持(软件本身集成了服务端和客户端)
- 支持文件/文件夹的传送 (2.00版以上)

- 通讯数据采用 RSA/Blofish 加密 (2.00版以上)
- 十分小巧, 简单易用, 而且可以完全免费使用它

- 目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,
Java 等,并且公开源代码。


Ipmsg - 源码简介


  IP Messenger在程序结构方面采用了Windows SDK处理结构,通信方面采用了TCP/UDP通信方式,在文件传输处理方面采用文件映射技术,等等。通过分析IP Messenger的运行、工作原理,可以提高并加深对Windows处理流程的理解,提高SOCKET编程技术等,因此特对其源码进行分析,以抛砖引玉,共同提高大家的编程技术。

1、IP Messenger源代码的下载
  在写这篇文章时,IP Messenger的最新版本是2.06,因此大家在下载时尽量选择最新版本下载。IP Messenger源代码的下载地址是http://www.ipmsg.org/,在网站的右上角,点击English page,网站转换到英文界面,网站有英文版以及其它语言的版本,当然还有中文版的链接(http://www.azhi.net/IPMsg/),建议大家尽量下载原版的英文版源代码,以利于学习。

2、IP Messenger源代码的目录及文件
IP Messenger源代码的目录结构及文件详见列表1.1 IP Messenger源代码主要的目录及文件:
列表1.1 IP Messenger源代码主要的目录及文件


属性

名称

描述

目录

SRC

工程文件源代码和INSTALL目录

文件

IPMSG.MAK

VC4及以前版本使用的工程文件,用来指定如何建立一个工程,VC6把MAK文件转换成DSP文件来处理

IPMSG.MDP

后缀MDP(Microsoft DevStudio Project的简称)是老版本的项目文件,相当于DSP文件

PROT-ENG.TXT

英文版的协议描述

PROTOCOL.TXT

日文版的协议描述

README.TXT

英文版的README

README-J.TXT

日文版的README


IP Messenger的SRC目录内容描述在列表1.2,SRC目录及主要文件。


属性

名称

描述

目录

INSTALL

安装程序源代码目录

文件

BLOWFISH.CPP

加密算法源文件

BLOWFISH.H

加密算法头文件

BLOWFISH.H2

加密算法随机数头文件

CFG.CPP

系统配置源文件

IPMSG.CPP

IPMSG的APP源文件

IPMSG.H

IPMSG头文件

LOGDLG.CPP

日志DLG源文件

LOGMNG.CPP

日志处理源文件

MAINWIN.CPP

IP Messenger主窗口源文件

MISCDLG.CPP

消息DLG,关于DLG,以及控件子类化等源文件

MSGMNG.CPP

Socket管理源文件

PLUGIN.CPP

Dll plugin加载源文件

RECVDLG.CPP

接收消息处理源文件

SENDDLG.CPP

发送消息处理源文件

SETUPDLG.CPP

IP Messenger属性配置源文件

SHARE.CPP

文件传输接收管理源文件

TAPP.CPP

应用程序类源文件

TDLG.CPP

DLG类源文件

TLIST.CPP

链表类源文件

TREGIST.CPP

注册表操作类源文件

TWIN.CPP

窗口类源文件

MSGSTR.H

字符串常量头文件

TLIB.H

类、结构等头文件


另外在SRC目录下,还有一个INSTALL目录,该目录中的文件是IP Messenger安装程序的源代码,其主要文件描述在列表1.3 INSTALL目录主要文件。


属性

名称

描述

文件

INSTALL.CPP

安装程序源文件

INSTALL.H

安装程序头文件


以上是IP Messenger的主要目录及其主要源文件的描述,通过列表我们可以清晰看出IP Messenger的功能分布。在以下的详细分析中,我们主要围绕着这些源文件而展开。

3、IP Messenger源代码的工程转换
由于IP Messenger是使用以前版本的VC编写的,因此在打开工程文件时,需要转换该工程文件为VC6版本的工程文件。
双击打开IPMSG.MDP文件,系统提示转换IPMSG.MAK工程配置文件到VC6下的工程文件,如下图所示。

 



飞鸽传书 ipmsg



单击 “是”按钮,确定将工程转换成VC6的工程。系统提示将MAK工程文件转换成DSP工程文件,如下图所示。



ipmsg



单击“确定”按钮,系统根据MAK文件生成IPMSG.DSP文件,以及VC6下的IPMSG.DSW文件,另外系统还生成了IPMSG.NCB和IPMSG.OPT两个文件。"



4、IP Messenger的工程配置
  IP Messenger的配置和目前VC6的工程配置有些不同,其安装工程文件和工程文件在混合在一起,不像VC6工程文件,不同的工程在不同的项目下,分别进行配置。;
单击“Build”菜单,选择“Set Active Configuration…”,弹出“Set Active Project Configuration”对话框,如下图所示:



ipmsg



IP Messenger的工程配置有6个,分别是Release的英文、日文以及Debug的ipmsg工程和安装工程。通过选择不同的配置,可以编译出不同的工程。根据需要,我们选择ipmsg-Win32 Debug配置作为当前活动工程,此编译配置可以编译出Debug版的ipmsg。
单击“Project”菜单,选择“Settings…”,弹出“Project Settings”对话框,选择“C/C++”标签栏,如下图所示:



ipmsg



可以看到,在“Preprocessor definition:”中,工程使用了“JAPANESE”宏定义,也就是说,编译后的Debug版的ipmsg是日文版。当然,可以根据需要,修改此宏为“ENGLISH”,就可以编译出Debug版的英文ipmsg。
当然,在以后的分析中,我们将分析ipmsg的安装工程,那么就应当选择ipmsg-Win32 InstallerDbg配置作为当前活动工程,编译出Debug版的安装工程。


Ipmsg - 自述文件(readme)


--------------------------------------------------------------------------------
   飞鸽传书 (IP Messenger) Ver2.06 
  Copyright (C) 1996-2004 SHIROUZU Hiroaki
   All Rights Reserved.
--------------------------------------------------------------------------------

目录:

  1. 软件简介
  2. 许可协议
  3. 系统要求
  4. 使用说明
  5. 相关信息
  6. 广域网设置(广播设置)
  7. 补充
  8. 支持
  9. 更新历史
 10. 感谢

================================================================================
  重要说明: comctl32.dll(公共控件) 要求 4.71 或以上版本
  更多信息请参见 "系统要求"
================================================================================

--------------------------------------------------------------------------------
1. 软件简介

 - IPMsg 是一款局域网内即时通信软件, 基于 TCP/IP(UDP).
   可运行于多种操作平台(Win/Mac/UNIX/Java), 并实现跨平台信息交流.

 - 不需要服务器支持.

 - 支持文件/文件夹的传送 (2.00版以上)

 - 通讯数据采用 RSA/Blofish 加密 (2.00版以上)

 - 十分小巧, 简单易用, 而且你可以完全免费使用它

 - 目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,
   Java 等, 并且公开源代码.
   请查看以下地址以获得相关信息:
   http://www.ipmsg.org/

--------------------------------------------------------------------------------
2. 许可协议 (BSD License)

  Copyright (c) 1996-2004 SHIROUZU Hiroaki All rights reserved.

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:

    Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

    Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

    Neither the name of the SHIROUZU Hiroaki nor the names of its
    contributors may be used to endorse or promote products derived
    from this software without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  POSSIBILITY OF SUCH DAMAGE.

--------------------------------------------------------------------------------
3. 系统要求

   Microsoft Windows 95/98/Me/NT4.0/2000/XP/2003
   95/98/NT4.0 ... 要求 comctl32.dll(公共控件) 的版本为 5.x 或更高.
   (如果你安装的 IE 是 5.x 或更高版本, 那么就不必担心这个问题了)

   注意: Windows 3.1(和 NT3.5x), 请使用 IP Messenger for Win16.

--------------------------------------------------------------------------------
4. 使用说明

   执行 setup.exe 你可以将 IPMsg 安装到指定目录, 或者重新注册到启动组.
   如果需要删除 IPMsg, 请先从控制面板中卸载, 再手动删除 IPMsg 目录.

   左键双击图标, 即可打开发送消息窗口.
   右键点击图标, 可进入 [服务设置], [离开] 等.

 - 发送消息时, 若勾选了 [封装],  则接收者要先打开信封才能看到消息,
   如果你还勾选了 [上锁], 则接收者在打开信封时还需要输入密码.
   (密码是由接收者自己在 [服务设置] 中设置的)

 - 若要发送文件/文件夹, 可直接将文件/文件夹拖入发送消息窗口
   或在发送消息窗口上点击右键, 再选择发送文件或发送文件夹

   - 传送文件/文件夹时, 当接收者还没有保存(下载)文件/文件夹时,
     若发送者关闭或重启了 IPMsg, 则附带的文件信息将被清除,
     接收者将不能继续接收(下载)到此文件.

 - 用户列表前缀符号说明
   ":" 表示用户处于离开模式.
   "|" 表示用户使用的不是 2.0 以上版本的 IPMsg,
       将不支持文件/文件夹的传送, 并且不支持通信数据加密.
   "|"(短线) 表示只支持文件/文件夹的传送.

 - 拖动列表表头标题项可改变其顺序, 并可点击右键选择"保存列表顺序"

 - 在消息输入窗口中, 可使用 Ctrl+Tab 输入制表符 Tab.

 - 在发送消息窗口上点击右键, 可以进入设置显示优先级, 选择工作组,
   搜索用户(Ctrl+F), 传送文件, 传送文件夹, 保存列表顺序, 字体设置,
   窗口大小设置, 固定窗口位置, 列表显示设置.

   - 在用户名上点击右键, 可设置其显示优先级
     优先级按由小到大的顺序排序
   - 通过设置显示优先级, 可将经常联系的用户至于列表顶端,
     或者隐藏不需要联系的用户

 - 在接收消息窗口上点击右键, 可以进入字体设置,
   窗口大小设置, 固定窗口位置.

 - 接收消息窗口标题栏中的 "+" 或 "-" 表示通信数据使用了加密算法
   "+" 表示 RSA/1024 位, blowfish/128 位加密
   "-" 表示 RSA/512 位, RC2/40 位加密

 - 如果你收到的消息附带了文件, 将会显示出附件按钮.
   点击按钮即可保存文件.

 - 如果需要(通过路由器)连接到广域网, 则需要设置广播地址.
   详见广域网设置(广播设置)

 - 其它功能都很容易理解, 你试一试就明白了

--------------------------------------------------------------------------------
5. 相关信息

 - 所有的设置信息都保存在注册表的以下位置:
   //HKEY_CURRENT_USER/Software/HSTools/

   用户密码以不可逆加密方式存储.
   *******************************************************************
   * 如果你忘记了密码, 可以在注册表中将此键值删除                    *
   * //HKEY_CURRENT_USER/Software/HSTools/IPMsgEng/PasswordStr       *
   *******************************************************************

 - 本软件使用的默认端口为 2425
   若仅使用 UDP 协议的端口, 将不能传送文件/文件夹
   (如果安装了防火墙, 则必须打开相应的 TCP 和 UDP 端口)

 - 本软件为自由软件, 你可以随意传播, 但源码使用请参见许可协议.

 - 只有在启动或退出程序, 使用离开模式, 刷新在线用户时 IPMsg 才会进行消息广播.

 - 本软件由 Microsoft Visual C++ 6.0 编译

--------------------------------------------------------------------------------
6. 广域网设置(广播设置)

 - 主机号全部为 1 的 IP 地址, 即广播地址
   例如, 连接到一个 C 类子网(即 24 位网络号, 8 位主机号), IP 地址为
   aaa.bbb.ccc.ddd, 其广播地址即为: aaa.bbb.ccc.255
   若对方处于另一个私有子网中, 广播可能无效.

 - 更多问题, 请参阅相关资料或咨询你的网络管理员.

 - 若两台主机的连接经过了多个路由器, 请直接指定对方IP地址

 - 拨号上网用户请勾选 [拨号连接]
   当刷新在线用户列表时, 列表不会被清空

--------------------------------------------------------------------------------
7. 补充

 - 启动飞鸽传书前, 你可以指定其运行时使用的端口,
   且可以使用不同的端口打开多个窗口. 用法如下:
   ipmsg.exe 2426 (你可在快捷方式上设置)
   但是你只能与同时也使用该端口的用户通信.

 - 所以你尽可选用你喜欢的端口运行本软件.
   介于 10000 至 60000 可能更安全些.
   你也可以咨询你的网络管理员.

 - 如果有多个网卡(IP), 你可以将飞鸽传书与指定的网卡(IP)进行绑定.
   命令格式如下(你可以在快捷方式上设置):
   ipmsg.exe [端口] /NIC IP地址
   例如:
   C:/>ipmsg.exe /NIC 192.168.10.100

 - 支持命令方式发送消息
   命令格式如下:
   ipmsg.exe [端口] /MSG [/LOG][/SEAL] 
   例如:
   C:/>ipmsg.exe /MSG /SEAL localhost Hello.

 - 操作技巧.

   1. 隐藏/显示 窗口  Ctrl + D

   2. 按住 Ctrl 键再点 [刷新] 可保持现有用户, 搜索新上线的用户

   3. 打开发送/接收消息窗口  Ctrl + Alt + S / R (需要进行详细设置)

   4. 打开搜索窗口  Ctrl + F

   5. 接收到多个文件, 保存时可勾选 [全部]

--------------------------------------------------------------------------------
8. 支持

 - IPMsg 的技术讨论区是开放的.
   如果你想订阅相关邮件, 请联系 ipmsg-subscribe@ring.gr.jp

 - 欢迎报告 bug, 以及提出建议

 - 如果你有任何疑问, 请 E-mail 联系.
   shirouzu@h.email.ne.jp - 发送错误报告, 请务必记录以下信息:
   软件版本, 操作系统, 故障描述, 以及故障重现方法等.

--------------------------------------------------------------------------------
9. 更新历史

  ver 1.00 ... 日文版 (1996/08/19)

  ver 1.31 ... 英文版/日文版 (1997/09/01)

  ver 2.00 ... 英文版/日文版 (2002/11/19)
               支持文件/文件夹传送
        支持通信数据加密

  ver 2.03 ... Bug 修正 (文件传送引起缓冲溢出)
               广播设置支持主机地址(FQDN)解析

  ver 2.04 ... 增加绑定网卡(IP)功能

  ver 2.05 ... Bug 修正 (2.04版当激活发送/接收消息窗口时,无法注销/关闭系统)

  ver 2.06 ... 很小的调整

--------------------------------------------------------------------------------
10. 感谢

 - IPMsg 技术讨论区的所有成员

 - Mr.Kanazawa (英文信息修正)

 - 所有报告软件 bug 以及提出建议的朋友.

--------------------------------------------------------------------------------


Ipmsg - 版本差异


Windows for English
IP Messenger for Win ver2.06 (103KB) by H.Shirouzu (2004/09/08)
Source code of ipmsg v2.06 (166KB)

File/Folder Transfer. (Very fast!)
RSA/Blowfish Encryption of communication data.
Host name (FQDN) support on Broadcast setup.
Specifying NIC extension.

Note: ipmsg v2.00-2.02's file/folder transfer function has a buffer overflow problem.
Please upgrade to ipmsg v2.03 or later.

IP Messenger for Win16 ver1.34 (49KB) by H.Shirouzu (98/08/30)
Source code of ipmsg for Win16 ver1.34 r3 (115KB)

--------------------------------------------------------------------------------

Windows for Chinese
IP Messenger for Win Chinese Language Version translated by A zhi (2003/03/25)

--------------------------------------------------------------------------------

Windows for Korean(Hangul)
IP Messenger for Win Korean Transllation Version by A Hong Sung-Jae (2004/03/17)

--------------------------------------------------------------------------------

Windows for Brazil/Portuguese
IP Messenger for Win ver2.03 Brazil/Portuguese Translation Version by Marcelo Goncalves (2003/06/25)
Source code

--------------------------------------------------------------------------------

Windows for Tagalog
IP Messenger for Win ver2.05 Tagalog Translation Version by Virgilio So (2004/09/04)
Source code
 

--------------------------------------------------------------------------------

Macintosh
IP Messenger for MacOS X by G.Ishiwata (2003/09/10)

Now, Macintosh 9(or earlier) version is only open to public in Japanese Page

--------------------------------------------------------------------------------

UNIX
X11R6 XIP Messenger by candy (97/09/14)

GNOME/GTK+ Gnome IP Messenger by T.Matsumaru (99/09/29)

GNOME2 IP Messenger by T.Kato (2008/02/13)

--------------------------------------------------------------------------------

Java
Now, Java version is only open to public in Japanese Page

--------------------------------------------------------------------------------

IP Messenger Support Software & Link (98/07/26)
IPmsgView Log viewer for Win by J.Tsunoda