前面文章咱们介绍了wireshark图形界面抓取网络数据包的方法,这种方法主要用在Windows系统。实际生产环境中使用最多的抓取网络数据包是在linux系统上进行的,这篇文章主要介绍linux系统上最长使用的tcpdump抓包方法,抓取的数据包可直接使用wireshark或者tshark工具进行后续分析,十分方便。 另外,tcpdump一般是各linux发型版本预装的module,无需再进行安装。
一.tcpdump抓包常用参数
# man tcpdump //有参数及使用方法详细描述
- 描述
tcpdump抓包默认匹配抓包条件直接输出到屏幕,默认只输出抓取每条数据包简单信息,例如IP,port,消息提示信息。加“-w”参数,后跟文件名,将每条抓取到的数据包的详细信息写入文件,供后续离线分析。 当然tcpdump工具也可读取数据包文件,“-r”参数后跟文件名。“-V”参数后跟文件名列表文件,一次读取多个文件。不过一般我们很少使用tcpdump去读取抓包文件,因为tcpdump读取显示信息优先。 - 重要参数介绍
-D 显示可抓取的接口,可在此找寻你预抓取的接口名字
-i 跟接口名字,对跟定接口进行抓包
-G 循环抓取的秒数,达到设定的秒数,循环覆盖文件,可以与-W和-C组合使用
-C 抓包文件切割参数,后跟文件大小,单位是1,000,000 接近Mbyte单位,
如果抓包时间较长,一般我们会抓包过程中进行自动分包,以免后续离线分析时,
文件过大打开困难
-W 跟文件数,通常与-C和-G组合使用
-G&-W组合:
-G <s> -W 1:到达-G跟定的秒数自动终止抓包。
-G <s> -W <x>: 到达给定的秒数,循环,循环x次结束。
-C&-W组合:
-C <X> -W<Y>: 到达X mbyte写一个file,到达Y个files时进行循环覆盖,并不会终止抓
包。达到循环抓取最近C*W mbyte大小的数据包的目的,这个功能还是非常实用的,
例如你的磁盘只有30G大小,那么你可以用这个组合持续抓取最新的一定大小的数据包,
而不用担心磁盘会满的问题。
-C&-G组合:到达-C切割文件,到达-G循环覆盖,达到抓取最近G时间并且按-C进程分包的目的
-c 跟数字,抓取到设定的数据包数,自动停止抓包。
-s 设置抓取的每个数据包的大小,例如只想抓取包头的话,可以适当设置小一点-s的值,达到这个目的,可以有效减小抓包的大小。
-S 设置的话,抓取的TCP包的序列号是绝对值,不再是相当值。
-w 后跟文件名及存取目录,抓包生成的文件名字,不加-w的话,tcpdump默认输出是吐屏。
注:对于在前台的抓包进程,可以直接使用ctrl+c终止正在进行的抓包进程,后台的抓包进程使用kill PID的方式终止正在进行的抓包,PID查询方式:ps aux | grep tcpdump
二. tcpdump应用举例说明
- tcpdump -i eth0 host 10.124.101.1
抓取eth0接口,IP地址是10.124.101.1 –扩展: tcpdump -i eth0 host 10.124.101.1 or host 10.124.101.2 //可加多个IP tcpdump -i eth0 net 10.124.101.1/24 //可加网段 当然IP地址还可以加源src和目的dst限定,如tcpdump -i eth0 src host 10.124.101.1 - tcpdump -i eth0 host 10.124.101.1 and port 53
抓取IP&port的数据包。 - tcpdump -i eth0 host 10.124.101.1 and sctp -c 10
抓取10.124.101.1&sctp协议的数据包,抓10个包停止。 - ether host 00:00:5e:00:53:00
抓取mac地址Ethernet address 00:00:5e:00:53:00 - not broadcast and not multicast
不抓取广播和多播包 - not arp //不抓取arp包
- tcp port http //抓取HTTP TCP port (80),相当于tcp port 80
- not port 80 and not port 25 and host www.wireshark.org
Non-HTTP and non-SMTP to/from www.wireshark.org,也就是说host可以是domain
总结: 抓包匹配条件其实就是地址(IP,MAC),协议(常见:ip,ip6,tcp,udp,http,ftp,sctp),port 和4层协议基本是对等的,这些条件的组合,来对流经抓包接口的数据进行有筛选的抓取。然后再与第一部分介绍的控制参数进行组合,达到抓包过程控制的目的,
三. tcpdump使用技巧
- 配合linux “&” 后台运行进程抓包
可将抓包进程扔到后台运行,不影响前台使用,停止抓包用kill pid的方式终止抓包,这种方式一般要使用-w参数,将抓包结果写到文件里,否则虽然后台运行了,但是前台却一直在吐屏。
举例:
tcpdump -i eth0 host 10.124.101.1 or host 2409:804B:5003:1407:02FF::1 and port http -c 10000 -w test1 &
- nohup配合后台运行符&进行抓包
这样做的一个主要目的是长时间抓包情况下,在退出ssh会话情况下并不会停止抓包。如果用第一种抓包方法,虽然抓包进程丢到了后台执行,但是一旦ssh登录会话终端,抓包将立即中断。
举例:
nohup tcpdump -i eth0 host 10.124.101.1 or host 2409:804B:5003:1407:02FF::1 and port http -c 10000 -w test1 &
nohup …&再配合上面将的-G,-C,-W使用,那爽的简直不要不要的。
不依托ssh会话后台循环抓取最近10个100的包
nohup tcpdump -i eth0 host 10.124.101.1 or host 2409:804B:5003:1407:02FF::1 and port http -C 100 -W 10 -w test1 &
不依托ssh会话后台循环抓取1min的包停止
nohup tcpdump -i eth0 host 10.124.101.1 or host 2409:804B:5003:1407:02FF::1 and port http -G 60 -W 1 -w test1 &
不依托ssh会话后台循环抓取10min的包,并10M分一个包
nohup tcpdump -i eth0 host 10.124.101.1 or host 2409:804B:5003:1407:02FF::1 and port http -G 600 -C 10 -w test1 &
|