【问题标题】:Socket left in TIME_WAIT after file transfer via netcat通过 netcat 传输文件后,套接字留在 TIME_WAIT
【发布时间】:2012-04-16 01:24:04
【问题描述】:

使用Copying by NetCat 我正在尝试通过NetCat 通过网络复制文件。从控制台它工作得很好。首先我在目标机器上运行监听 netcat,然后在源机器上运行发送。

问题是它不能从源机器的脚本中工作:

ssh -f 用户@$desthost 'nc -l 1234 | tar xvf -> /dev/null &' #listening on destination host

tar cv /tmp/文件 | nc $desthost 1234 #发送到目标主机

我看到运行后端口 1234 仍然是打开的,并且套接字的状态是 TIME_WAIT。

如果你知道问题出在哪里,请帮帮我。

顺便说一句,复制后如何验证内容是否相同?

谢谢!

附录:

我发现了一件很奇怪的事情,与 screen 在目标工作上的相同实现可以工作,但不稳定,有时它不会复制文件。

ssh user@$desthost screen -dm -S test 'nc -l 1234 | tar xvf - ' #在目标主机上监听

也许超时有问题?

【问题讨论】:

  • 你知道ssh已经提供了一个叫做scp的文件传输服务吗?
  • @Ben,谢谢你的评论,我对netcat感兴趣是因为它的速度
  • @com 您可以决定速度是您的首要任务,或者您可以决定功能(如成功验证、恢复部分传输等)是您的首要任务。如果您关心后一组中的内容,我会考虑 rsync(如果您更关心速度而不是身份验证或安全性,则 rsync over raw socket 而不是 rsync over ssh)。

标签: linux bash


【解决方案1】:

你不需要 netcat: http://www.cyberciti.biz/faq/howto-use-tar-command-through-network-over-ssh-session/

您只需要一个 ssh 连接。

然后使用 md5sum 比较文件。先检查文件大小也很聪明..

【讨论】:

  • 我对 netcat 很感兴趣,因为它的速度,感谢 md5sum,它适用于目录吗?
  • @com 不要在目录上使用 md5sum,在中间 tar 文件上使用它。您可以在管道的任一端通过 md5sum(及其输出到 stderr)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
相关资源
最近更新 更多