在Ubuntu系统中安装tcpdump的步骤如下:
- 更新软件源
1 | sudo apt update |
- 安装tcpdump
1 | sudo apt install tcpdump |
- 验证安装
1 | tcpdump -v |
如果看到tcpdump的版本信息,则说明安装成功。
- 使用tcpdump
1 | tcpdump |
将显示本机网络交互,按Ctrl+C可以退出。
你也可以指定过滤条件来抓取特定流量:
1 | tcpdump port 80 |
过滤HTTP端口流量
1 | tcpdump host 192.168.1.100 |
过滤特定主机流量
1 | tcpdump -i eth0 |
只监听eth0接口流量
- 使用iptables过滤特定流量
给tcpdump命令加上-w可以写到文件:
1 | tcpdump -w captured.pcap |
也可以添加-i指定接口,同时可以使用iptables禁止特定端口流量写入文件用于下载分析。
所以在Ubuntu系统中,使用apt更新源后直接安装tcpdump就可以开始抓包分析网络流量了。
tcp SYNC 报文是什么?有何作用?
TCP SYN 报文是TCP(传输控制协议)三次握手过程中的第一个报文,用于建立两个TCP套接字之间的连接。在TCP/IP模型中,建立一个稳定的连接之前,两端(通常称为客户端和服务器)必须执行一个称为“三次握手”(Three-Way Handshake)的过程,SYN 报文在这个过程中扮演了关键的角色。
三次握手过程
SYN: 第一步由客户端执行,发送一个SYN(Synchronize Sequence Numbers)报文到服务器。在这个SYN报文中,客户端选择一个随机的序列号(Seq=X)作为连接的起始序列号,表示开始传输数据的序列号。
SYN-ACK: 服务器接收到SYN报文后,会回复一个SYN-ACK(Synchronize-Acknowledgment)报文。这个报文确认(ACK=X+1)了客户端的SYN报文,并且服务器也选择了一个随机的序列号(Seq=Y)作为自己的起始序列号。
ACK: 最后,客户端再发送一个ACK(Acknowledgment)报文作为响应,确认(ACK=Y+1)了服务器的SYN-ACK报文。此时,客户端到服务器方向的连接被建立。同时,这个ACK报文也可能携带客户端向服务器发送的第一个数据包。
SYN 报文的作用
初始化连接: SYN 报文的主要作用是在TCP连接的初始化阶段,通知接收方(服务器)发送方(客户端)希望建立连接,并且提供了初始化序列号,用于后续数据传输的可靠性控制。
同步序列号: 通过SYN报文中的初始序列号,双方能够同步彼此的序列号,这对于TCP协议的可靠传输至关重要。
协商参数: 在TCP选项中,SYN报文也可以用来协商两端的TCP参数,如最大报文段长度(MSS),窗口缩放因子,选择确认(SACK)等,这有助于优化TCP连接的性能。
SYN 报文是建立TCP连接的基础,它通过三次握手过程确保了连接的可靠性和序列号的同步,使得TCP能够提供一种面向连接、可靠的字节流服务。
最近我们有一个老旧服务想下线,需要观察是否还有调用流量,但服务没有日志,代码来源也不确定,不敢加日志。只能通过网络抓包来观察了。
首先我让运维帮忙抓包,并使用WireShark分析,可以发现都是一些TCP握手与挥手的包,没有实际发送数据的TCP包。但运维只抓了45秒的包,要确认服务无流量需要更长时间。运维反馈长时间抓包数据量可能很大,磁盘有风险。
我想如果tcpdump能只抓有数据的网络包就好了。首先问了ChatGPT,它回答利用TCP的PSH标志来过滤,显然是不对的。TCP数据包不一定带PSH标志。
我想到如果能得到TCP包数据长度,过滤出大于0的就可以实现。经了解,TCP包头中没有直接定义数据长度字段,但可通过IP包长度减去IP包头长度,再减去TCP包头长度计算得到。
IP包中第3-4字节是包长度,用”ip.len”表示。IP包头长度存储在第1字节后4位,单位4字节,需左移2位。TCP包头长度存储在第13字节前4位,单位同样4字节,需右移2位。
我打算问ChatGPT tcpdump是否支持加减运算,看它的回答加减号表示与和或的关系,似乎实现不了。我又尝试了tshark,发现其显示过滤器不支持运算。
带着疑惑继续搜索,终于通过”tcpdump tcp.payload”关键词,找到了man page中的相关内容,原来tcpdump支持使用”greater”过滤非空TCP包!
我也实际试了下,确实可以实现。通过加上”nohup”后台运行,再用”timeout”指定期限为1天,就可以长时间抓取非空包了。一天后就可分析抓包数据了。
通过这次经历,不可全信ChatGPT,得勤看官方文档啊。最后邀请大家点赞关注,我们下次再见。
原文链接: https://dashen.tech/2017/03/05/tcpdump的使用/
版权声明: 转载请注明出处.