我可以使用以下命令执行 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
答案2
看一下-C
tcpdump 的选项:
-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 入门: