标签: tcpdump

如何在 tcpdump 输出流中显示界面?

这似乎是一个微不足道的问题,但经过一番搜索后,我仍然想不出答案。可以使用“any”作为接口描述来运行 tcpdump,即:

 # tcpdump -i any -n host 192.168.0.1
Run Code Online (Sandbox Code Playgroud)

有什么方法可以强制 tcpdump 显示在哪个接口上显示的数据包被捕获?

更新:

随着越来越多的人确认使用 vanilla tcpdump 可能无法做到这一点,有人可以提出解决上述问题的方法吗?也许不同的嗅探器?

一般问题如下:在具有 50 个接口的系统上,确定来自特定 IP 地址的数据包的入站接口是什么。

linux packet-sniffer tcpdump

25
推荐指数
4
解决办法
5万
查看次数

监控端口上传输到/从 IP 地址的字节数

任何人都可以推荐一个 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 上工作并且是免费/开源的。如果有一个我也缺少的现有工具就好了!

linux packet-analyzer tcpdump packet-capture tshark

20
推荐指数
3
解决办法
4万
查看次数

tcpdump: out.pcap: 权限被拒绝

[root@localhost ~]# cat /etc/issue
Fedora release 17 (Beefy Miracle)
Kernel \r on an \m (\l)
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.6.10-2.fc17.i686 #1 SMP Tue Dec 11 18:33:15 UTC 2012 i686 i686 i386 GNU/Linux
[root@localhost ~]# tcpdump -i p3p1 -n -w out.pcap -C 16
tcpdump: out.pcap: Permission denied
Run Code Online (Sandbox Code Playgroud)

为什么我得到错误?

我该怎么办?

linux fedora tcpdump

20
推荐指数
4
解决办法
5万
查看次数

CoreOS:tcpdump 神秘解决网络问题(使用过多的套接字)

我今天有一个谜团要告诉你。我们在 Azure 上运行一个基于 CoreOS (2023.5.0 / Linux 4.19.25-coreos) 的小型三节点 Elasticsearch 集群。Elasticsearch 在主机网络模式下的 docker 容器内运行。在几乎完全免维护运行一年多之后,我们看到机器进入了一种非常有趣的状态。

更新

此问题已通过修复Linux 内核中的驱动程序解决。请参阅下面的答案。

症状

基本上,受影响的机器和其他两个节点之间的网络连接失效。它们都在同一个虚拟网络和同一个子网中,通常可以与其他人通信。仍然可以从其他子网(我可以通过 ssh 进入)和不同的对等虚拟网络访问受影响的节点。这台机器也有(非常不稳定的)互联网连接,但大多数请求只是超时。

我们观察到,在受影响的节点上,报告的“使用的套接字”数量/proc/net/sockstat非常高(大约 4.5k 而不是健康节点上的大约 300)。监控显示,这个数字从节点变得不可用的那一刻起迅速上升。

有趣的是,我们似乎无法识别这些使用过的套接字的来源:

# cat /proc/net/sockstat
sockets: used 4566
TCP: inuse 2 orphan 0 tw 2 alloc 98 mem 4
UDP: inuse 1 mem 0
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

# cat /proc/net/sockstat6
TCP6: inuse 98
UDP6: inuse 1
UDPLITE6: inuse 0
RAW6: inuse 1
FRAG6: inuse …
Run Code Online (Sandbox Code Playgroud)

tcpdump linux-networking linux-kernel coreos azure-networking

14
推荐指数
1
解决办法
768
查看次数

在繁忙的界面上进行 tcpdumping 时有很多丢弃的包

我的挑战

我需要对大量数据进行 tcpdumping - 实际上来自处于混杂模式的 2 个接口,它们能够看到大量流量。

把它们加起来

  • 以混杂模式记录来自 2 个接口的所有流量
  • 这些接口分配 IP 地址
  • pcap 文件必须每 ~1G 轮换一次
  • 当存储了 10 TB 的文件时,开始截断最旧的

我目前在做什么

现在我像这样使用 tcpdump:

ifconfig ethX promisc
ifconfig ethX promisc
tcpdump -n -C 1000 -z /data/compress.sh -i any -w /data/livedump/capture.pcap $FILTER
Run Code Online (Sandbox Code Playgroud)

$FILTER包含SRC / DST过滤器,这样可以使用-i any。这样做的原因是,我有两个接口,我想在单个线程而不是两个线程中运行转储。

compress.sh 负责将 tar 分配给另一个 CPU 内核,压缩数据,给它一个合理的文件名并将其移动到存档位置。

我无法指定两个接口,因此我选择使用过滤器并从any接口转储。

现在,我不做任何内务处理,但我计划监控磁盘,当我有 100G 剩余时,我将开始擦除最旧的文件 - 这应该没问题。

现在; 我的问题

我看到丢包了。这是来自一个已经运行了几个小时并收集了大约 250 个 pcap 文件的转储:

430083369 packets captured
430115470 packets received by …
Run Code Online (Sandbox Code Playgroud)

networking linux tcpdump

13
推荐指数
2
解决办法
2万
查看次数

tcpdump 提高 udp 性能

我正在运行一组负载测试以确定以下设置的性能:

Node.js test suite (client) --> StatsD (server) --> Graphite (server)
Run Code Online (Sandbox Code Playgroud)

简而言之,node.js 测试套件每 x 秒向位于另一台服务器上的 StatsD 实例发送一定数量的指标。然后 StatsD 每秒将指标刷新到位于同一服务器上的 Graphite 实例。然后,我查看测试套件实际发送了多少指标以及 Graphite 接收了多少指标,以确定测试套件和 Graphite 之间的丢包率。

但是我注意到我有时会遇到非常大的丢包率(请注意,它是通过 UDP 协议发送的),范围为 20-50%。所以那是我开始调查这些数据包被丢弃的地方的时候,认为这可能是 StatsD 的一些性能问题。所以我开始记录系统每个部分的指标,以追踪发生这种下降的地方。这就是事情变得奇怪的地方。

我正在使用tcpdump创建一个捕获文件,在测试运行完成后我会检查该文件。但是每当我在运行 tcpdump 的情况下运行测试时,几乎不存在丢包!看起来 tcpdump 以某种方式提高了我的测试的性能,我无法弄清楚它为什么以及如何做到这一点。我正在运行以下命令来记录服务器和客户端上的 tcpdump 消息:

tcpdump -i any -n port 8125 -w test.cap
Run Code Online (Sandbox Code Playgroud)

在一个特定的测试案例中,我发送 40000 个指标/秒。运行tcpdump的测试有4%左右的丢包,没有的时候有20%左右的丢包

两个系统都作为 Xen VM 运行,具有以下设置:

  • 英特尔至强 E5-2630 v2 @ 2.60GHz
  • 2GB 内存
  • Ubuntu 14.04 x86_64

我已经检查过潜在原因的事情:

  • 增加 UDP 缓冲区接收/发送大小。
  • CPU 负载影响测试。(最大负载 40-50%,客户端和服务器端)
  • 在特定接口而不是“任何”上运行 tcpdump。
  • 使用“-p”运行 tcpdump 以禁用混杂模式。
  • 仅在服务器上运行 tcpdump。这导致发生 20% …

performance udp tcpdump graphite statsd

13
推荐指数
2
解决办法
2009
查看次数

SynProxy 无法返回非对称双桥拓扑的同步确认数据包

当我使用 ssh 从 172.16.11.5 和 172.16.10.6 连接时,我有一个非对称双桥拓扑,如下所示,但由于 SynProxy 我无法连接。

                  -------
                  |     |
                  ---o--- 172.16.11.5
                     |
                     |
                -----o----- 172.16.11.6
                |         |
                |         | default gw 1.1.1.1
                |         |
     1.1.1.2/30 --o----o--- 2.2.2.2/30
                  |    |
                  |    |
                  |    | (enp10s0f0)
              ----o----o-----
              |             |
              |     XXX     |
              |             |
              |  br1   br0  | synproxy
              |             |
              ----o----o-----
                  |    |
                  |    |
                  |    |
     1.1.1.1/30 --o----o--- 2.2.2.1/30
                |         |
                |         | default gw 2.2.2.2
                |         |
                -----o----- 172.16.10.1
                     |
                     |
                  ---o--- 172.16.10.6
                  |     |
                  ------- …
Run Code Online (Sandbox Code Playgroud)

linux tcp tcpdump linux-networking

13
推荐指数
1
解决办法
1532
查看次数

tcpdump:捕获几个 vlan 之一

我希望 tcpdump 捕获 VLAN 1000 或 VLAN 501。man pcap-filter说:

可以多次使用 vlan [vlan_id] 表达式来过滤 VLAN 层次结构。每次使用该表达式都会将过滤器偏移量增加 4。

当我做:

tcpdump -vv -i eth1 \( vlan 1000 \) and \( ip host 10.1.1.98 or ip host 10.1.1.99 \)
Run Code Online (Sandbox Code Playgroud)

我得到捕获的数据包。

但是当我这样做时:

tcpdump -vv -i eth1 \( vlan 1000 or vlan 501 \) and \( ip host 10.1.1.98 or ip host 10.1.1.99 \)
Run Code Online (Sandbox Code Playgroud)

我没有收到任何数据包——我推测是因为手册页中描述的“增加 4”行为。

如何一次捕获多个 VLAN 上的流量?

vlan tcpdump packet-capture sniffing

12
推荐指数
2
解决办法
6万
查看次数

tcpdump 如何使用它来捕获所有流量标头

我对 tcpdump 很陌生。除了非常琐碎的任务外,我从未使用过它。

最近,我被要求完成以下工作。

我所拥有的:具有连接到交换机的网络接口的服务器。该交换机上的所有流量都将镜像到该服务器。我需要什么:将所有这些流量存储到 PCAP 格式文件中。该文件应包括

  1. 只有传出或传入流量才感兴趣。不需要仅在子网内传输的流量,如果可能,不应记录流量。
  2. 所有多播和广播流量都不感兴趣,如果可能,应该忽略
  3. 我只需要以太网 -> IPv4 -> TCP、UDP 和 ICMP。其他人不感兴趣,如果可能的话应该被忽略
  4. 我不需要消息正文。标头(以太网、IP 和 TCP/UDP/ICMP)就足够了。因此,如果可能,不应记录正文

白天的流量约为 100MByte/s,对于我的工作,丢包是不能容忍的(必须连续24 小时)。
无论如何,如上所述,我不需要一切。

题:

  1. 我怎样才能完成工作?
  2. 我应该注意什么才能顺利收集所有数据而不会丢失(几乎)。

谢谢你。

tcpdump

12
推荐指数
1
解决办法
5万
查看次数

TCPDUMP - 捕获多个 IP 地址上的数据包(过滤器)

我需要做什么(通过 Linux 的“tcpdump”):

• 电子商务应用服务器:192.168.1.2、192.168.1.3、192.168.1.4。-这就是我想要捕获的内容(根据这些确切的 IP 进行过滤)。不是 IP 范围(子网)或单个 IP 地址,只是几个 IP 地址/服务器。

• 在此范围内还有其他应用程序,例如 PayRoll 应用程序在 192.168.1.5 上,我不想在我的捕获中看到任何此类流量。

我试过:

tcpdump 0 "/tmp" "host 192.168.1.2 or host 192.168.1.3 or host 192.168.1.4" 100000
Run Code Online (Sandbox Code Playgroud)

并且:

tcpdump 0 "/tmp" "ip.host==192.168.1.2 or ip.host==192.168.1.3 or ip.host==192.168.1.4" 100000
Run Code Online (Sandbox Code Playgroud)

两者都返回语法错误。

任何帮助深表感谢。

tcpdump

12
推荐指数
1
解决办法
8万
查看次数