1

subprocess我正在使用python 模块在 Linux 上运行带有 OpenSSH 的 SSH 隧道。我想知道从那个 SSH 隧道发送和接收了多少字节。

我怎样才能找到它?

4

2 回答 2

2

ssh(1)没有为此提供任何机制。操作系统没有为此提供机制。使用 eg 进行数据包嗅探tcpdump(1)是一种选择,但这可能需要 root 权限,并且仅在与应用程序外部ssh(1)的远程对等方建立连接时才近似。IPTables Accounting会给你类似的权衡,但可能会比.tcpdump(1)

如果您不介意非常近似,您可以跟踪您发送到子进程和从子进程读取的所有数据。ssh(1)将在加密之前压缩数据,因此您可能会高估发送的数据量,但ssh(1)也会在重新加密、通道控制、消息真实性等方面产生一些开销,因此它甚至可能接近“平均”数据。

当然,如果沿途的路由器决定丢弃所有其他数据包,您的 TCP 堆栈将发送两倍的数据,甚至更多。

确实很近似。

于 2011-03-29T10:05:31.933 回答
0

您可以使用 pv 之类的方法测量原始 ssh 传输:

ssh user@remote -t​​ "cat /dev/urandom" | pv > /dev/null ssh user@remote -t​​ "pv > /dev/null" < /dev/urandom

(您可以尝试使用 /dev/zero - 但如果您使用 ssh 压缩,您将获得非常不真实的传输速率。)

于 2011-10-05T11:58:31.513 回答