有啥方法可以使用 TCP 隧道连接到像 Visual Fox pro 这样的文档数据库

Posted

技术标签:

【中文标题】有啥方法可以使用 TCP 隧道连接到像 Visual Fox pro 这样的文档数据库【英文标题】:Is there any way we can connect to document databases like Visual Fox pro using TCP tunneling有什么方法可以使用 TCP 隧道连接到像 Visual Fox pro 这样的文档数据库 【发布时间】:2018-06-18 04:33:52 【问题描述】:

我的要求是我应该能够连接到不在我的网络中的不同数据库。我应该能够通过防火墙建立连接,Nat。我们已经尝试过 Ngrok,它是一个可以安装在我网络之外的机器上的工具。使用 ngrok,我们可以通过传递它们来将 tcp 或 http 端口公开给公共访问防火墙和 Nat 规则。

使用 ngrok,我可以通过在 SQL 服务器默认端口 1433 上创建 TCP 隧道,在某些第三方网络中建立与 sql 服务器的连接。为此,我需要在该服务器中安装 Ngrok。

我尝试通过暴露 TCP 21(FTP 协议)使用 ngrok 连接那些基于文件的数据库(例如:Visual Fox Pro),但没有成功。

如何使用或任何其他工具连接到基于文件的文档数据库?我无法通过暴露一些 http 或 tcp 端口来连接它们以进行隧道传输?

【问题讨论】:

Fox Pro 是文档数据库吗? 是的。它来自微软。 不,它不是一个文档数据库,但它确实来自微软(不幸的是,这是微软购买并试图扼杀的另一个产品)。它是一个关系型 SQL 数据库。 但是我们使用下面没有 Ngrok 的连接字符串:“Provider = VFPOLEDB.1; Data Source =\\\\ipaddress\\v20k\\Databasetablesfolder; Collat​​ing Sequence = MACHINE”。它指向 dbf 文件夹。 Realtional 数据库是否也在连接字符串中指定了文件路径? FoxPro 是一个基于 SQL 的关系数据库,与文档数据库完全不同。 【参考方案1】:

没有办法,如果你不这样做,你可以绕过“他们的”防火墙规则:

    控制运行防火墙的服务器; 在防火墙中发现了一个错误;

如果您可以控制服务器,那么您只需要公开任何未被拒绝的端口(如端口 80,如果端口被占用,请尝试另一个)并将流量传递到数据库端口(如 1433)。顺便说一句,这不是 ngrok 正在做的事情。为此,您可以使用:

netcat / socat,像这样:netcat -L 127.0.0.1:1433 -p 80 -vvv - 这意味着:侦听端口 80,当有人从外部连接到端口 80 时,在转发流量上建立到端口 1433 的连接。查看更多:http://www.devkb.org/linux/115-TCP-tunnel-port-forwarding-using-Netcat ssh 隧道(如果需要加密);

请注意,传统上隧道用于绕过“本地防火墙”。因此,例如,您的公司政策不允许某些网站(我有公司不允许 SO 本身!)但有不受此政策约束的 linux 服务器。 SSH 代理在这种情况下很有帮助。

【讨论】:

我可以通过暴露第三方网络机器上的 1433 端口来连接到 sql server。我想以同样的方式连接文件系统数据库。我们可以安装一些工具,比如 ngrok 来公开一些特定的端口进行通信(这意味着我们可以访问那台机器并安装任何工具来公开一些端口)。我们可以访问这些机器,但它们将在不同的 *** 中。 然后使用netcat。附上答案。 当我们在第三方网络的机器上安装 ngrok 时,我们可以使用 tcp 或 http 隧道暴露一些端口。当我们执行暴露一些 tcp 端口的命令时,它会为我们生成相应的公共 url。这个 ngrok公共 url 我们可以保留在连接字符串的服务器名称中。这对 SQL 服务器非常有效。但是我如何连接到 Visual fox pro DB,它在连接字符串中使用一些文件夹名称(存储 db 文件的位置),我们需要公开它文件夹公开以连接到该数据库。 TCP 隧道也可以由 Ngrok 完成,但我的问题是连接文档数据库,该数据库可用于访问某些文件夹。例如:带有 .dbf 文件的文件夹 您在日常活动中如何正常访问该数据库?【参考方案2】:

如你所说。 VFP 是一个基于文件的数据库。但是,有一个来自 Sybase 的驱动程序,称为 ADS(Advantage Database Server)。您可以使用它来访问 VFP 数据作为基于服务的 C/S 数据库。

既然您说 ngrok 是一个基于 Go 的实用程序,那么您不妨创建微服务、基于 REST 的 webAPI ...来对 VFP 数据库执行 CRUD 操作。使用 Go 做类似的事情比使用另一种语言恕我直言要容易得多(至少它是我发现这种工作最简单的语言,不仅是它的网络功能,而且它的并发支持很重要)。

【讨论】:

您是否知道任何信息,例如 Sybase 驱动程序是否具有某些默认端口?这样我就可以公开那个 tcp 端口来连接它 我上次使用它已经太多年了。检查他们的文档。我会采取通过 webAPI 公开的路径。 (如果你检查连接字符串.com,有一个指定端口的连接字符串,所以默认与否它也有端口定义)。【参考方案3】:

我们无法通过 TCP 隧道连接基于文件的数据库。因为 TCP 隧道适用于端口权限,而基于文件的数据库适用于对文件路径的访问。

【讨论】:

单行解决方案/建议应发表在评论中。

以上是关于有啥方法可以使用 TCP 隧道连接到像 Visual Fox pro 这样的文档数据库的主要内容,如果未能解决你的问题,请参考以下文章

docker从容器连接到主机隧道

eclipse RSE 可以连接到本地端口(ssh 隧道)吗?

连接到 *** 时如何使用 ngrok 进行隧道传输?

如何使用代理跳转(堡垒主机)通过 ssh 隧道连接到 mongodb 服务器

在 R 中使用 ssh 隧道连接到数据库 PostSQL

如何在 C# Socket 中使用 ngrok tcp 隧道