如何将tcpdump实时上传到FTP?

如何将tcpdump实时上传到FTP?

我可以使用以下命令执行 tcpdump:

tcpdump -w `date +%F-%Hh-%Mm-%Ss-%N`.pcap src 10.10.10.10 or dst 10.10.10.10

:我有一个 FTP 服务器,用户名是 FTPUSER,密码是 FTPPASSWORD。如何“实时”上传 tcpdump 我的意思是我没有太大的存储空间来存储转储,所以我需要将其上传到只能通过 FTP 到达的地方。我可以吗 ”管道" 以某种方式将 tcpdump 的输出发送到上传它的 ftp 客户端? [我也需要保留文件名:" date +%F-%Hh-%Mm-%Ss-%N.pcap"]

所以我正在寻找一种不在本地存储任何 tcpdump 的解决方案,而是“实时”上传转储。

操作系统是 OpenWrt 10.03 - tcpdump 运行的路由器。 [路由器上有4MB闪存,这就是为什么我无法将它们存储在本地。]

UPDATE2:没有到 FTP 服务器的 SSH 连接,只有 FTP [和 FTPES,但现在我认为这并不重要]

答案1

如果 SSH 不可用(并且可能没有运行 FTP 服务器的 UNIX/Linux 计算机,您netcat也可以使用其他方式),以下内容可能有用:

使用curl,您可以上传来自标准输入通过 FTP 传输到文件:

tcpdump -w - | curl -u FTPUSER:FTPPASS ftp://ftpserver/where/ever/dump.pcap -T -

其中tcpdump输出原始数据包(比较一下这个问题)并curl附加(覆盖?不确定)此输入。我不完全确定这是否有效,但可能值得一试。

(对文件curl创建的时间戳留作练习。)

答案2

看一下-Ctcpdump 的选项:

   -C     Before  writing  a  raw  packet  to  a savefile, check whether 
 the file is currently larger than file_size and, if so, close the current 
 savefile and open a new one.  Savefiles after the  first savefile  will  have 
 the name specified with the -w flag, with a number after it, starting at 1 
 and continuing upward. The units of file_size are  millions  of  bytes 
 1,000,000  bytes, not 1,048,576 bytes).

如果您将大小标志设置为相当小的值,并编写一个cron脚本来每分钟左右测试是否存在新的溢出文件,然后通过 FTP 上传溢出文件并在删除它们之前更改名称,您应该得到您想要的结果寻找。

如果某些东西淹没链接的速度比您的 cron 脚本上传新文件的速度快,那么此设置仍然容易受到 DOS 的攻击,并且如果您有任何 SSH 功能,我强烈推荐ssh管道技巧@克里斯·格林上面提供。

答案3

您可以将tcpdump输出写入管道,然后将其保存在其他地方。我也更新了你的 BPF 过滤器。

tcpdump -w - host 10.10.10.10  | ssh host2 'cat - > `date +%F-%Hh-%Mm-%Ss-%N`.pcap'

这会将数据包写入stdout,然后通过ssh连接将其写入到另一台主机。您还可以将其翻转并从其他主机运行它。

ssh router tcpdump -w - host 10.10.10.10 > `date +%F-%Hh-%Mm-%Ss-%N`.pcap

答案4

我认为要使 ftp 同步工作,它需要知道这个文件流不是来自磁盘而是来自程序;此外,实现这一目标可能会非常困难。

我建议您使用 sshfs 并使用 ssh/sshfs 使用正确的凭据挂载远程文件系统(它是用户空间文件系统,因此与系统上的 fusioner 相关的配置更改很少,不需要超级凭据),然后使用 tcpdump会不断地将捕获的数据包流转储到 sshfs 安装的文件系统上的文件中。

SSHFS 入门:

http://www.linuxjournal.com/article/8904

http://www.lylebackenroth.com/blog/sshfs/

相关内容