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状态

 

posted @ 2021-07-21 15:42  顺逆流  阅读(1591)  评论(0)    收藏  举报