【问题标题】:Build a buffer in file for stream of TCP packets在文件中为 TCP 数据包流构建​​缓冲区
【发布时间】:2015-06-01 03:38:34
【问题描述】:

我正在尝试构建一个代理来根据一些时间表缓冲一些数据包。

我有两个 TCP 连接,一个从主机 A 到代理,另一个从代理到主机 B。 代理在 A 和 B 之间转发数据包。代理将根据预定的指令缓存数据包。在某个时间,它会缓冲数据包。缓冲期结束后,它将转发缓冲区中的数据包,并进行正常的转发工作。 我正在使用python。在这种情况下,哪个模块是最好的?我试过泡菜,但很难在文件中删除和附加元素。有什么建议?谢谢!

【问题讨论】:

  • 是否有一个简单的列表不够的原因?因为它会占用太多内存?你考虑过tempfile吗?
  • @jedwards 代理上的两个 TCP 连接是两个独立的 python 脚本。所以,我需要将数据包存储在一个单独的文件中。我不熟悉临时文件。 tempfile 可以部分追加和删除吗?
  • 追加是的,删除不是那么容易,但肯定是可行的。
  • @jedwards 我明白了。因为数据包转发后,我想清理缓冲区。这就是我想删除内容的原因。有没有其他方法可以做到这一点?
  • 如果你想一次性彻底清空缓冲区,那很简单,删除文件或者以w打开然后关闭。如果你想一次删除一个特定的行,它更难但并非不可能 - 它通常通过只用你想要保留的行重写整个文件来完成(就地或第二个文件,你然后在所有行都写完后用于替换原始文件)

标签: python tcp proxy buffer


【解决方案1】:

我建议你将两个脚本合二为一,只使用内存。

如果由于某种原因无法加入脚本,请创建一个 unix 域套接字,将原始二进制数据直接从一个传递到另一个。这些 fifo 的大小有限,因此您仍然需要在一侧或另一侧(可能是 B 侧)进行内存缓冲。

如果数据对于内存来说太大,您可以将其写入临时文件,并在需要传递时重新读取。如果同一个脚本同时写入和读取文件,那将是最简单的,因为这样您就不必猜测何时写入、前进到新文件或处理单独的读取器和写入器。

【讨论】:

  • 我一开始是想这么做的。我在 A、proxy 和 B 上只有 3 个脚本。但是,我遇到了同步问题。我将代理作为 A 的服务器启动,A 是发送者,代理也充当 B 的发送者,B 充当服务器。当我启动所有 3 个脚本(在 A、代理和 B)时,我需要确保 B 在代理之前和 A 的脚本之前启动。如果计时不正确并且 A 等待代理开始接收数据包的时间过长,它将关闭会话。
  • 所以,我认为将代理接收和转发脚本分成两部分可能更容易。我知道这听起来很愚蠢。欢迎任何解决方案!
  • 是的,如果对等点尚不可用,您必须命令启动 A、B 和 P 或添加代码以在一段时间后重试。
  • 我明白了。让我先试试。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多