C++ Builder下端口映射服务器的开发与研究(更新版)

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。)

一、业务需求     

端口映射即网络代理,其功能与路由器等网络设备基本类似,常用的软件代理也很多,但是如何自己动手开发一个端口映射代理呢?比如某银行的外联业务场景,详情如下:

ServerA银行方系统<------------------>ServerC合作方系统

根据总行稽核部要求,银行系统和合作方系统不能直接对接,防止网络入侵或数据泄密,为此需要开发一个外联网关,只做数据透传,不做加工处理,数据更是不能落地,详情如下:

ServerA银行方系统<--------->ServerB银行方外联网关<--------->ServerC合作方系统

二、设计目标

开发一个外联网关通讯系统ServerB,架设在ServerA和ServerC之间,能够将来源于ServerA_ip:ServerA_Port端口的通讯请求转发给ServerC_ip:ServerC_Port,不留下任何痕迹,支持TCP映射、FTP映射、TELENT、UDP、HTTP映射等。

三、主要功能

1)TCP网关服务功能能够将来源端口的SOCKET报文转发为另一端口的SOCKET报文。除了金融交易报文外,常用的TOAD、远程桌面、VNC远程控制、中国银行CSP配置工具等都可以通过该服务转发。TELNET的默认端口是23,SFTP和SSH功能默认端口都是22,经测试都可以使用本系统的TCP网关服务透传。

2)UDP网关服务能够进行UDP端口透传。

3)FTP网关服务功能能够将来源端口的FTP请求映射为另一端口的FTP请求。该功能不需要知道用户名和密码,数据不落地透明转发。测试过的软件有Xftp和windows下的命令FTP和文件夹下的ftp。该功能不支持SFTP,SFTP可以通过TCP网关服务实现。

4)HTTP网关服务能够进行代理方式的http和https网站透传,测试过的网址有www.boc.cn,www.sina.com.cn,www.qq.com等。启动HTTP网关服务,在浏览器上设定本代理的地址和端口即可以访问目标WEB网站系统。

5)TELNET网关服务功能能够将来源端口的TELNET请求映射为另一端口的TELNET请求。该功能不支持SSH协议,支持TELNET协议,客户端连接成功后请先敲击一个回车,然后就可以进行正常操作了。测试过的软件有Xshell。SSH协议可以通过TCP网关服务实现。

6)POP3邮件网关服务:暂未开发,可以根据需要定制开发。


四、功能实现

本文基于C++Builder 10.2.2tokyo开发工具,调用Indy控件IdMappedPortTCP、IdMappedFTP、IdMappedTelnet、IdMappedPortUDP、IdHTTPProxyServer控件实现上述需求。

1、IdMappedPortTCP实现

    IdMappedPortTCP1->DefaultPort=tMapPort1[i].ToInt();//ServerB监听端口
    IdMappedPortTCP1->MappedHost=tMapIp2[i];//映射地址,即ServerC主机地址
    IdMappedPortTCP1->MappedPort=tMapPort2[i].ToInt();//映射端口,即ServerC监听端口

    try
        {
        IdMappedPortTCP1->Active=true;
        }
    catch(...)
        {
        ShowMessage("启动失败!");
        }

举例:通过tcp映射服务实现web浏览器通过代理网关访问新浪网

1)本程序映射设置

本地监听8686端口(可以变),映射为新浪网的地址www.sina.com.cn和默认端口80(不能变),设置好用启动服务。

2)打开IE浏览器,在Internet选项-》连接-》局域网设置-》代理服务器下设置好你运行代理服务器的主机地址(本次测试用192.168.1.88)和端口8686。

                       (要勾选上代理服务器)

3)关闭重新启动IE浏览器,在地址栏输入www.sina.com.cn即可通过你开发的代理网关访问新浪网了。

2、IdMappedFTP实现

    IdMappedFTP1->DefaultPort=fMapPort1[i].ToInt();//ServerB监听端口
    IdMappedFTP1->MappedHost=fMapIp2[i];//映射地址,即ServerC主机地址
    IdMappedFTP1->MappedPort=fMapPort2[i].ToInt();//映射端口,即ServerC监听端口

    try
        {
        IdMappedFTP1->Active=true;
        }
    catch(...)
        {
       ShowMessage("启动失败!");
        }

上述代码能够实现常用FTP服务器映射访问,Xftp测试正常,但是中文文件名的文件传输失败,报错代码501,目前尚未解决,可能是传输编码问题。不支持SFTP。

3、IdMappedTelnet实现

    IdMappedTelnet1->DefaultPort=eMapPort1[i].ToInt();//ServerB监听端口
    IdMappedTelnet1->MappedHost=eMapIp2[i];//映射地址,即ServerC主机地址
    IdMappedTelnet1->MappedPort=eMapPort2[i].ToInt();//映射端口,即ServerC监听端口


    try
        {
        IdMappedTelnet1->Active=true;
        }
    catch(...)
        {
       ShowMessage("启动失败!");
        }

上述代码能够实现telnet服务的映射,telnet工具经过代理连接成功后,需要后在客户端工具先敲一下回车,然后就可以正常进入主机操作了。不支持STELNET。

4、IdMappedPortUDP实现

                IdMappedPortUDP1->DefaultPort=uMapPort1[i].ToInt();
                IdMappedPortUDP1->MappedHost=uMapIp2[i];
                IdMappedPortUDP1->MappedPort=uMapPort2[i].ToInt();
                try
                    {
                    IdMappedPortUDP1->Active=true;
                    }
                catch(...)
          {
         ShowMessage("启动失败!");
          }

5、IdHTTPProxyServer实现

                                IdHTTPProxyServer1->DefaultPort=hMapPort1[i].ToInt();
IdHTTPProxyServer1->TerminateWaitTime=hWaitTime[i].ToInt();
IdHTTPProxyServer1->MaxConnections=hMaxCount[i].ToInt();
try
{
IdHTTPProxyServer1->Active=true;

     }

catch(...)
            {
           ShowMessage("启动失败!");
            }

本功能支持http和https代理,浏览器下的测试需要先给浏览器配置代理服务器,详细说明可参考上述举例:“四、1、1)”。

五、程序界面

本次开发的是一个各种协议能支持并行20个端口服务的项目设计,上述代码只是简要说明了单个服务的配置与启动。Indy为了防止通讯中转时程序假死,可以放置一个IdAntiFreeze控件在主界面上。


运行界面:


四、开发小结

Indy组件是一套功能强大的通讯组件,但是遗憾的是,官方文档写的太不详细了,国内能够查询到的资源太少了。这也许是因为java当道,用C++Builder的IT农民工太少了的原因吧。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: "C builder 10 开发手册" 是一本关于 C++ Builder 10 的开发指南。C++ Builder 是一个集成式开发环境,用于创建 Windows 程序和动态链接库。这本手册旨在为开发人员提供有关 C++ Builder 10 的全面指导。 手册首先介绍了 C++ Builder 10 的特点和功能,包括图形用户界面的设计和构建、数据访问、多媒体和网络编程等方面。它还解释了如何安装和设置开发环境,以及如何开始一个新的项目。此外,手册还包含了有关开发工具和调试器的详细信息,帮助开发人员更好地理解和调试他们的代码。 手册还讨论了各种常见的开发任务,例如窗体和控件的创建、事件处理程序的编写和使用各种内置组件的方法。此外,手册还介绍了高级主题,如多线程编程、异常处理和数据库连接等。 手册提供了大量的示例代码和说明,以帮助开发人员更好地理解和运用所学知识。此外,手册还提供了一些实用的技巧和技巧,帮助开发人员提高他们的开发效率和代码质量。 总而言之,"C++ Builder 10 开发手册" 是一本对于 C++ Builder 10 开发者来说不可或缺的指南。它提供了全面而详细的知识,帮助开发人员更好地掌握 C++ Builder 10 的开发技能,并将其应用于他们的项目中。无论是初学者还是有经验的开发人员,都可以从这本手册中获益,并提升他们的开发能力。 ### 回答2: C Builder 10开发手册是为了帮助开发者在C Builder 10开发环境下进行应用程序开发而提供的指南。该手册包括了C Builder 10的各个方面的内容,以帮助开发者快速入门并掌握开发技巧。 手册首先介绍了C Builder 10的基础知识,包括安装和配置开发环境、界面概述以及常用的开发工具和命令等。开发者可以通过这些内容了解到C Builder 10的整体结构和基本操作,为后续的开发工作打下基础。 接下来,手册详细介绍了C Builder 10的各种组件和控件,以及它们的使用方法和属性设置。开发者可以通过这些内容了解到如何使用不同的组件来构建应用程序的用户界面,并灵活地操作和定制各个控件的属性和行为。 此外,手册还介绍了C Builder 10的事件和消息处理机制,以及常用的编程技巧和设计模式。开发者可以通过学习这些内容,掌握如何编写响应用户操作的事件处理程序,并了解到如何更好地组织和管理代码,提高应用程序的开发效率和维护性。 最后,手册还提供了一些实例和案例分析,展示了如何在C Builder 10中实现一些常见的功能和任务。开发者可以通过学习这些实例,进一步巩固理论知识,并掌握如何将所学的知识应用到实际开发中。 总之,C Builder 10开发手册是一本详尽而实用的指南,为开发者提供了系统学习C Builder 10的资料。通过仔细阅读和实践,开发者可以掌握C Builder 10的核心概念和技巧,从而能够更加高效地进行应用程序开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值