linux下tcpdump抓包使用wireshark进行分析
使用tcpdump命令进行抓包
1、首先环境如果没有安装tcpdump使用命令:whereis tcpdump

没有安装需要进行安装:yum install tcpdump
2、使用tcpdump -D 命令列出可以抓包的网络接口

3、抓包使用命令:tcpdump -i any host 172.18.1.105 -w /root/test/tcpdump.cap
-i interface:指定tcpdump需要监听的接口,-I 后面直接跟网卡名即可
any 表示所有网络接口
host 抓取的IP地址, 需要过滤端口的话增加and port 8080
-w将抓包数据输出到文件中而不是标准输出
如果想后台抓包,控制台不受影响,可以使用以下命令
nohup tcpdump -i any host 172.18.1.105 -w /root/test/tcpdump.cap &

抓包完成后可以把日志文件下载本地使用wireshark进行解析
使用wireshark解析tcpdump抓包的日志文件
1、打开抓包工具wireshark 选择文件点击打开选中下载的tcpdump日志文件
Wireshark可以根据IP,端口进行数据过滤
根据IP进行过滤
ip.addr == 172.18.1.105
根据IP和端口进行过滤
ip.addr == 172.18.1.105 and tcp.port==9090
根据源IP和目的IP进行过滤
ip.src==172.18.1.105 and ip.dst==172.18.12.22

2、在筛选出的TCP Stream中,将各条记录的Length进行求和,即可得到总的大小,计算出的数据大小单位为bytes,换算为MB的话需要 除两个1024,如果计算带宽还需要乘8

3、三次握手四次挥手

三次握手

整个流程为:
客户端主动打开,发送连接请求报文段,将SYN标识位置为1,Sequence Number置为x(TCP规定SYN=1时不能携带数据,x为随机产生的一个值),然后进入SYN_SEND状态
服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态
客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态
四次挥手

当客户端没有数据再需要发送给服务端时,就需要释放客户端的连接,这整个过程为:
客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态
服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端年进入CLOSE_WAIT状态
服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态
客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入CLOSED状态

浙公网安备 33010602011771号