为了监视服务器和 Web 服务器之间的 HTTP 流量,我目前使用tcpdump. 这工作正常,但我想摆脱输出中的一些多余数据(我知道tcpflow和wireshark,但它们在我的环境中不容易获得)。
从tcpdump手册页:
打印所有进出端口 80 的 IPv4 HTTP 数据包,即仅打印包含数据的数据包,而不是,例如,SYN 和 FIN 数据包以及仅 ACK 数据包。
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
这个命令
sudo tcpdump -A 'src example.com 和 tcp 端口 80 和 (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2) ) != 0)'
提供以下输出:
19:44:03.529413 IP 192.0.32.10.http > 10.0.1.6.52369: Flags [P.], seq 918827135:918827862, ack 351213824, options 437noval, 439pnoval, 437noval, 4399, 439
E...@....... ....P..6.0.......D...... __..e=3...__HTTP/1.1 200 OK …
任何人都可以推荐一个 linux 命令行工具来监视本地服务器和指定 IP 地址/端口之间传输的字节数。
等效的 tcpdump 命令将是:
tcpdump -s 0 -i any -w mycapture.trc port 80 host google.com
输出:
46 packets captured
131 packets received by filter
0 packets dropped by kernel
Run Code Online (Sandbox Code Playgroud)
我想要类似的输出:
54 bytes out, 176 bytes in
Run Code Online (Sandbox Code Playgroud)
我希望它在 RHEL 上工作并且是免费/开源的。如果有一个我也缺少的现有工具就好了!
我在 pcap 文件中使用 tcpdump 捕获了一些数据包。现在我想将这些数据包发送到另一个目的地。我怎么能做到这一点?
如何使用 tshark 以人类可读的格式获取 SSL 握手的转储?我需要将此提供给供应商以调试失败的 SSL 握手问题。
这需要在 tshark 中完成,而不是在 wireshark 中完成,因为它是在没有 GUI 的远程服务器上完成的。
我正在尝试通过 Wireshark(实际上是 TShark)捕获多播流量,但是交换机启用了 IGMP 侦听,并且只会在具有活动 IGMP 订阅的端口上发送多播流量。
我目前正在通过一个单独的应用程序来解决这个问题,因为我希望记录的组保持打开状态,但我正在尝试设置一个系统来动态启动/停止记录数据,而这种额外的复杂性很痛苦。
有没有办法强制 Wireshark 为其录制的多播组发送 IGMP 订阅?
我正在运行 tshark 来转储无线流量。我当前正在多文件模式下运行,将输出分割成 50MB 的块。有没有办法也用 gzip 或 lzma 之类的东西压缩这些 50MB 的块?
我知道在单文件模式下,我可以将输出从 tshark 传输到 gzip,然后传输到 split,但我希望每个 pcap 文件都可以单独读取,而不需要解压缩压缩文件的每个部分。
我正在尝试通过查看数据包来调试一些数据包,并且我想避免将所有 SSH 流量都发送到服务器。有没有办法忽略?
我试图做类似的事情,tshark -f "port !22"但它在命令后停止了监听。
[root@vpn ~]# tshark -f "port !22"
tshark -f "port ls"
Running as user "root" and group "root". This could be dangerous.
Capturing on venet0
tshark: arptype 65535 not supported by libpcap - falling back to cooked socket.
tshark: Invalid capture filter: "port ls"!
That string isn't a valid capture filter (unknown port 'ls').
See the User's Guide for a description of the capture filter syntax.
0 packets captured
[root@vpn ~]#
Run Code Online (Sandbox Code Playgroud) 有谁知道我如何能够在 tshark 中过滤要求 ANY 记录的 DNS 请求?
到目前为止,我可以通过以下方式过滤 DNS 查询:
tshark -r capture.cap -T fields -e ip.src -e ip.dst -e dns.qry.name -R "dns.flags.response eq 0"
我还可以按 ANY 过滤吗?
我收集了 SSL 客户端和服务器(确切地说是openssls_client和s_server)之间的简短交换,并希望查看 pcap 文件的 ssl 部分tshark。我不需要解密加密部分,但至少想知道未加密字段中的值。
将文件从服务器复制到我的桌面时,我可以使用 Wireshark 打开 pcap 文件并默认查看字段:

另一方面,tshark -r tls_dump.pcap最多只显示数据包的 TCP 部分。例如,对于同一个数据包:
4 0.000069237 127.0.0.1 ? 127.0.0.1 TCP 373 54312 ? 44330 [PSH, ACK] Seq=1 Ack=1 Win=43776 Len=307 ...
Run Code Online (Sandbox Code Playgroud)
我尝试使用tcpdump -U -i lo 'port 44330' -w tls_dump.pcap和收集数据包tshark -nn -i lo -s 0 -w tls_dump.pcap port 44330(如此处),但是在尝试查看数据包时,结果是相同的。
tshark 我试过的选项:
-2 没有效果
-2R "ssl" 什么都不显示
-Y "ssl" 什么都不显示
-o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: …
我在 tshark 中使用这个命令:
tshark -r pcapfile "tcp and ip.src==192.168.1.1" -T text -V -x | grep 'Total Length'
Run Code Online (Sandbox Code Playgroud)
这本质上仅解析来自源 ip 的连接的 pcap,并查找每个数据包的总长度(以字节为单位)。我得到这样的输出:
Total Length: 125
Total Length: 210
Total Length: 40
Total Length: 125
> etc, etc....
Run Code Online (Sandbox Code Playgroud)
我需要做的是从 Total Length 中获取数字并将它们相加,以便我可以了解在 pcap 的时间范围内从单个 IP 通过线路传递了多少数据。
有没有我可以在我用来执行此操作的命令的末尾添加的命令?或者有没有一种方法可以直接到标准输出,然后将其通过管道传输到可以解析和计算我所追求的程序?任何人都知道可以执行此操作的带有 tcpdump 的类似命令?