当我尝试将tshark输出管道输出到任何东西时,我再也看不到流量了。 Tshark只显示一个包计数器。我该如何防止这种情况?
sudo tshark -i enp60s0 -f "tcp" -T fields -e ip.src -e ip.dst -e tcp.srcport -e tcp.dstport -e tcp.checksum -e tcp.options -E header=y | column -t
答案 0 :(得分:2)
对于上下文,这是您正在谈论的命令和输出:
$ sudo tshark -i enp60s0 -f "tcp" -T fields -e ip.src -e ip.dst -e tcp.srcport \
-e tcp.dstport -e tcp.checksum -e tcp.options -E header=y | column -t
Capturing on 'Eth: enp60s0'
45
Tshark会将控制信息(例如捕获位置和数据包计数)发送到stderr而不是stdout。如果您不想看到此控制信息,请将stderr发送给dev null:
$ sudo tshark ... 2>/dev/null | column -t
我们还可以每秒连续生成一个新捕获,然后可以使用tshark读取(有关完整详细信息,请参见tshark的manpage)。这类似于@ChristopherMaynard的解决方案,但是您无需等待捕获完成。用-w
保存(-b duration:1
)将每秒保存一次新的捕获:
#!/usr/bin/env bash
sudo tshark -w temp.pcap -b duration:1 2>/dev/null &
i=0
while true
do if [ "$i" != "$(ls -1A . | wc -l)" ]; then
newfile="$(ls -t | head -n1)"
sudo tshark -r "$newfile" 2>/dev/null | column -t
fi
sleep 0.1
done
运行此命令,我们将得到如下输出。请注意,我们正在读取新的数据包捕获,因此tshark为其读取的每个新捕获添加从1开始的数字。
1 0.000000 192.168.2.1 → 192.168.2.242 DNS 134 Standard query response 0xfd75 No such name PTR 1.2.168.192.in-addr.arpa SOA localhost 6c:96:cf:d8:7f:e7 ← 78:8a:20:d9:f9:11
2 0.000412 192.168.2.242 → 192.168.2.1 DNS 87 Standard query 0x2a9b PTR 249.249.16.104.in-addr.arpa 78:8a:20:0d:05:e7 ← 6c:96:cf:d8:7f:e7
3 0.023726 192.168.2.1 → 192.168.2.242 DNS 149 Standard query response 0x2a9b No such name PTR 249.249.16.104.in-addr.arpa SOA cruz.ns.cloudflare.com 6c:96:cf:d8:7f:e7 ← 78:8a:20:d9:f9:11
4 0.024091 192.168.2.242 → 192.168.2.1 DNS 85 Standard query 0x2f71 PTR 40.2.168.192.in-addr.arpa 78:8a:20:0d:05:e7 ← 6c:96:cf:d8:7f:e7
1 1.026460 192.168.2.242 → 192.168.2.255 UDP 86 57621 → 57621 Len=44 ff:ff:ff:ff:ff:ff ← 6c:96:cf:d8:7f:e7
2 1.048071 192.168.2.1 → 192.168.2.242 DNS 135 Standard query response 0x2f71 No such name PTR 40.2.168.192.in-addr.arpa SOA localhost 6c:96:cf:d8:7f:e7 ← 78:8a:20:d9:f9:11
3 1.048555 192.168.2.242 → 192.168.2.1 DNS 87 Standard query 0xe77d PTR 25.206.252.198.in-addr.arpa 78:8a:20:0d:05:e7 ← 6c:96:cf:d8:7f:e7
4 1.125073 192.168.2.1 → 192.168.2.242 DNS 118 Standard query response 0xe77d PTR 25.206.252.198.in-addr.arpa PTR stackoverflow.com 6c:96:cf:d8:7f:e7 ← 78:8a:20:d9:f9:11
答案 1 :(得分:0)
column
命令需要读取所有输入以确定每列的宽度,因此您无法在此上下文中使用column
。 (您可以通过发出tshark
命令然后在发布killall tshark
的其他地方进行测试,然后您将看到所有输出。
相反,我认为您必须将输出重定向到文件,然后在完成tshark
捕获会话后,如果需要,可以cat file | column -t
。如果要在屏幕上查看输出并将其重定向到文件以供以后处理,可以将其传递给tee
并向tee
提供要写入的文件的名称。例如,tshark [options] | tee file
,但您看到的输出格式很好,直到您稍后执行cat file | column -t
。