记录一次奇怪的tcpdump

22 篇文章 2 订阅

tmpdump在我们日常的工作中经常使用,先介绍一下基本使用

tcpdump -i eth0 icmp

-i 是指定网卡, icmp是协议。
还有一些其他常用参数譬如
-b在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。tcpdump -b arp 将只显示网络中的arp即地址转换协议信息;

-l使标准输出变为缓冲行形式,如tcpdump -l >tcpcap.txt将得到的数据存入tcpcap.txt文件中;

-n不进行IP地址到主机名的转换;

-v输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;

-vv输出详细的报文信息;
再举例一些常用的,

抓取包含特点主机的数据包

tcpdump -i eth0 -vnn host 10.10.10.10
如果是源地址 src host 
如果是目的地址 dst host
还可以通过 and  or 组合多个条件

特定端口

tcpdump -i eth0 -vnn port 22

特定协议

tcpdump -i eth0 -vnn icmp/udp/ip/arp

保存或者读取文件

tcpdump –i eth0 -vnn -w  /tmp/fil1 -c 100
tcpdump –i eth0 -vnn -r  /tmp/fil1 ( 筛选主机追加:host  10.10.10.10

介绍完tcpdump的基本使用后,我们回到今天抓包的奇怪现象,在抓包的时候回会出现,我在抓包DNS时候发现

sudo tcpdump -i eth0 -vvv -nn udp dst port 53
 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
 17:04:48.145904 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 61)
 10.0.0.2.56497 > 10.0.0.1.53: [bad udp cksum 0x8f54 -> 0xb8fc!] 30234+ AAAA? www.twitter.com. (33)
 17:04:48.145925 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 61)
 10.0.0.2.56497 > 10.0.0.1.53: [bad udp cksum 0x224d -> 0x2604!] 30234+ AAAA? www.twitter.com. (33)

虽然域名能解析但出现了一些bad udp之类的数据包,很奇怪,后来深入了解了一下网卡的checksum offloading 机制,它是负责计算需要发送或者接收到的TCP/UDP消息的校验和,从而节省CPU的计算开销的一种机制,CheckSum Offload实际上是将传输层的一部分工作交给了硬件完成,以节约系统的CPU资源。微软的测试表明它可以最多节约30%的CPU资源。
对于Tx,设置Checksum Offload有效之后,传输层将随机填充TCP校验和,因此在本机上抓取的数据包是Bad CheckSum。然后,网卡会自动计算正确的校验码然后发送,因此对方收到的仍然是正确的TCP/UDP包。
对于Rx,设置Checksum Offload有效之后,网卡在接收数据时,会填充一个NDIS_TCP_IP_CHECKSUM_PACKET_INFO 结构并设置标志位;如果由于某种原因失败,则不设置标志位,由TCP/IP协议栈来完成数据校验。

可以查看一下

sudo ethtool -k eth0 | grep on
 rx-checksumming: on
 tx-checksumming: on
 scatter-gather: on
 generic-segmentation-offload: on
 generic-receive-offload: on
 rx-vlan-offload: on
 tx-vlan-offload: on

关闭后再测试一下

sudo ethtool -K eth0 tx off rx off

udo tcpdump -i eth0 -vvv -nn udp dst port 53
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
17:06:09.355411 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 57)
10.0.0.2.18964 > 10.0.0.1.53: [udp sum ok] 292+ AAAA? twitter.com. (29)
17:06:09.355431 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 57)
10.0.0.2.18964 > 10.0.0.1.53: [udp sum ok] 292+ AAAA? twitter.com. (29)

就没有发现这个问题了。当然这个功能还是需要开启,毕竟通过网络分担cpu的部分计算是非常好的设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳清风09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值