2009-08-13 22:44:50 +0000 2009-08-13 22:44:50 +0000
82
82
Advertisement

在Linux上嗅探TCP流量数据最简单的方法是什么?

Advertisement

我想要一个简单的方法来显示所有通过我的Linux盒子上的任何接口的TCP数据(不是TCP头或其他任何东西)。

举例来说,我想要一个神奇的命令,如果我这样做了,我就会有一个神奇的命令。

magic_commmand_I_want port=1234

如果我的机器上有一台服务器在1234端口监听,而又有人监听的话,

echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port

然后神奇的命令就会打印出来:

hello

我试过 “tcpdump","ethereal","tethereal","tshark",还有其他的,但是不知道你是怎么让他们… ..: …)

是的,你可能可以用一组管道式的unix命令来完成这个任务,但这并不容易记住,以便下次使用:)

如果你有一个简单的例子来说明如何使用命令行来实现这个功能,那就是我想要的。

Advertisement
Advertisement

答案 (7)

109
109
109
2009-08-14 17:05:54 +0000

更新:

正如Michal在评论中指出的。从tcpflow 1.3版开始,-e选项被用于指定扫描器名称。所以错误 “Invalid scanner name ‘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

这个命令行做了我想要的一切

  • 在数据进来的时候逐个显示数据
  • 不显示任何其他元数据
  • 监听所有的接口(所以它能捕获来自机器内部和外部的数据)

-C“告诉它要转储到控制台而不是文件。

-e“让它转储到控制台,而不是文件。"0x6&"让颜色可以让客户端-\s>服务器和服务器->客户端在视觉上区别开来。

我安装tcpflow的时候只需要做

sudo apt-get install tcpflow
```。
30
30
30
2009-08-13 22:48:27 +0000

socat就是你要找的工具。它可以作为一个代理。

$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello

那么你的应用程序必须连接4444端口,而不是直接连接到1234端口

-v选项是为了让socat在标准错误(stderr)上打印出它所收到的所有信息。

更新:

如果你的机器上没有socat,你仍然可以用netcat来模拟它。

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

注意:这个选项是单向的,第二个netcat实例会把你的服务器的任何回复打印到标准输出。你仍然可以这样做。

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
20
Advertisement
20
20
2009-08-13 22:47:06 +0000
Advertisement

试试 Wireshark 。这是一个针对Linux和Windows的优秀协议分析器。

13
13
13
2009-08-14 15:04:28 +0000

tcpflow是你想要的。摘录自手册页面。

DESCRIPTION **tcpflow是一个捕捉TCP连接(流)中传输的数据的程序,并以一种便于协议分析或调试的方式存储数据。相比之下,tcpflow可以重建实际的数据流,并将每个数据流存储在一个单独的文件中,供以后分析。tcpflow可以理解TCP序列号,并且无论重传还是无序传输,都会正确重建数据流。

tcpflow 将所有捕获的数据存储在文件中,文件名的格式为

192.168.101.102.02345-010.011.012.013.45103

其中上述文件的内容是从主机 192.168.101.102 端口 2345 传输到主机 10.11.12.13 端口 45103 的数据。

设置一个从你的应用程序到服务器的连接。例如:

$ sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo

每个数据都会存储在一个名为127.000.000.001.48842-127.000.000.001.05555的文件中。

你仍然可以使用选项-Cs在标准输出上重定向。请阅读手册页面,使用表达式来调整你想要tcpflow捕获的paquets。

2
Advertisement
2
2
2009-08-13 23:15:48 +0000
Advertisement

ngrep在这方面非常好用。它接收一个 BPF 字符串和一个可选的字符串来搜索数据包,然后将数据包的内容以一种非常有用的格式转储到屏幕上。它还可以选择转储到一个pcap_dump文件,你可以在以后的Wireshark中更仔细地检查。

0
0
0
2009-08-13 23:08:00 +0000
-1
Advertisement
-1
-1
2009-08-13 22:47:31 +0000
Advertisement

也许你可以为tcpdump写一个包装器,例如,它将删除所有多余的信息。

Advertisement

相关问题

6
10
3
5
4
Advertisement