2012-04-24 153 views
18

在tcpdump中,如何捕获所有传入我的机器的传入IP流量?我不在乎我的本地流量。在tcpdump中捕获传入流量

如果我只是说:

tcpdump ip dst $MyIpAddress and not src net $myIpAddress/$myNetworkBytes 

...还是我失去了一些东西?

+0

什么是“icoming IP流量”?包广播地址也进来了。 – harper 2014-11-13 15:10:00

回答

20

在Bash shell中尝试这个办法:

tcpdump -i eth0 tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes 

或此相应制剂:

tcpdump -i eth0 ip proto \\tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes 

在我的系统解析为类似:

tcpdump -i eth0 tcp and dst host 10.0.0.35 and not src net 10.0.0.0/24 

如果你想看到到达目标主机的所有流量,而不仅仅是TCP协议流量:

tcpdump -i eth0 dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes 

一些注意事项:

  1. 我改变$myIpAddress/$myNetworkBytes$MyNetworkAddress/$myNetworkBytes。这是因为您规则的明显目的是从本地网络中排除流量,并且指定网络地址的correct way用于指定网络的最低​​IP地址(称为网络地址)/网络掩码。如果指定为以$ myNetworkBytes的网络掩码的网络范围内的最低地址以外的任何地址,那么你会得到错误信息:

    tcpdump: non-network bits set in "10.0.0.3/24" 
    
  2. 在第一个例子“TCP”是关键字(man pcap-filter)中的,而在第二个示例中,'tcp'用作的值ip proto。为了表明第二个实例中的'tcp'是一个值而不是另一个'tcp'关键字,我需要用双反斜杠来转义'tcp'。它必须是一个双反斜杠,以便Bash解释器将一个反斜杠传递给libpcap解释器(Bash吃第一个反斜杠,libpcap得到第二个反斜杠)。为了减少双重转义混淆,可能很适合进入双引用命令的整个表达式部分习惯:

    tcpdump -i eth0 "ip proto \tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes" 
    
  3. 为了避免警告和惊喜,这是更好地使用接口说明符-i eth0或任何界面,你的愿望。并非所有接口都必须分配IP地址,并且没有特定的情况,您可能会看到您无意看到的流量。在运行网络管理器的系统上尤其如此,该系统似乎对于要添加什么接口以及何时添加接口有自己的想法。

+0

嘿,谢谢你的回答。我对UDP流量也很感兴趣,这就是为什么我没有在上面的过滤器中加入'tcp'的原因。我相信这是微不足道的,但是你能否澄清为什么我需要放置我的网络地址而不是我的IP地址?一旦我指定了网络字节的数量,它不应该具有相同的效果吗? – 2012-04-25 11:44:06

+0

编辑回答地址评论 – 2012-04-25 12:11:45

10

以上都不适用于具有多个ips的盒子。

这个工作对我非常好DNS服务器上绑定了多个IP:

tcpdump -l -n -i pub dst port 53 and inbound

可能无法在的tcpdump所有版本的工作,虽然。

# tcpdump -V 
tcpdump version 4.1-PRE-CVS_2012_03_26 
libpcap version 1.4.0 
+1

欣赏“入站”关键字 – bbonev 2017-08-17 23:19:55

0

-Q方向 --direction =方向 选择发送/接收哪些数据包应该 捕获方向的方向。可能的值是in', out和inout。在所有平台上均不可用 。

+0

不错!我不知道这个选项。 – 2017-02-15 08:26:07