socket状态查看

[转载自]http://www.xitongzhijia.net/xtjc/20141230/33791

Linux系统中,ss命令可用于查看系统的socket的状态,而socket作为系统的进程通信机制,了解其状态是很有必要的,下面小编就给大家介绍下Linux如何使用ss命令查看socket的状态。
Linux如何使用ss命令查看socket状态
  ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快。)
  1.命令格式:
  ss [参数]
  ss [参数] [过滤]
  2.命令功能:
  ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。
  3.命令参数:
  -h, –help 帮助信息
  -V, –version 程序版本信息
  -n, –numeric 不解析服务名称
  -r, –resolve 解析主机名
  -a, –all 显示所有套接字(sockets)
  -l, –listening 显示监听状态的套接字(sockets)
  -o, –options 显示计时器信息
  -e, –extended 显示详细的套接字(sockets)信息
  -m, –memory 显示套接字(socket)的内存使用情况
  -p, –processes 显示使用套接字(socket)的进程
  -i, –info 显示 TCP内部信息
  -s, –summary 显示套接字(socket)使用概况
  -4, –ipv4 仅显示IPv4的套接字(sockets)
  -6, –ipv6 仅显示IPv6的套接字(sockets)
  -0, –packet 显示 PACKET 套接字(socket)
  -t, –tcp 仅显示 TCP套接字(sockets)
  -u, –udp 仅显示 UCP套接字(sockets)
  -d, –dccp 仅显示 DCCP套接字(sockets)
  -w, –raw 仅显示 RAW套接字(sockets)
  -x, –unix 仅显示 Unix套接字(sockets)
  -f, –family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
  -A, –query=QUERY, –socket=QUERY
  QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
  -D, –diag=FILE 将原始TCP套接字(sockets)信息转储到文件
  -F, –filter=FILE 从文件中都去过滤器信息
  FILTER := [ state TCP-STATE ] [ EXPRESSION ]
  4.使用实例:
  实例1:显示TCP连接
  命令:ss -t -a
  输出:
  代码如下:
  [root@localhost ~]# ss -t -a
  State Recv-Q Send-Q Local Address:Port Peer Address:Port
  LISTEN 0 0 127.0.0.1:smux
  LISTEN 0 0 :3690 :*
  LISTEN 0 0 :ssh :*
  ESTAB 0 0 192.168.120.204:ssh 10.2.0.68:49368
  [root@localhost ~]#
  实例2:显示 Sockets 摘要
  命令:ss -s
  输出:

在 C 语言中,我们可以使用 `getsockopt` 函数来获取一个套接字的状态信息。具体来说,我们可以使用 `getsockopt` 函数获取以下信息: 1. 获取套接字的错误状态:可以使用 `getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len)` 函数,其中 `sockfd` 是待查询的套接字描述符,`error` 是一个整型变量,用于存储错误码,`len` 是 `error` 变量的长度。 2. 获取套接字的接收缓冲区大小:可以使用 `getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &recvbuf, &len)` 函数,其中 `sockfd` 是待查询的套接字描述符,`recvbuf` 是一个整型变量,用于存储接收缓冲区大小,`len` 是 `recvbuf` 变量的长度。 3. 获取套接字的发送缓冲区大小:可以使用 `getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuf, &len)` 函数,其中 `sockfd` 是待查询的套接字描述符,`sendbuf` 是一个整型变量,用于存储发送缓冲区大小,`len` 是 `sendbuf` 变量的长度。 4. 获取套接字的本地地址信息:可以使用 `getsockname(sockfd, &addr, &addrlen)` 函数,其中 `sockfd` 是待查询的套接字描述符,`addr` 是一个指向 `sockaddr` 结构体的指针,用于存储本地地址信息,`addrlen` 是 `addr` 变量的长度。 5. 获取套接字的远程地址信息:可以使用 `getpeername(sockfd, &addr, &addrlen)` 函数,其中 `sockfd` 是待查询的套接字描述符,`addr` 是一个指向 `sockaddr` 结构体的指针,用于存储远程地址信息,`addrlen` 是 `addr` 变量的长度。 以上是常用的一些查询套接字状态的方法,你可以根据自己的具体需求来选择使用哪个函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值