tcpdump参考

命令参考

tcpdump   #可以使用man pcap-filter查看过滤规则
    #过滤规则参数分为两种:primitives和qualifiers,可以在primitives前面加qualifiers进行限制 
	#primitives类型参数
	   -i ifname  抓指定网口的包
	   [dst|src] host xx.xx.xx.xx  #ip地址筛选
	   ether [src|dst] xx.xxx.xx.xx  #mac地址筛选
	   [dst|src] port  xxx  #端口筛选
	   not 或 !表示取反
	   'tcp[13] & 2 == 2'  #包含syn标志的数据包,需要加''
	#qualifiers类型参数
	   [tcp|udp|arp|icmp|ip]  #协议类型
	   
	#其他参数
	   -w file.pcap  #写到指定文件
	   -c count  #抓指定数量的包
	   -n #不使用域名,输出数字,输出到标准输出的时候用  
	   -v #增加输出的详细程度
	   

#抓取和192.168.1.5的数据包
tcpdump -i ens192 host 192.168.1.5 -w record.pcap
#抓取指定端口的包
tcpdump -i ens192 -c 10000 ip host 192.168.1.5 and tcp port 80 -w record.pcap

tcp报文头

  • tcpdump过滤条件tcp[0]表示第一个8位字节
    'tcp[13] & 2 == 2'表示tcp报文头的第14个字节的第二位为1,即syn标志为1;建立连接的过程就是syn,syn+ack,ack;断开连接的过程是fin+ack,fin+ack,ack。rst标志位表示连接异常,需要重新建立连接:比如服务器端口没启动,服务器异常关闭连接。

  • sequence number:在一个tcp会话中,a向b发送的每一个tcp包都有一个序列号,这个序列号是连续的,起始序列号是随机的,b在收到a的每个包的时候都会回复一个确认包(acknowledgment number),表示收到了该包。如果b向a回复已经收到x+1,那就表示已经收到了序号为x的包。(由于b可能一次收到很多个a的tcp包,所以b可能不会对每一个tcp包都进行确认,b回复x+1表示起始包到x包都已经收到了)。同样的b发送给a的每一个tcp包有一个连续的序列号,用来让a确认和回复b已经收到了哪些数据包。

  • HL:tcp报文由tcp报文头和tcp数据报文(应用层报文)组成,而tcp报文头有可选字段,是变长的。HL字段说明tcp报文头的长度。HL由4个位组成,最大值为0x1111,表示tcp报文头最大长度为60(0x1111*4)。上图是tcp固定的前20字节,可选字段截图:图片中可选字段是20个字节,加上固定头字节20,总共40字节,HL为0x1010

  • tcp checksum:tcp校验和,在tcpdump -n -v时如果报tcp校验错误,可以使用-K忽略,因为一般开了硬件校验网络包,可以使用ehtool修改关闭。

posted @ 2023-12-12 17:23  董少奇  阅读(40)  评论(0)    收藏  举报