【问题标题】:Sending non-text files from machine to another using C++使用 C++ 将非文本文件从机器发送到另一台机器
【发布时间】:2014-03-19 20:46:34
【问题描述】:

我正在尝试构建一个应用程序,该应用程序允许用户在 LAN ~ TCP/IP 中将文件/目录从其计算机传输到另一台计算机,而无需接收计算机用户的任何干预。

为了解决这个问题,我认为 Sockets 是最好的选择。因为如果我使用 FTP 并让接收方计算机的 FTP 端口不断打开,那将是一个漏洞。

使用套接字是最好的选择吗?

如果是,如何发送目录和非文本文件抛出套接字?

【问题讨论】:

  • FTP 也使用套接字。因此,如果您重新发明类似于 FTP 的东西,您并没有改变开放端口的漏洞。

标签: c++ sockets ftp


【解决方案1】:

谈到安全性,这实际上是“无论您做什么,只有保存登录所需的密码/凭证才能安全”。使用 FTPS 或 SSH 协议将加密机器之间的流量,确保外面的任何人都无法“看到”文件是什么(或密码等)。 SSH 还具有识别远程机器是否突然发生变化的功能,因此您可以识别是否有人引入了“中间人”攻击(即假装是您发送到的实际机器)

至于发送非文本文件,在我知道的所有情况下,它应该与发送文本文件没有任何不同。当然,如果您使用 FTP,则需要在发送二进制文件之前将协议设置为“二进制模式”,因为某些系统会“修改”内容(例如,翻译 CR、LF 和 CRLF 序列以匹配目标 - 以及当文件中所有值为 0x0A 的字节都被替换为 0x0D 0x0A 时,JPG 图像肯定会看起来很奇怪......)。

当然,您也可以在接收机器上设置一个带有合适软件的网络服务器,并使用 HTTP/HTTPS 协议上传文件 - 有或没有密码保护(在 HTTPS 中,只要没有人,密码就是安全的“外部信任组”可以访问实际的发送/接收机器,因为流量是加密的)。

实际上还有数百种其他解决方案。如果不深入了解您要解决的具体问题,就很难做出非常具体的解决方案。

【讨论】:

  • 那么使用 FTP 比使用原始套接字更好吗?
  • 定义“更好”...当然,如果你想“隐藏”自己,不使用标准协议会让别人更难找到你的流量。但它的工作量更大,如果有人真的想知道发生了什么,wireshark 或类似的东西仍然会看到流量。加密会使阅读变得“困难”。
  • 那么,我需要开发两个应用程序吗?一个监听 ftp 端口,另一个发送目录?但是,我如何识别发件人应用发送的流量?
  • 大多数操作系统都有一个您可以使用的受支持的 FTP 服务器。如何检测文件?您可以使用 cURL 或类似的库来发送文件 - 甚至可以使用命令行工具。检查特定目录中是否有“新文件”,也许? Linux 和 Windows 都要求通知“目录中的新文件”。但就像我在答案中所说的那样,如果没有真正理解你想要做什么,很难给出好的答案 - 基本上,你是在问“我如何最好地做 X?”但你并没有准确地告诉我们“大局”是什么。
【解决方案2】:

您将需要在接收机器上安装某种服务器,因为通常没有任何进程在侦听并将接收到的内容写入文件系统。在编写太多代码之前,请先练习一下 netcat(也称为 nc)。 See here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2019-05-19
    相关资源
    最近更新 更多