列出tcp连接情况

看到命令不错

#! /bin/bash
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'


结果

ESTABLISHED 516
TIME_WAIT 14
### 在 Linux 中查看 TCP 连接状态的方法 在 Linux 系统中,可以使用多种方法来查看 TCP 连接的状态。以下是一些常用的方法和工具。 #### 使用 `netstat` 命令 `netstat` 是一个网络统计工具,可以显示网络连接、路由表、接口统计、伪装连接和多播成员。通过以下命令可以查看所有 TCP 连接及其状态: ```bash netstat -natp ``` 此命令将列出所有活动的 TCP 连接,包括其状态(例如 ESTABLISHED、LISTEN、TIME_WAIT 等)[^1]。 #### 使用 `ss` 命令 `ss` 是一个更现代的工具,用于显示套接字统计信息。它比 `netstat` 更快,并且提供了更多的功能。以下是查看 TCP 连接状态的命令: ```bash ss -natp ``` 该命令同样会显示所有 TCP 连接及其状态,类似于 `netstat` 的输出[^2]。 #### 使用 `lsof` 命令 `lsof` 是一个列出当前系统打开文件的工具,网络连接也被视为文件。以下命令可以查看特定进程的 TCP 连接状态: ```bash lsof -iTCP -sTCP:ESTABLISHED ``` 此命令将列出所有处于 ESTABLISHED 状态的 TCP 连接。 #### 使用 `getsockopt` 和 `TCP_INFO` 可以通过编程方式使用 `getsockopt` 函数获取 TCP 连接的详细状态。以下是一个示例代码,展示如何检查 TCP 连接是否处于 ESTABLISHED 状态: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> bool tcp_connection_state(int fd) { struct tcp_info info; int len = sizeof(info); if (getsockopt(fd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len) < 0) { perror("getsockopt"); return false; } if (info.tcpi_state == TCP_ESTABLISHED) { return true; } return false; } ``` 上述代码通过调用 `getsockopt` 并设置选项为 `TCP_INFO` 来获取连接的状态。如果 `tcpi_state` 的值为 `TCP_ESTABLISHED`,则表示连接处于已建立状态[^1]。 #### 使用 `epoll` 监控连接状态 当使用 `epoll` 监控 socket 连接时,可以通过以下两种情况判断连接是否断开: - 当触发可读事件,但接收字节数为 0。这种情况下,FIN 数据包可能在 `read()` 调用之前到达被动关闭方。 - 当 `EPOLLRDHUP` 事件唤醒 `epoll_wait()` 函数,表示对端主动断开了连接。需要注意的是,`EPOLLHUP` 通常表示 socket 内部错误,而不是连接主动断开[^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值