捕获tcpdump中的传入流量

时间:2012-04-24 15:04:26

标签: capture packet traffic packet-capture tcpdump

在tcpdump中,如何捕获发往我机器的所有传入IP流量?我不关心我的本地交通。

我应该说:

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

......或者我错过了什么?

3 个答案:

答案 0 :(得分:23)

在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地址(称为网络地址)/ netmask。如果您指定网络掩码为$ myNetworkBytes的网络范围内的最低地址以外的任何地址,那么您将收到错误消息:

    tcpdump: non-network bits set in "10.0.0.3/24"
    
  2. 在第一个示例中,'tcp'是libpcap表达式语言中的关键字(man pcap-filter),而在第二个示例中,'tcp'用作 {/ 1>}的值。为了表明第二个实例中的'tcp'是一个值而不是另一个'tcp'关键字,我需要使用双反斜杠转义'tcp'。它必须是一个双反斜杠,以便Bash解释器将一个反斜杠传递给libpcap解释器(Bash吃掉第一个反斜杠,libpcap得到第二个。)为了减少双重逃避混淆,最好进入双重引用命令的整个表达式部分的习惯:

    ip proto
  3. 为避免出现警告和意外,最好使用界面说明符tcpdump -i eth0 "ip proto \tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes" 或您希望的任何界面。并非所有接口都必须分配IP地址,并且不具体,您可能会看到您不打算看到的流量。在运行网络管理器的系统上尤其如此,它似乎对要添加的接口和何时添加接口有自己的想法。

答案 1 :(得分:13)

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

这在我的DNS服务器上运行得非常好,有很多ips绑定它:

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

答案 2 :(得分:3)

-Q方向        --direction =方向               选择数据包应该的发送/接收方向               被捕获。可能的值为in', out'和`inout'。不               适用于所有平台。

相关问题