tcpdump教程入门

tcpdump是一个最基本重要的网络分析工具, 掌握好这, 对于学习tcp/ip协议也是很有帮助的. 理解了tcp/ip协议栈的知识, 分析调优网络的能力才会更高. 所以使用tcpdump相比其它的工具, 更能帮我们理解协议.

tcpdump的一些命令选项

  1. -n不要转换一些数值, 比如把80端口转换成http显示.
  2. -i需要监控的网卡. 如果不指定, 则监控所有有效的网卡数据.
  3. -c抓取多少个包后自动停止抓取
  4. -s默认是只抓取96bytes的数据, 如果想要抓取更多的数据, 则要通过这指定更大的数值. 比如-s 1500抓取1500byte
  5. -S默认每个包的sequence是显示相对的值, 如果想显示绝对值, 通过此选项打开.

过滤表达式

我们抓包时, 一般是有针对性的去关注感兴趣的东西, 不然太多的信息会对我们分析数据造成干扰, tcpdump支持过滤语法.

基本用法

host

host指定主机, 可以是ip或者域名.

tcpdump -s0  -i wlan0 host www.baidu.com

上面的功能是抓取本机网卡wlan0上和www.baidu.com这个主机打交道的数据. 其中-s0指定抓取所有数据, 查考前面选项介绍.

dst, src

有时候我们只关心数据流其中一个方向上的数据, 可以通过src: 源端, dst:目的端来指定过滤.

tcpdump  -i wlan0 dst  www.baidu.com

port

指定端口

tcpdump -i wlan0  port 6379

抓取redis的数据.

协议

指定协议数据, 比如: tcp, udp, icmp

tcpdump -i wlan0  tcp and udp

抓取所有的tcp和udp数据包.

高级用法

tcpdump表达式可以支持逻辑组合运算, 提供更强大的功能.

  • and
  • or
  • not

这些和所有开发语言中的语义是一样的. 下面看一些例子:

# 源主机是192.168.1.34, 并且目标端口是80
tcpdump -i eth0 src 192.168.1.34 and dst port 80
# 所有tcp协议并且端口不是22
tcpdump -i eth0 tcp and not port 22

有时候表达式太复杂了, 我们要进行分组, 即用()把一些表达式组合在一起.

# 源主机是192.168.1.34并且目标端口是22或者3389
tcpdump -i eth0 'src 192.168.1.34 and (dst port 22 or 3389)'

我们还可以通过分析数据包其中的部分数据计算过滤:

# 抓取带有SYN标志的数据, tcp[13]的意思是从tcp数据包头中取第14个byte数据, 详细参考tcp协议头
sudo tcpdump -i wlan0 'host www.baidu.com and tcp[13]&2!=0'

数据保存和读取分析

一般在服务器上截取到数据包后, 用于之后的分析, 比如传到本地机器后用wireshark分析. 可以通过-w选项保存:

tcpdump -i eth0 src www.baidu.com -w file.cap

上面把数据保存到了file.cap文件中

参考: https://danielmiessler.com/study/tcpdump/

posted @ 2015-01-25 16:17  海鸟  阅读(4950)  评论(0编辑  收藏  举报