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一致。

 
原文地址:https://www.cnblogs.com/dazhuwang/p/12837475.html