Linux怎么使用ssftp 命令 socket查看系统的socket状态

帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:1&分页:铁卫发信人: ironwei (铁卫), 信区: KernelTech
标&&题: Re: Linux系统中如何查看socket是哪个用户打开的?
发信站: 水木社区 (Sun Mar 19 22:53:36 2017), 站内 && 通过Ip地址可以吗?
-- && ※ 来源:·水木社区 ·[FROM: 123.123.64.*]
文章数:1&分页:欢迎访问蓝队云一站式平台!
关注蓝队云
您的位置:
Linux网络状态工具ss命令使用详解
发布时间:&&&&&浏览量:80人
上一篇:下一篇:
最新发布的内容
大家感兴趣的内容
服务时间:9:00 - 24:00
选择对应客服在线沟通:
您可能遇到了下面的问题:
400专线7x24小时全时响应
技术在线支持
服务时间:全天24小时
选择对应技术在线沟通:
您可能遇到了下面的问题:
400专线7x24小时全时响应
网站ICP备案咨询
服务时间:9:00 - 17:30
选择对应客服在线沟通:
您可能遇到了下面的问题:
400专线7x24小时全时响应帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:1&分页:I wanna be发信人: iwannabe (I wanna be), 信区: KernelTech
标&&题: Re: Linux系统中如何查看socket是哪个用户打开的?
发信站: 水木社区 (Mon Mar 20 10:17:13 2017), 转信 && netstat -tanp|grep :22
可以看sshd是哪个用户链接的
【 在 johnfader (hello) 的大作中提到: 】
: 有一台多用户(who结果有10人)同时通过ssh登陆操作的Linux Server,&&
: 某用户A敲了一个指令"netstat -n"发现有20条对外的tcp连接。
: 请问用户A如何查看每条tcp sockect连接分别是哪个用户打开的?ss好像实现不了这个
: ...................
&& -- && ※ 来源:·水木社区 newsmth.net·[FROM: 211.99.222.*]
文章数:1&分页:用来显示处于活动状态的套接字信息。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也可以正常运行,只是效率会变得稍慢。
-h:显示帮助信息;
-V:显示指令版本信息;
-n:不解析服务名称,以数字方式显示;
-a:显示所有的套接字;
-l:显示处于监听状态的套接字;
-o:显示计时器信息;
-m:显示套接字的内存使用情况;
-p:显示使用套接字的进程信息;
-i:显示内部的TCP信息;
-4:只显示ipv4的套接字;
-6:只显示ipv6的套接字;
-t:只显示tcp套接字;
-u:只显示udp套接字;
-d:只显示DCCP套接字;
-w:仅显示RAW套接字;
-x:仅显示UNIX域套接字。
显示TCP连接
[root@localhost ~]# ss -t -a
Recv-Q Send-Q
Local Address:Port
Peer Address:Port
127.0.0.1:smtp
112.124.15.130:42071
42.156.166.25:http
112.124.15.130:ssh
121.229.196.235:33398
显示 Sockets 摘要
[root@localhost ~]# ss -s
Total: 172 (kernel 189)
10 (estab 2, closed 4, orphaned 0, synrecv 0, timewait 0/0), ports 5
Transport Total
列出当前的established, closed, orphaned and waiting TCP sockets
查看进程使用的socket
[root@localhost ~]# ss -pl
Recv-Q Send-Q
Local Address:Port
Peer Address:Port
users:(("sshd",1292,4))
users:(("sshd",1292,3))
127.0.0.1:ipp
users:(("cupsd",1165,7))
users:(("cupsd",1165,6))
users:(("rpc.statd",1104,9))
users:(("rpc.statd",1104,11))
users:(("mysqld",1528,17))
users:(("redis-server",1672,5))
users:(("redis-server",1672,4))
users:(("rpcbind",1084,11))
users:(("rpcbind",1084,8))
users:(("nginx",1685,13),("nginx",3698,13),("nginx",3699,13))
找出打开套接字/端口应用程序
[root@localhost ~]# ss -pl | grep 3306
users:(("mysqld",1718,10))
&参考linux命令网,同时可以看运维生存时间的解释
关于Recv-Q和Send-Q状态
在网上一搜大部分的说法都是这样的:
recv-Q 表示网络接收队列表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
send-Q 表示网路发送队列对方没有收到的数据或者说没有Ack的,还是本地缓冲区.如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。
对于上边的说法不能说错,但最起码不完全正确,我感觉下边的才是正解,来自:
当 client 通过 connect 向 server 发出 SYN 包时,client 会维护一个 socket 等待队列,而 server 会维护一个 SYN 队列
此时进入半链接的状态,如果 socket 等待队列满了,server 则会丢弃,而 client 也会由此返回 connection time out;只要是 client 没有收到 SYN+ACK,3s 之后,client 会再次发送,如果依然没有收到,9s 之后会继续发送
半连接 syn 队列的长度为 max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog)& 决定
当 server 收到 client 的 SYN 包后,会返回 SYN, ACK 的包加以确认,client 的 TCP 协议栈会唤醒 socket 等待队列,发出 connect 调用
client 返回 ACK 的包后,server 会进入一个新的叫 accept 的队列,该队列的长度为 min(backlog, somaxconn),默认情况下,somaxconn 的值为 128,表示最多有 129 的 ESTAB 的连接等待 accept(),而 backlog 的值则由&&中的第二个参数指定,listen 里面的 backlog 的含义请看这里。需要注意的是,。
当 accept 队列满了之后,即使 client 继续向 server 发送 ACK 的包,也会不被相应,此时,server 通过 /proc/sys/net/ipv4/tcp_abort_on_overflow 来决定如何返回,0 表示直接丢丢弃该 ACK,1 表示发送 RST 通知 client;相应的,client 则会分别返回 read timeout 或者 connection reset by peer。上面说的只是些理论,如果服务器不及时的调用 accept(),当 queue 满了之后,服务器并不会按照理论所述,不再对 SYN 进行应答,返回 ETIMEDOUT。根据文档的描述,实际情况并非如此,服务器会随机的忽略收到的 SYN,建立起来的连接数可以无限的增加,只不过客户端会遇到延时以及超时的情况。
可以看到,整个 TCP stack 有如下的两个 queue:1. 一个是 half open(syn queue) queue(max(tcp_max_syn_backlog, 64)),用来保存 SYN_SENT 以及 SYN_RECV 的信息。2. 另外一个是 accept queue(min(somaxconn, backlog)),保存 ESTAB 的状态,但是调用 accept()。
注意,,使用 ss 获取到的 Recv-Q/Send-Q 在 LISTEN 状态以及非 LISTEN 状态所表达的含义是不同的。从&中可以看到二者的区别:
LISTEN 状态: Recv-Q 表示的当前等待服务端调用 accept 完成三次握手的 listen backlog 数值,也就是说,当客户端通过 connect() 去连接正在 listen() 的服务端时,这些连接会一直处于这个 queue 里面直到被服务端 accept();Send-Q 表示的则是最大的 listen backlog 数值,这就就是上面提到的 min(backlog, somaxconn) 的值。其余状态: 非 LISTEN 状态之前理解的没有问题。Recv-Q 表示 receive queue 中的 bytes 数量;Send-Q 表示 send queue 中的 bytes 数值。
阅读(...) 评论()在Linux中的使用 ss 命令检查套接字/网络连接_Linux教程_Linux公社-Linux系统门户网站
你好,游客
在Linux中的使用 ss 命令检查套接字/网络连接
来源:Linux中国&
作者:Linux
ss是iproute2包的一部分(控制TCP/IP网络和流量的工具)。iproute2的目标是替代先前用于配置网络接口、路由表和管理ARP表的标准Unix网络工具套装(通常称之为&net-tools&)。ss工具用于导出套接字统计,它可以显示与netstat类似的信息,且可以显示更多的TCP和状态信息。因为它直接从内核空间获取信息,所以会更快。ss的操作和netstat很像,所以这让它可以很容易就可以取代netstat。
使用和常见选项
ss和netstat很像,默认它会显示已经建立连接的开放的非监听TCP套接字列表。并且你可以用下面的选项过滤输出:
-n - 不要尝试解析服务名。
-r - 尝试解析数字的地址/端口。
-a - 显示所有套接字。
-l - 显示监听套接字。
-p - 显示使用该套接字的进程。
-s - 打印统计数据
-t - 只显示TCP套接字。
-u - 只显示UDP套接字。
-d - 只显示DCCP套接字
-w - 只显示RAW套接字。
-x - 只显示Unix域套接字
-f FAMILY - 显示FAMILY套接字的类型。目前支持下面这些族:unix、inet、inet6、link、netlink。
-A QUERY - 指定要列出的套接字列表,通过逗号分隔。可以识别下面的标识符:all、inet、tcp、udp、raw、unix、packet、netlink、unixdgram、unixstream、packetraw、packetdgram。
-o STATUS - 列出指定状态的套接字
ss 命令示例
1. 显示所有的的TCP端口和使用它们的进程:
# ss -tnap
2. 你可以使用-4 标志来显示IPv4链接,-6标志来显示IPv6链接,比如:
# ss -tnap6
3. 跟上面的行为一样,你只需用u代替t就会显示所有开放的UDP端口。
# ss -unap
4. 你可以使用-s标志来打印各种有用的统计数据:
5. 你可以使用-o标志来检查所有不同状态下的链接,比如显示所有已经建立的连接。
# ss -tn -o state established -p
本文永久更新链接地址:
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 ftp 命令 socket 的文章

 

随机推荐