常见网络协议
2016-09-09  本文已影响0人 
allanYan
最近用tcpdump抓包时,经常需要用到tcp、ip等网络协议,在此记录下,备忘;
在网络上找了下,发现roclinux.cn网站有这些协议的格式图片,很清晰,在此引用下;
Ethernet协议
Ethernet
IP协议
IP
TCP协议
TCP
UDP协议
UDP
常见tcpdump表达式
- 获取发往192.168.0.1服务器的GET请求:
 
tcpdump -i en4 -X -nn '((host 192.168.0.1) and (tcp[(tcp[12]>>2):4]=0x47455420))'
tcpdump -i en4 -X -nn '((host 192.168.0.1) and (tcp[(tcp[12]>>4)<<2:4]=0x47455420))'
按照tcp协议,第12个字节的前4位存储偏移量,也即头部的长度,另外偏移量的单位为4byte,因此(tcp[12]>>4)<<2表示数据部分的开始位置,简写为tcp[12]>>2;
- 获取与192.168.0.1的GET请求和相应:
 
tcpdump -XvvennSs 0 -i en4 'tcp[(tcp[12])>>2:2]=0x4745 or tcp[(tcp[12])>>2:2]=0x4854'
0x4745为GE,0x4854为HT,熟悉HTTP协议的应该知道,这是HTTP请求和响应头部的开始字符
- 获取与192.168.0.1三次握手的SYN请求:
 
tcpdump -nn -i en4 -X 'tcp[tcpflags]=tcp-syn and host 192.168.0.1' 
- 获取端口大于1024的TCP请求
 
tcpdump -i en4 -X -nn 'tcp[0:2]>1024'
按照tcp协议,前两个字节存储源端口,因此可以用表达式tcp[0:2]表示;