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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

(同一个世界,同一个梦想,交流学习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农民工太少了的原因吧。

基于MATLABAndroid的移动端实时数据采集App开发实战 数据采集是工业自动化、设备监控等领域的基础环节,其核心在于将物理信号转换为可处理的数字信息。传统方案依赖固定的工控机复杂软件,难以满足移动化、轻量化的现场需求。随着移动设备性能的提升,开发可独立运行的移动端数据采集应用成为趋势。这涉及到跨平台架构设计、硬件通信适配实时数据处理等关键技术。通过将MATLAB强大的算法验证能力移动端原生开发结合,例如利用Data Acquisition Toolbox进行硬件通信逻辑封装,再借助MATLAB Compiler SDK生成可供Android调用的库文件,工程 阅读详情

相关推荐

Telnet(登录协议,不安全)

是一種應用層協議,使用於及區域網中,使用的形式,提供雙向、以文字字串為主的互動功能。屬於協議族的其中之一,是遠端登錄服務的標準協議和主要方式,常用於的遠端控制,可供使用者在本地主機執行遠端主機上的工作。更多...更多...更多...更多...Telnet在1969年開發出來,在RFC 15定義,定義了擴充功能。(IETF),在STD 8中,將其加以標準化,是最早形成的網際網路協議之一。

weixin_40191861的博客 287

网络端口映射工具及源代码

是一个完整的vc2008项目,实现win平台上网络端口映射,转发,可以指定监听网卡IP,来源IP,端口,目的IP,端口.里面核心的代码只有几行,其他是拼凑的代码,实现了包括TrayIcon,窗口停靠,出错自动生成dump文件,定义CEdit,自定义CListCtrl等功能,可以参考.启动后自动最小化到右下角任务栏闪烁的图标,点击可以打开界面.可以自定义转发/映射规则.

TIdHTTPProxyServer自己写的代理服务器方法

【代码】TIdHTTPProxyServer自己写的代理服务器方法。

zxm8513CSDN博客 609

UDP端口转发工具(带源码)

在公司内网做过测试,UDP端口可以转发成功,效率高,很好用。 直接运行sudppipe.exe即可,带参数说明。文件夹下其他文件是源码。

C/C++ 实现正反向端口映射

通常服务器是放在内网中,内部局域网中,并且分配了私有IP地址,而如果想要在外部直接访问内部服务器则需要端口映射端口映射也叫做端口转发,或者叫做虚拟服务器,在渗透时当我们拿到目标机器权限以后,目标机器实在内网环境中,如果想要外部直接访问内部的特定机器的特定端口,则需要使用映射来实现,常用的映射工具是LCX,或者自己实现。

微软技术分享 9471

端口转发C代码

/*端口映射PortTransfer_三种模式。(1) PortTransfer Port Dest_IP Port在运行本程序的计算机上监听Port端口,并将所有连接请求转到Dest_IP的Port去(2) PortTransfer ctrlIP ctrlPort Dest_IP Port和模式3配合用,程序将先主动连接ctrlIP:ctrlPort,之后所有在模式3

lionzl的专栏 1787

数据科学项目Docker化:解决环境一致性可复现性难题

容器化是保障数据科学项目环境一致性可复现性的核心技术手段,其原理在于通过镜像封装代码、依赖及运行时环境,实现跨平台、跨机器的确定性执行。相比Conda导出或虚拟机方案,Docker凭借轻量隔离、快速启动和精准版本控制,成为MLOps落地的基础设施支撑。它不仅规避了‘在我机器上能跑’的协作困境,更支撑模型从本地实验到GPU云服务、客户内网等多场景稳定交付。本文聚焦数据科学特有的CUDA依赖、多层包冲突大文件管理等痛点,详解基于NVIDIA官方镜像的生产级Dockerfile设计、多阶段构建依赖约束实践。

cuankuangzhong6373的博客 546

C++写一个http服务器/web服务器

目录开篇废话正文 开篇废话 其实这篇文章一直想写,苦于没有时间,想一气呵成写完,在离回家前一天晚上,在上海的小宾馆里面异常兴奋,写一下如何用C++搭建一个简易的http服务器。 我相信大部分人都希望渴望一个自己的网站(哪怕在破在破也是自己做的),我当初是就是这么渴望的,记得那是2020年的8月,我查阅的各种资料终于学会了socket,于是迫不及待的写了一个聊天程序,一直在研究如何端口映射。那时候还很傻很天真,来了一个连接就开一根线程,离开就销毁这根线程,那会也知道线程创建和销毁的开销很大,但是一直没有想到其

dxgzg的博客 26万+

用Delphi7的Indy控件IdMappedPortTcp做HTTP代理程序

很多朋友一定象我一样需要一个可以自己定制的HTTP代理程序,受到论坛里面的LXM365朋友的启发(在此感谢一下!),发现利用DELPHI7 的INDY控件IdMappedPortTcp可以做成HTTP代理程序.于是我仔细查看了一下IdMappedPortTcp的源代码,发现Lxm365在OnExecute事件里面处理的方案并不完美,因为在触发OnExecute事件前代理程序必须已经连接到一个目标机

编程资料收集与共享交流 3390

VC TCP端口映射源码

VC TCP端口映射源码.. ........................................

IdMappedPortTCP做的端口加密转发

IdMappedPortTCP做的端口加密转发,可以实现数据加密端口转发。

delphi编写的端口转发,端口映射的例子

delphi编写的端口转发,端口映射的例子 使用IdMappedPortTCP

端口映射源码C++(转)

/*端口映射PortTransfer_三种模式。(1) PortTransfer Port Dest_IP Port在运行本程序的计算机上监听Port端口,并将所有连接请求转到Dest_IP的Port去(2) PortTransfer ctrlIP ctrlPort Dest_IP Port和模式3配合用,程序将先主动连接ctrlIP:ctrlPort,之后所有在模式3的S

vincent_1011的专栏 9120

公布Oracle端口映射源码,并加以例程说明,方便大家使用,不能用于黑客目的哈

从这里到end. 为一个单元,可以copy到delphi中保存{----------------------------------------------------------------------------- Unit Name: IdMappedOra Author:    LCK---------------------------------------------------

科长的共享专栏 2084

网络编程之Telnet简单远程登录协议

这里不讲解telnet协议的实现原理,主要用于学习telnet实际的编写方式。 使用的网络协议:tcp/ip telnet协议 编程语言:C/C++ 库:socket套接字 基于Windows的telnet客户端源码:http://download。csdn。net/download/aaron133/10259942 了解telnet协议 一个简单的远程登录协议 用于远程连接目标计算机,使用目标计算机的cmd命令行实现远程操作。 登录目标计算机时,必须提供计算机的用户名和密码凭证,才能成功登录。 t

m0_67401134的博客 858

IdHTTP代理设置

HttpClient.ProxyParams.BasicAuthentication := True; HttpClient.ProxyParams.ProxyServer := '192.168.1.1'; HttpClient.ProxyParams.ProxyPort := 808; HttpClient.ProxyParams.ProxyUsername

小祝的专栏 1063

socket C/C++编程(1)通过服务器的外网ip,对服务器进行远程端口的登录访问(以win10客户端远程访问外网ubuntu服务器为例)

1. 问题描述 服务器(例如Ubuntu16.04)的子网ip比如192.168.1.113,外网ip比如218.17*... 如何设置来使得任何外网(即ip 218.17*..不同)的clients(比如win10)能够对服务器进行访问操作(比如登录,操作文件,执行代码)。第一步:Ubuntu16.04服务器上安装sshd((SSH-SERVER))步骤如下: 首先,安装sshd(opens

林微的博客 3810

vc 服务器端口映射,vc端口映射源代码.doc

vc端口映射源代码.doc端口映射源代码/*端口映射PortTransfer_三种模式。(1) PortTransfer Port Dest_IP Port在运行本程序的计算机上监听Port端口,并将所有连接请求转到Dest_IP的Port去(2) PortTransfer ctrlIP ctrlPort Dest_IP Port和模式3配合用,程序将先主动连接ctrlIP:ctrlPort,之后...

weixin_26736139的博客 514

C++Builder下如何解决IdFTP控件中文名乱码问题

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。)一、获取文件列表void __fastcall TForm1::Button1Click(TObject *Sender){__int64 fileSize;AnsiStrin...

路在脚下 1943
上一篇: C++Builder下如何使用UniDAC控件访问ORACLE数据库
下一篇: C++Builder下如何解决IdFTP控件中文名乱码问题
【路在脚下】
博客等级 码龄12年 227粉丝 78原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值