netstat命令和ss命令

详解netstat命令和ss命令

netstat命令

简介(man文档翻译结果)

netstat命令用于显示各种网络相关信息,如 网络连接(network connections),路由表(routing tables),接口状态(Interface Statistics),伪装连接(masquerade connections),多播成员(multicast memberships)

命令用法

netstat [options]

常见参数

-a (all)显示所有选项,默认不显示LISTEN相关

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-n 拒绝显示别名,能显示数字的全部转化成数字。

-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名

-r 显示路由信息,路由表

-e 显示扩展信息,例如uid等

-s 按各个协议进行统计

-c 每隔一个固定时间,执行该netstat命令。

注意:LISTEN和LISTENING的状态只有用-a或者-l才能看到

netstat命令输出结果分析

netstat命令的输出结果分为两部分:

第一:Active Internet connections,称为有源TCP连接,其中”Recv-Q”和”Send-Q”指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

第二:Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

 实用命令实例

列出所有端口 (包括监听和未监听的)

列出所有端口 netstat -a

#netstat -a | more

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State

tcp        0      0 localhost:30037         *:*                     LISTEN

udp        0      0 *:bootpc                *:*

Active UNIX domain sockets (servers and established)

Proto RefCnt Flags       Type       State         I-Node   Path

unix  2      [ ACC ]     STREAM     LISTENING     6135     /tmp/.X11-unix/X0

unix  2      [ ACC ]     STREAM     LISTENING     5140     /var/run/acpid.socket

  1. 列出所有 tcp 端口 netstat -at# netstat -at

    Active Internet connections (servers and established)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State

    tcp        0      0 localhost:30037         *:*                     LISTEN

    tcp        0      0 localhost:ipp           *:*                     LISTEN

    tcp        0      0 *:smtp                  *:*                     LISTEN

    tcp6       0      0 localhost:ipp           [::]:*                  LISTEN

  2. 列出所有 udp 端口 netstat -au# netstat -au

    Active Internet connections (servers and established)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State

    udp        0      0 *:bootpc                *:*

    udp        0      0 *:49119                 *:*

    udp        0      0 *:mdns                  *:*

    列出所有处于监听状态的 Sockets

  3. 只显示监听端口 netstat -l

    # netstat -l

    Active Internet connections (only servers)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State

    tcp        0      0 localhost:ipp           *:*                     LISTEN

    tcp6       0      0 localhost:ipp           [::]:*                  LISTEN

    udp        0      0 *:49119                 *:*

  4.  只列出所有监听 tcp 端口 netstat -lt# netstat -lt

    Active Internet connections (only servers)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State

    tcp        0      0 localhost:30037         *:*                     LISTEN

    tcp        0      0 *:smtp                  *:*                     LISTEN

    tcp6       0      0 localhost:ipp           [::]:*                  LISTEN

  5. 只列出所有监听 udp 端口 netstat -lu# netstat -lu

    Active Internet connections (only servers)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State

    udp        0      0 *:49119                 *:*

    udp        0      0 *:mdns                  *:*

  6. 只列出所有监听 UNIX 端口 netstat -lx

    # netstat -lx

    Active UNIX domain sockets (only servers)

    Proto RefCnt Flags       Type       State         I-Node   Path

    unix  2      [ ACC ]     STREAM     LISTENING     6294     private/maildrop

    unix  2      [ ACC ]     STREAM     LISTENING     6203     public/cleanup

    unix  2      [ ACC ]     STREAM     LISTENING     6302     private/ifmail

    unix  2      [ ACC ]     STREAM     LISTENING     6306     private/bsmtp

    显示每个协议的统计信息

  7. 显示所有端口的统计信息 netstat -s# netstat -s

    Ip:

    11150 total packets received

    1 with invalid addresses

    0 forwarded

    0 incoming packets discarded

    11149 incoming packets delivered

    11635 requests sent out

    Icmp:

    0 ICMP messages received

    0 input ICMP message failed.

    Tcp:

    582 active connections openings

    2 failed connection attempts

    25 connection resets received

    Udp:

    1183 packets received

    4 packets to unknown port received.

    …..

  8. 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

在 netstat 输出中显示 PID 和进程名称 netstat -p

# netstat -pt

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        1      0 ramesh-laptop.loc:47212 192.168.185.75:www        CLOSE_WAIT  2109/firefox

tcp        0      0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox

在 netstat 输出中不显示主机,端口和用户名 (host, port or user)当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。

# netstat -an

如果只是不想让这三个名称中的一个被显示,使用以下命令

# netsat -a –numeric-ports

# netsat -a –numeric-hosts

# netsat -a –numeric-users

 持续输出 netstat 信息

netstat 将每隔一秒输出网络信息。

# netstat -c

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State

tcp        0      0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED

tcp        1      1 ramesh-laptop.loc:52564 101.11.169.230:www      CLOSING

tcp        0      0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED

tcp        1      1 ramesh-laptop.loc:42367 101.101.34.101:www      CLOSING

显示系统不支持的地址族 (Address Families)

netstat –verbose

在输出的末尾,会有如下的信息

netstat: no support for `AF IPX’ on this system.

netstat: no support for `AF AX25′ on this system.

netstat: no support for `AF X25′ on this system.

netstat: no support for `AF NETROM’ on this system.

显示核心路由信息 netstat -r

# netstat -r

Kernel IP routing table

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface

192.168.1.0     *               255.255.255.0   U         0 0          0 eth2

link-local      *               255.255.0.0     U         0 0          0 eth2

default         192.168.1.1     0.0.0.0         UG        0 0          0 eth2

注意: 使用 netstat -rn 显示数字格式,不查询主机名称。

找出程序运行的端口,并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

# netstat -ap | grep ssh

tcp        1      0 dev-db:ssh           101.174.100.22:39213        CLOSE_WAIT  –

tcp        1      0 dev-db:ssh           101.174.100.22:57643        CLOSE_WAIT  –

找出运行在指定端口的进程

# netstat -an | grep ‘:80’

显示网络接口列表

# netstat -i

Kernel Interface table

Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg

eth0       1500 0         0      0      0 0             0      0      0      0 BMU

eth2       1500 0     26196      0      0 0         26883      6      0      0 BMRU

lo        16436 0         4      0      0 0             4      0      0      0 LRU

显示详细信息,像是 ifconfig 使用 netstat -ie

# netstat -ie

Kernel Interface table

eth0      Link encap:Ethernet  HWaddr 00:10:40:11:11:11

UP BROADCAST MULTICAST  MTU:1500  Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Memory:f6ae0000-f6b00000

 IP和TCP分析

查看连接某服务端口最多的的IP地址

netstat -nat | grep “192.168.1.15:22” |awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -20

TCP各种状态列表

netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn

分析access.log获得访问前10位的ip地址

awk ‘{print $1}’ access.log |sort|uniq -c|sort -nr|head -10

ss命令

ss介绍

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 要快。)

  ss用法

1.命令格式:

ss [参数]

ss [参数] [过滤]

2.命令功能:

ss(socket statistics 缩写),该命令可以用来获取  socket 的统计信息,此命令输出的结果类似于 netstat 输出的内容,但它能显示更多更详细的 TCP 连接状态的信息,且比 netstat 更快速高效。它使用了 TCP 协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss 命令快捷高效。在没有 tcp_diag,ss 也可以正常运行。

3.命令参数:

-n  –numeric不解析服务名称

-r  –resolve 解析主机名

-l  –listening 显示监听状态的套接字(sockets)

-a  –all显示所有套接字

-o  –options  显示计时器信息

-e  –extended  显示详细的套接字(socket)的内存使用情况

-p  –processed  显示使用套接字的进程

-i  –info   显示 tcp 内部信息

-s  –summary  显示套接字(socket)使用概况

-4  –IPv4  仅显示 IPv4的套接字

-6

-0(零)  –packet  显示 PACKET 套接字

-t  –tcp  仅显示 TCP 套接字

-u  –udp  仅显示  UDP套接字

-d  –dccp  仅显示 DCCP 套接字

-w  –raw  仅显示  RAW 套接字

-x  –Unix  仅显示 Unix 套接字

-f  –family=FAMILY  显示 FAMILY 类型的套接字,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 套接字信息转储到文件

-F  –filter=FILE  从文件中都去过滤信息

FLITER    :=  [ state  TCP-STATE ] [ EXPRESSION ]

4使用实例:

实例1:显示TCP连接

命令:ss  -t    -a

实例2:显示 sockets  摘要

命令:  ss   -s

列出当前的established、 closed、 orphaned  and  waiting  TCP sockets

实例3:

ss  -l

实例4:查看进程使用的socket

命令:

ss  -pl

实例5:找出打开套接字/端口应用程序

命令:

ss  -lp  |  grep  3306

实例6:显示所有UDP  sockets

命令:

ss   -u  -a

实例7:显示所有状态为 established  的 SMTP 连接

命令:

ss  -o  state  established  `(  dport  =: smtp  or  sport  = : smtp )`

实例8:显示所有状态为 Established 的 HTTP 连接

命令:

ss  -o  state  established  `(dport  =  :http  or  sport  =  :http)`

实例9:列举出处于  FIN-WAIT-1 状态的源端口为   80 或者  443, 目标网络为  192.168.1 /24 的所有 tcp 套接字

命令:

ss  -o  state  fin-wait-1  `( sport  =  :http  or  sport  =  :https)`  dst  192.168.1/24

实例10:用TCP 状态过滤 sockets:

命令:

ss  -4  state  FILTER-NAME-HERE

ss  -6 state  FILTER-NAME-HERE

FILTER-NAME-HERE 可以代表以下任何一个

established

syn-sent

syn-recv

fin-wait-1

fin-wait-2

time-wait

closed

close-wait

last-ack

listen

closing

all  所有以上状态

connected   除了listen and closed 的所有状态

synchronized   所有已连接的状态除了  syn-sent

bucket  显示状态为 maintained  as  minisockets, 如 time-wait 和 syn-recv.

big  和bucket 相反

实例11:匹配远程地址和端口号

命令:

ss  dst  ADDERSS_PATTERN

ss  dst  192.168.1.1

ss dst 192.168.1.1:8080

实例12:匹配本地地址和端口号

命令:

ss  src  ADDRESS_PATTERN

ss  src 192.168.1.1

ss  src   192.168.1.1:80

实例13:将本地或者远程端口和一个数比较

命令:

ss  dport  OP  PORT  远程端口和一个数比较; destination  port

ss  sport  OP  PORT  本地端口和一个数比较; source   port

OP–OPTION:

<=  or  le,  >= or ge,  ==  or eq,

!=  or  ne  <  or gt    >   or   lt

实例14: ss  和  netstat 效率对比

命令:

time  netstat  -at

time  ss

总结:用 time 命令分别获取通过netstat 和 ss 命令获取程序占用资源所使用的时间。在服务器连接数比较多的时候,netstat 的效率完全没法和 ss 比。

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90732

(0)
ChaogGeChaogGe
上一篇 2018-01-01
下一篇 2018-01-01

相关推荐

  • samba服务实现:linux和windows之间共享

    1,首先在linux(centos6,7)安装好samba程序:     yum -y install samba   samba-common        主配置文件:/etc/samba/smb.conf   ~]# groupadd share_gro…

    2017-03-05
  • 搭建CA服务器为Client签发证书

    搭建CA服务器为Client签发证书   此次实验步骤如下: 一、搭建CA服务器 1)  在/etc/pki/CA下创建index.txt文件,此文件是为Client签发证书的索引文件; 2)  在/etc/pki/CA下创建serial文件,此文件记录为Client签发证书的编号; 3)  生成CA服务器私钥; 4)…

    2017-05-21
  • Linux中用户管理基本命令和用法

    Linux操作系统用户管理: 特点:多任务,多用户操作系统(Multi-tasks,Multi-Users) Linux中用户: 用户组成: 用户ID:每个用户都有一个唯一识别码称为用户ID。        密码:认证手段 用户分类:管理用户 管理员的用户ID为0       普通用户 U…

    Linux干货 2016-08-05
  • 05linux用户和组的权限总结

    1、文件的权限分类 文件的权限对象分三类:属主(u)、属组(g)、其他(o),每个对象都有rwx,读写执行三类权限。 对于文件 r:可查看文件内容 w:可修改其类容 x:可把此文件提请内核启动为一个进程 对于目录 r:可使用ls查看此目录中文件列表 w:可在此目录中创建和删除文件 x:可使用ls查看目录中文件列表,可以cd进入此目录 X:只给目录x权限,不给…

    Linux干货 2016-11-27
  • bash脚本之函数及循环特殊用法

    一,概述 while的循环特殊用法(遍历文件的每一行)     while read line;do         循环体        &nbsp…

    Linux干货 2016-08-29
  • HAproxy实战

    HAproxy实验一 1、实验要求: (1) 动静分离discuzx,动静都要基于负载均衡实现; (2) 进一步测试在haproxy和后端主机之间添加varnish缓存(见实验二步骤); (3) 给出拓扑设计; (4) haproxy的设定要求: (a) 启动stats; (b) 自定义403、502和503的错误页; (c) 各组后端主机选择合适的调度方法…

    Linux干货 2016-11-15