tcpdump -s 0 -n -A -X src host 172.17.0.2 and dst port 80 and tcp[13]=24
-s 0 表示包内容长度,比如 -s 1500
-X 表示16进制显示
ng上执行 tcpdump -n -A -X src host 172.17.0.2 and dst port 80 and tcp[13]=24 然后click上执行 curl -v "172.17.0.3/index.html" , 可以看到ng上的http请求了
dep 上查看php 项目 : tcpdump -n -X -i docker0 tcp dst port 80 and tcp[13]=24
tcpdump有很多参数来控制在哪里捕获,如何捕获,以及捕获文件如何保存处理等选项,
-i interface 指定监听的网卡
-s 指定每个报文中截取的数据长度,不是缺省的68字节。如果仅仅对报头感兴趣,可以不使用该选项,指定为0说明不限制报文长度,而是捕获整个报文。一般以太网的MTU值为1500,因此指定长度为1500即可。
-w filename 报文保存到文件
-c 当收到指定报文个数后退出
-n 不要将IP地址和端口号进行转换,转换需要CPU时间
-G <rotate_seconds> 每隔指定的时间,将捕获的报文循环保存为新文件。需要-w配合使用,并指定时间格式才能循环保存文件,否则覆盖原来文件。常用事件格式%d(每月中的第几天),%H(当前的小时时间),%M(当前的分钟时间),%S(当前的秒时间)。
-D 输出tcpdump可以捕获的接口列表,包含接口编号和接口名称
-v 当解析或打印时输出详细的信息。例如报文的生存时间TTL、ID等IP报文选项。
-r 读取有-w创建的报文
- 匹配规则
只有符合表达式要求的报文才会被抓取到。
表达式由一个或多个基本元素加上连接符组成,这些基本元素也称为原语,是指不可分割的最小单元。基本元素由一个ID和一个或多个修饰符组成,有3种不同类型的修饰符。
第一种是类型修饰符,共4个类型修饰符,分别为host、net、port和portrange。
host指定要捕获的主机或ip地址。
net需要捕获报文的子网。
port和portrange分别用于指定端口和端口范围。
第二种是传输方向的修饰符,包括src和dst。不仅可修饰地址,也可修饰端口。
tcpdump -i eth0 'dst port 80' -v
tcpdump -i eth0 'prot 5060 and src 192.168.1.100' -v
第三种是协议修饰符,可以基于特定的协议来进行过滤,可以是IP、ARP、RARP、ICMP、TCP和UDP等协议类型,如tcp port 21、udp port 5060等。
另外这些原语可以使用and(&&)、or(||)和not(!)来进行运算组合。所有的报文集合是全集,可以进行交、并和补集运算。在多个层次的集合运算时,可以使用小括号来分割其集合运算符的结合关系。
tcpdump -i eth0 -s0 -w wang.pcap host 10.0.0.15
tcpdump -i eth0 -w aaa.pcap port 59 or port 53 or port 80 or arp or icmp