我想要一种简单的方法来显示通过我的 Linux 机器上的任何接口的所有 TCP 数据(不是 TCP 标头或其他任何东西)。
例如,我想要一个神奇的命令,如果我这样做:
magic_commmand_I_want port=1234
Run Code Online (Sandbox Code Playgroud)
那么如果有一台服务器在我的机器上侦听端口 1234,并且有人这样做了:
echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port
Run Code Online (Sandbox Code Playgroud)
然后神奇的命令会打印出来:
hello
Run Code Online (Sandbox Code Playgroud)
我已经尝试过“tcpdump”、“ethereal”、“tethereal”、“tshark”等,但是如何让它们做到这一点并不明显:
是的,您可能可以将一组管道式 unix 命令串在一起来执行此操作,但是下次记住这一点并不容易:)
如果您有一个执行此操作的确切命令行的简单示例,这就是我想要的。
Dus*_*ell 119
更新:
正如 Michal 在评论中指出的那样:从 tcpflow 1.3 版开始, -e 选项用于指定扫描仪名称。因此会打印错误“无效的扫描仪名称‘8983’”。正确的命令是
sudo tcpflow -i any -C -J port 1234
(在最新版本中也-J
已更改为-g
)
感谢 yves 将我指向“ tcpflow ”。这是命令行:
tcpflow -i any -C -e port 1234 # as root, or with sudo
Run Code Online (Sandbox Code Playgroud)
这做我想要的一切
" -C
" 告诉它转储到控制台而不是文件。" -e
" 启用颜色,因此客户端-> 服务器和服务器-> 客户端在视觉上是不同的。
我通过简单的方式安装了 tcpflow
sudo apt-get install tcpflow
Run Code Online (Sandbox Code Playgroud)
yve*_*mes 30
socat 是您需要的工具。它可以充当代理:
$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello
Run Code Online (Sandbox Code Playgroud)
那么您的应用程序必须连接端口 4444 而不是直接连接到 1234
-v 选项用于 socat 打印出它在标准错误 (stderr) 上收到的所有内容。
更新:
如果您的机器上没有 socat,您仍然可以使用 netcat 以这种方式模拟它:
$netcat -l -p 4444 | tee output_file | netcat localhost 1234
Run Code Online (Sandbox Code Playgroud)
警告:此选项是单向的。第二个 netcat 实例会将来自您的服务器的任何响应打印到标准输出。你仍然可以这样做:
$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
Run Code Online (Sandbox Code Playgroud)
yve*_*mes 14
tcpflow 就是你想要的。摘自手册页:
描述
tcpflow 是一个程序,它捕获作为 TCP 连接(流)的一部分传输的数据,并以方便协议分析或调试的方式存储数据。像 tcpdump(4) 这样的程序显示了在线路上看到的数据包的摘要,但通常不存储实际传输的数据。相比之下,tcpflow 重建实际数据流并将每个流存储在单独的文件中以供以后分析。tcpflow 理解 TCP 序列号,无论重传或无序交付,都会正确重建数据流。tcpflow 将所有捕获的数据存储在具有表单名称的文件中
192.168.101.102.02345-010.011.012.013.45103
其中上述文件的内容是从主机 192.168.101.102 端口 2345 传输到主机 10.11.12.13 端口 45103 的数据。
设置从应用程序应用到服务器的连接。当连接启动并运行时,tcpflow 仍然能够从中捕获数据 例如:
$ sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo
Run Code Online (Sandbox Code Playgroud)
每个数据都将存储在一个名为 127.000.000.001.48842-127.000.000.001.05555 的文件中。
您仍然可以使用选项 -Cs 在标准输出上重定向它。阅读手册页以使用表达式来调整您希望 tcpflow 捕获的 paquet。
归档时间: |
|
查看次数: |
159606 次 |
最近记录: |