TCPdump简易使用教程
首先简单介绍下TCP,TCP位于OSI七层中的传输层,在以太网协议和IP协议上面,HTTP等应用层协议下面,处于中间位置。
以太网协议规定电子信号如何组成数据包,解决子网内部的点对点通信;
IP协议定义了地址规则(也就是IP地址),通过路由表,实现了多个子网间的数据包转发;
TCP协议的主要作用就是保证数据通信的完整性和可靠性,防止丢包。
一个以太网数据包的大小是固定的,为1522字节,其中1500字节是负载(payload),22字节是头(head)。
Tcpdump使用
安装:linux是默认安装的,如果没有的话 直接yum安装即可。
直接输入tcpdump就直接启动了。
常用场景:
从所有网卡中捕获数据包 tcpdump -i any
从指定网卡中捕获数据包 tcpdump -i eth0 ----这个就是从eth0这个网卡中抓包
将捕获的包写入文件 tcpdump -i eth0 -w packets_file ----使用-w将抓的包写入文件
读取之前产生的tcpdump文件 tcpdump -r packets_file
获取更多的包信息,并且以可读的形式显示时间戳 tcpdump -ttttnnvvS
查看整个IP段的数据包 tcpdump net 192.168.1.0/24
根据 IP 地址查看 tcpdump host 192.168.1.100
指定 IP 地址是源地址或是目的地址 tcpdump src 192.168.1.100
tcpdump dst 192.168.1.100
查看某个协议或端口号的数据包 tcpdump udp
捕获某个端口或一个范围的数据包 tcpdump port 22
tcpdump portrange 22-125 ----也可以使用src或dst来抓取指定源目端口的包
逻辑连接词:与(and,&&),或(or,||),非(not,!)
举例分析
主要的字段图中已经标注了
18:52:43.264383 这个就是这个包接收到的时间
IP 120.132.1.226.15590 发送方的IP地址及端口号(15590就是端口)
10-42-96-156.ssh 接收方地址及端口
Flags [P.] tcp包header部分的第14个字节的P位。这里P位表示接受方需要马上将包push到应用层
seq 0:64 tcp包的seq号,0是起始值,64是接收值,TCP包的每个字节都有一个标号(seq号),0:64表示共用65个字节被接收,但是有一个字节是三次握手阶段所使用,所以一共发送的长度是64字节。
ack 13953 tcp包的ack号,ack 13953表明seq号为13952的字节已被确认收到,下一个期望接收的seq号从13593开始。
win 256 win表示的是tcp包发送方,作为接受方还可以接受的字节数。这里的win 256表明ip为120.132.1.226的主机还可以接受256个字节。
length 64 这个length是应用层传过来的数据大小,不包括tcp的header。这个值和我们上面分析的seq 0:64是一致的。
下面在装有nginx的机器上抓个80端口的包看下访问来源
可以清楚的看到本机的出口IP与在机器上抓到的访问IP一致。