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)
上一篇 2018-01-01 18:34
下一篇 2018-01-01 20:27

相关推荐

  • 马哥教育网络班22期+第1周课程练习

    一、描述计算机的组成及其功能。 组成:CPU (运算器+控制器),存诸器(内存与硬盘),输入设备,输出设备。 运算器:对数据进行加工处理的部件(包括算述运算与逻辑运算)。 控制器:负责从存储器取出指令,按指令的要求发出控制信号,使各部件协调的,一步步的完成各种操作。 存储器:计算机记忆或暂存数据的部件 输入设备:人机接口,负责输入信息(数据与指令)转成计算机…

    Linux干货 2016-08-15
  • 国际标准OSI七层模型和事实标准TCP/IP四层模型

    我们知道,标准分为三种:国际标准、国家标准和事实标准。那我们学习的两个重要模型:OSI和TCP/IP模型分别属于国际标准和事实标准,接下来我们来总结一下两种模型的分层及功能还有异同: 一:国际标准OSI模型 OSI:(Open System Interconnect) 开放系统互连,总共分为七层,从下到上顺序为:物理层(physical)、数据链路层(dat…

    2017-09-02
  • rpm包管理与yum简要用法

    linux程序包管理 程序包:源代码 –> 目标二进制格式(二进制程序、库文件、配置文件、帮助文件)–> 组织成一个或有限的几个包文件 程序包管理器:        debian –> dpkg   以“.deb”结尾 &nb…

    Linux干货 2016-08-22
  • Recycled和Recycler的故事

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jeffyyko.blog.51cto.com/28563/156012      首先说明一下,这里不是英语课堂,本文也不是来辨析Recycled和Recycler这两个单词的含义。Recy…

    Linux干货 2015-03-25
  • Linux Basics–part6

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; tmp]# cp /etc/rc.d/init.d/rc.sysinit /tmp/rc.sysinit tmp]# vim rc.sysinit : 进入末行模式 %s@^[[:space:]]\+@#@g 2…

    Linux干货 2017-08-24
  • 用户、组及其管理

    用户和组管理    Linux是一个多用户、多任务的操作系统。多用户、多任务就是可以在系统上建立多个用户,多个用户可以在同一时间内登录同一台主机的系统执行不同的任务,而互不影响。例如某台linux服务器上有4个用户,分别是root、www、ftp和mysql,在同一时间内root用户可能在管理维护系统,www用户可能在修改自己的程序和操作…

    Linux干货 2016-08-04