我正在寻找这样的命令,它实现了:
- 将 tcpdump 生成的 pcap 文件重定向到另一台服务器
- 在1.的过程中,使用python脚本或者一些工具来分析每个数据包。
所以从系统用户的角度来说,在抓包的时候,他/她可以像在 wireshark 中一样查看数据包,也可以下载一个 pcap 文件。因为分析过程会消耗相当多的系统资源,所以我希望 pcap 文件可以重定向到另一台服务器,然后在那台服务器上进行分析。现在的问题是,nc
监听器被杀死后就会退出tcpdump
(我试过了-15
),但我希望监听器还能运行,因为可能有好几台服务器在运行tcpdump
。
tcpdump -i eth0 port 8801 -w a.pcap | nc 192.168.12.5 9901
答案1
设置 tcpdump 将原始 PCAP 数据输出到标准输出,并利用 SSH 作为传输机制,将该数据作为连续流写入远程分析主机上的远程文件。
例子:
tcpdump -i eth0 port 8801 -w - | ssh ${remote_host} "cat >> $(hostname).pcap"
在上面的例子中,我曾经$(hostname)
评估服务器的主机名(运行 tcpdump 的地方)来智能地命名远程文件,但当然,根据您的需要进行调整(也许在名称中包含一个时间戳,如果有用的话)。
使用 UNIX 时间戳远程文件命名的替代示例:
tcpdump -i eth0 port 8801 -w - | ssh ${remote_host} "cat > $(hostname)_$(date +%s).pcap"
答案2
我认为您可以使用一个单独的进程来获得想要的结果nc
,该进程在服务器上进行监听tcpdump
并将其复制到远程服务器。
您可以nc
使用以下命令进行监听和转发(例如):
nc -k -l localhost 9901 | nc 192.168.12.5 9901
然后你可以连接tcpdump
你需要的任何会话
tcpdump -i eth0 port 8801 -w a.pcap | nc localhost 9901
旗帜-k
“强制 nc 在当前连接完成后继续监听另一个连接。“
请记住,如果您使用基于 Debian 的发行版,则存在一个已知错误:
Debian/Ubuntu 上的软件包
netcat-traditional
无法按应有的方式持续监听。在这种情况下,请使用软件包netcat-openbsd
。