tcpdump

tcpdump是linux下的一个网络抓包工具

tcpdump非常强大且复杂命令,是我们平常排查网络相关问题的得力助手

安装

一般linux发行版自带基本无需安装

常用操作

抓取有192.168.1.1的包,来源或目的

tcpdump host 192.168.1.1

在所有网卡中抓取有192.168.1.1的包,来源或目的

tcpdump -i any host 192.168.1.1 

抓取主机是192.168.1.1 或 192.168.1.2

tcpdump -i any host 192.168.1.1 or 192.168.1.2

抓取除了192.168.1.1的包

tcpdump -i any host ! 192.168.1.1

抓取所有的流量

tcpdump -nS

指定端口

tcpdump -i any port 22

抓取192.168.1.1到192.168.1.2的80端口

tcpdump  -i any  src host  192.168.1.1 and dst host 192.168.1.2 and dst port 80
tcpdump -i eth0 icmp
tcpdump -i eth0 ip
tcpdump -i eth0 tcp
tcpdump -i eth0 udp
tcpdump -i eth0 arp

显示参数

  • -n 不解析主机名
  • -nn 不解析主机名以及协议
  • -v 打印详情
  • -e 显示二层信息
  • -s 抓取全部数据0为全部,默认96
  • -c 抓包次数

http协议

所有的get请求

tcpdump -i eth0 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

POST 请求

tcpdump -i any -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354'

抓取80端口的http协议get请求的流量,只需要指定下tcp dst port 80指定下端口号,post同理

tcpdump -i any -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

抓取192.168.1.1的80端口中get和post请求的http流量的请求和响应

tcpdump -i any -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F and host 192.168.1.1'

监控所有的get和post的主机和地址

tcpdump -i any  -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

导出文件

-w 表示把数据报文输出到文件
-r 表示读取数据报文

抓取所有的包保存到tcpdump.pcap

tcpdump -i any -s 0 -X -w tcpdump.pcap

读取pcap文件

tcpdump -A -r tcpdump.pcap

保存文件的时候切分文件

tcpdump -i any host -G 60 -C 150M -w test_%Y%m%d%H%M.pcap

参考资料

https://www.middlewareinventory.com/blog/tcpdump-capture-http-get-post-requests-apache-weblogic-websphere/
https://www.cnblogs.com/bakari/p/10748721.html