/ code

tcpdump 简介以作备忘

在深入理解计算机网络协议的过程中,一个趁手的工具少不了,很多人喜欢Wireshark,可视化界面做的比较好。然鹅,本人更加偏爱强大的tcpdump,不仅是因为其强大的功能,而且在实际应用场景中,我们不可能把所有的电脑都装好wireshark,然后再debug定位问题。
如果用macOS的话,内置的tcpdump命令十分方便快捷,当然,前提是你得记得住常用的命令。
这里重新捋一下tcpdump的使命及其基本使用方法,以作备忘。

常用Options

  • -i any : Listen on all interfaces just to see if you’re seeing any traffic.
  • -i eth0 : Listen on the eth0 interface.
  • -D : Show the list of available interfaces
  • -n : Don’t resolve hostnames.
  • -nn : Don’t resolve hostnames or port names.
  • -q : Be less verbose (more quiet) with your output.
  • -t : Give human-readable timestamp output.
  • -tttt : Give maximally human-readable timestamp output.
  • -X : Show the packet’s contents in both hex and ascii.
  • -XX : Same as -X, but also shows the ethernet header.
  • -v, -vv, -vvv : Increase the amount of packet information you get back.
  • -c : Only get x number of packets and then stop.
  • -s : Define the snaplength (size) of the capture in bytes. Use -s0 to get * * everything, unless you are intentionally capturing less.
  • -S : Print absolute sequence numbers.
  • -e : Get the ethernet header as well.
  • -q : Show less protocol information.
  • -E : Decrypt IPSEC traffic by providing an encryption key.

Expressions

Expressions允许我们过滤各种类型的数据,更方便定位我们关系的网络数据。在tcpdump的使用中,expressions是必不可少的。

主要有三种类型的Expression:type, dir, 以及 proto

  • Type 选项:host, net, and port.
  • Direction 可以帮助我们区分src, dst.
  • Proto(col) 可以用来指定: tcp, udp, icmp, ah, 等等

常用场景示例

入门基础差不多就这么多了,其实也不多,那么我们列几个日常应用场景,主要是来告诉你们,tcpdump真的很有用哦😆

  • 监听某个网口的数据 tcpdump -i eth0
  • 监听某个IP的数据 tcpdump host 1.2.3.4
  • 指定一下数据方向 tcpdump src 1.2.3.4 或者 tcpdump dst 3.4.5.6
  • 筛选一下跟某个网络相关的数据 tcpdump net 1.2.3.4/20
  • 或者查看一下本机跟某个端口相关的网络流量 tcpdump port 80
  • src或者dst搭配使用更好哦 tcpdump src port 80
  • 多监听几个端口 tcpdump portrange 21-23
  • 把监听到的数据存下来吧 tcpdump host 1.2.3.4 -w save_file

进阶

以上都是基本命令工具,而实际使用过程中,我们可能从更多的维度上来筛选数据,所以,这里有三个逻辑关系运算符需要熟悉:

  • AND and or &&
  • OR or or ||
  • EXCEPT not or !

更多更加灵活的例子

  • 筛选从10.2.3.4网络来,到端口3367的数据 tcpdump -nnvvS src 10.5.2.3 and dst port 3389
  • 一个网段到另一个网段的流量, tcpdump -nvX src net 192.168.1.0/16 and dst net 10.1.2.3/8 or 176.1.2.3/16
  • 查看所有到某个IP的非ICMP数据 tcpdump dst 192.168.0.2 and src net and not icmp

通过筛选条件的组合可以更加合理精确地定位到需要展示的流量数据,这是在实际应用场景中最常用的。

特殊字符

需要注意的一点是当组合多个选项的时候,最好用单引号分开。
单引号可以帮助忽略特殊字符,例如括号等。举个例子:
这个命令 tcpdump src 10.0.2.4 and (dst port 3389 or 22)
最好用单引号包起来,改成这样
tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

定位协议中特殊字符

  • 所有的ACK数据包 tcpdump 'tcp[13] & 16!=0'
  • 所有的SYN数据包 tcpdump 'tcp[13] & 2!=0'

其实有很多方式可以实现同样的目的,例如我们可以通过另一种方式来抓取某些特殊的TCP Flag集合:

tcpdump 'tcp[tcpflags] == tcp-syn'
同样可以筛选出SYN TCP数据包。

TIPS

  • find cleartext http get requests tcpdump 'tcp[32:4] = 0x47455420'
  • find ssh connections on any port (via banner text) tcpdump 'tcp[(tcp[12]>>2):4] = 0x5353482D'
  • packets with a ttl less than 10 (usually indicates a problem or use of traceroute) tcpdump 'ip[8] < 10'
  • packets with the evil bit set (hacker trivia more than anything else) tcpdump 'ip[6] & 128 != 0'

如果真正的掌握TCP/IP,更加深入地理解计算机网络协议,必须要熟练掌握tcpdump。以上的简单介绍仅仅作为tutorial,更多内容需要在实际场景中进行更多的磨炼,man tcpdump你值得拥有。

tcpdump 简介以作备忘
Share this