Linux网络 TCP全连接队列与tcpdump抓包

TCP全连接队列

在 Linux 网络中,TCP 全连接队列(也称为 Accept 队列)是一个重要的概念,用于管理已经完成三次握手,即已经处于 established 状态但尚未被应用程序通过 accept( ) 函数处理的 TCP 连接,避免因为应用程序处理不及时而导致连接丢失。

最大长度

全连接队列的最大长度由两个参数决定:

  • backlog:这是在调用 linsten( ) 函数时设置的第二个参数,用于指定全连接队列的最大长度,全连接队列的最大长度 == backlog + 1 。
cpp 复制代码
int listen(int sockfd, int backlog);
  • net.core.somaxconn :这是一个系统级参数,定义了全连接队列的最大长度上限。默认值通常是 128,但可以通过修改 /proc/sys/net/core/somaxconn 文件来调整。

全连接队列的实际最大长度为 min(backlog, net.core.somaxconn)。如果全连接队列已满,新的连接将无法进入队列,可能会被丢弃或导致客户端收到 RST 包。

查看队列状态

可以使用 ss -lnt 命令查看全连接队列的状态,Recv-Q 列表示当前全连接队列的长度,而 Send-Q 列表示全连接队列的最大长度。

tcpdump抓包

tcpdump 是一个功能强大的网络抓包工具,它能够捕获经过网络接口的原始数据包,并根据用户指定的过滤条件进行筛选和分析。

安装****tcpdump

tcpdump 通常已经预装在大多数 Linux 发行版中。如果没有安装,可以使用包管理器进行安装。例如 Ubuntu ,可以使用以下命令安装:

bash 复制代码
sudo apt-get update
sudo apt-get install tcpdump

在 Red Hat 或 CentOS 系统中,可以使用以下命令:

bash 复制代码
sudo yum install tcpdump

常见使用

tcpdump 的基本命令格式如下:

bash 复制代码
tcpdump [选项] [过滤条件]

常用选项

  • -i <interface> :指定要监听的网络接口(如 eth0wlan0lo)。

  • -n:不解析主机名,直接显示 IP 地址。

  • -nn:不解析主机名和端口号。

  • -v:显示更详细的信息。

  • -vv:显示更详细的信息。

  • -vvv:显示最详细的信息。

  • -c <count>:捕获指定数量的数据包后停止。

  • -w <file>:将捕获的数据包保存到指定文件中,而不是直接输出到终端。

  • -r <file>:从指定文件中读取数据包进行分析。

  • -s <size>:设置捕获数据包的大小(默认为 65535 字节)。

常用过滤条件

  • 按协议过滤

    • tcp:捕获 TCP 数据包。

    • udp:捕获 UDP 数据包。

    • icmp:捕获 ICMP 数据包。

  • 按主机过滤

    • host <IP>:捕获指定主机的所有数据包。

    • src host <IP>:捕获源地址为指定主机的数据包。

    • dst host <IP>:捕获目标地址为指定主机的数据包。

  • 按端口过滤

    • port <port>:捕获指定端口的数据包。

    • src port <port>:捕获源端口为指定端口的数据包。

    • dst port <port>:捕获目标端口为指定端口的数据包。

  • 按网络过滤

    • net <网络>:捕获指定网络的数据包。
示例 1:捕获指定接口的所有 TCP 数据包

可以使用 ifconfig 查看网络接口

例如捕获 eth0 接口的 TCP 数据包:

复制代码
tcpdump -i eth0 tcp
示例 2:捕获指定源或目的 IP 地址的所有数据包

使用 host 关键字可以指定源或目的 IP 地址。例如,要捕获源 IP 地址为 192.168.1.100 的 TCP 报文,可以使用以下命令:

bash 复制代码
tcpdump src host 192.168.1.100 and tcp

要捕获目的 IP 地址为 192.168.1.200 的 TCP 报文,可以使用以下命令:

bash 复制代码
tcpdump dst host 192.168.1.200 and tcp

同时指定源和目的 IP 地址,可以使用 and 关键字连接两个条件:

bash 复制代码
tcpdump src host 192.168.1.100 and dst host 192.168.1.200 and tcp
示例 3:捕获指定端口的数据包

使用 port 关键字可以指定端口号。例如要捕获端口号为 80 的 TCP 报文(通常是 HTTP 请求),可以使用以下命令:

bash 复制代码
tcpdump port 80 and tcp
示例 4:捕获数据包并保存到文件

使用 -w 选项可以将捕获的数据包保存到文件中,以便后续分析。例如:

复制代码
tcpdump -i eth0 -w capture.pcap

这将把捕获到的 HTTP 流量保存到名为 data.pcap 的文件中。 pcap 后缀的文件通常与 PCAP ( Packet Capture )文件格式相关,这是一种用于捕获网络数据包的文件格式

示例 5:从文件中读取数据包并分析
复制代码
tcpdump -r capture.pcap
组合用法

tcpdump 支持使用布尔逻辑(andornot)组合过滤条件,以实现更复杂的捕获需求。

  • 捕获特定主机与特定端口的交互

    复制代码
    tcpdump -i eth0 host 192.168.1.100 and port 80
  • 捕获特定主机之间的所有交互

    复制代码
    tcpdump -i eth0 host 192.168.1.100 and host 192.168.1.200
  • 排除指定主机的数据包

    复制代码
    tcpdump -i eth0 not host 192.168.1.1

除了可以使用 tcpdump 进行对 tcp 进行抓包,还可以使用 windows 下的 wireshark 的网络抓包工具。

相关推荐
有谁看见我的剑了?2 小时前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器
易连EDI—EasyLink2 小时前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
@insist1232 小时前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
SmartRadio3 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
_.Switch3 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
yc_12243 小时前
用 Visual Studio 远程调试 Linux:从零到流畅的完整指南
linux·ide·visual studio
计算机安禾3 小时前
【Linux从入门到精通】第31篇:防火墙漫谈——iptables与firewalld防护指南
linux·运维·php
下一页盛夏花开4 小时前
ubuntu 20中安装QT以后出现红色空心断点
linux·运维·ubuntu
金色光环4 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
数智化精益手记局4 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程