linux netstat 命令 (转载)

9426阅读 0评论2011-09-12 caojiangfeng
分类:系统运维

关注 Linux 的系统状态,主要从两个角度出发,一个角度是系统正在运行什么服务;另外一个就是
有什么连接或服务可用。使用 ps 命令可以查看处于活跃状态的服务;使用 netstat 命令则可以显示所有可用连接和服务,以及它们的状态。netstat 还可以显示 ps 无法显示的、从 inetd 或 xinetd 中运行的服务,比如 telnet 等。
用 netstat 查看所有服务
以下命令可以显示所有的服务:
$ netstat -a
激活Internet连接 (服务器和已建立连接的)
Proto Recv-Q Send-Q Local Address       Foreign Address         State  
tcp        0      0           *:telnet                 *:*                            LISTEN
tcp        0      0           *:smtp                  *:*                            LISTEN
tcp        0      0 192.168.1.5:32851 nest.anthill.echid:ircd ESTABLISHED
tcp        0      0           *:nfs                      *:*                           LISTEN    
tcp        0      0           *:60966                 *:*                           LISTEN    
tcp        0      0           *:sunrpc                 *:*                           LISTEN    
tcp        0      0           *:52694                  *:*                          LISTEN    
tcp        0      0          localhost:ipp            *:*                          LISTEN    
tcp        0      0          localhost:smtp          *:*                         LISTEN    
tcp        0      0          *:56445                   *:*                         LISTEN    
udp       0      0          *:ipp                        *:*
Active Unix domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
Unix 2 [ ACC ] STREAM LISTENING 1065 /tmp/ksocket-carla/klaunchertDCh2b.slave-socket

上述显示中,"Proto"是 Protocol 的简称,它可以是 TCP 或 UDP。"Recv-Q"和"Send-Q"指
的是接收队列和发送队列,这些数字一般都应该是 0,如果不是,则表示软件包正在队列中堆积。这种情
况只能在非常短的时间内存在,比如在 KMail 中单击检查邮件按钮时,有如下显示是正常现象:
tcp 0 593 192.168.1.5:34321 venus.euao.com:smtp ESTABLISHED
   如果接收队列持续处于阻塞状态,那么很有可能受到了拒绝式服务的攻击。如果发送队列不能被快速清除,则可能是因为有一个应用程序不能将所要发送的东西传送完。
"Local Address" 指本机的 IP 和端口号。"Foreign Address"指所要连接的主机名称和服务。
"State"指现在连接的状态。三种常见的 TCP 状态如下所示:
a) LISTEN 等待接收连接;
b) ESTABLISHED 一个处于活跃状态的连接;
c) TIME_WAIT 一个刚被终止的连接。它只持续 1 至 2 分钟,然后就会变成 LISTEN 状态。
由于 UDP 是无状态的,所以其 State 栏总是空白。
持续获取有用信息
    使用"netstat -a"命令,显示结果可能会有数百行。其实,在这些结果中可以忽略所有"Active
Unix domain sockets"以后的内容。因为这些内容是本地内部进程之间的通信,而不是网络连接。使用以下命令可以避免显示无用信息:
$ netstat --inet -a
   " netstat --inet -a" 命 令 的 显 示 结 果 将 只 有 网 络 连 接 , 包 括 所 有 正 处 在 " LISTEN" 状态和"ESTABLISHED"状态的。
需要特别注意的是,对于普通用户而言,一般不需要使用 telnet 或 SMTP 服务。因此需要将其关闭,以提高系统安全性;并且要重新配置启动文件,以保证它们不会在下次系统启动时自动重新启动。
要想持续不断地查看随时都在更改的网络信息,可以使用 netstat 命令的"-c"参数,并且将结果存
入文件中:
$ netstat --inet -a -c > netstat.txt
这时,查看 netstat.txt 文件即可检查邮件服务、Web 服务和 telnet 服务等的状态变化。
检查网卡使用 netstat 命令的"-i"参数还可以帮助检查网卡。该命令的显示结果如下所示:
Kernel Interface table
eth0   1500   0      86192         0         0          0            60005   0         0         0          BMRU
lo       16436 0      434             0         0          0            434       0         0         0          LRU
在"RX-OK (Received OK)"和"TX-OK (Transmitted OK)"栏应该看到很多数字,而其它地方的
数字应该非常小。如果在"RX-ERR"或"TX-ERR"栏看到很多数据,则很有可能是网卡或网线出现了
问题。

==================================================

可以是用命令:netstat -lnp来察看系统当前监听的端口。其中l选项表示显示正在被监听(listen)的端口;n选项表示直接显示端口数字而不是通过察看/etc/service来转换为端口名;p选项表示列出监听的程序。例如:
netsat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 *:mysql                 *:*                     LISTEN
tcp        0      0 *:netbios-ssn           *:*                     LISTEN
tcp        0      0 *:swat                  *:*                     LISTEN
tcp        0      0 *:www                   *:*                     LISTEN
tcp        0      0 *:linuxconf             *:*                     LISTEN
tcp        0      0 *:finger                *:*                     LISTEN
tcp        0      0 *:login                 *:*                     LISTEN
tcp        0      0 *:shell                 *:*                     LISTEN
tcp        0      0 *:telnet                *:*                     LISTEN
tcp        0      0 *:ftp                   *:*                     LISTEN
udp        0      0 radiusd.301:netbios-dgm *:*
udp        0      0 radiusd.301h:netbios-ns *:*
udp        0      0 *:netbios-dgm           *:*
udp        0      0 *:netbios-ns            *:*
udp        0      0 *:ntalk                 *:*
udp        0      0 *:talk                  *:*
raw        0      0 *:icmp                  *:*                     7
raw        0      0 *:tcp                   *:*                     7
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix 0      [ ACC ]     STREAM     LISTENING     40250 /tmp/mysql.sock

netstat -ln
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:901             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:98              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:79              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:513             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN
udp        0      0 192.168.2.33:138        0.0.0.0:*
udp        0      0 192.168.2.33:137        0.0.0.0:*
udp        0      0 0.0.0.0:138             0.0.0.0:*
udp        0      0 0.0.0.0:137             0.0.0.0:*
udp        0      0 0.0.0.0:518             0.0.0.0:*
udp        0      0 0.0.0.0:517             0.0.0.0:*
raw        0      0 0.0.0.0:1               0.0.0.0:*               7
raw        0      0 0.0.0.0:6               0.0.0.0:*               7
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix 0      [ ACC ]     STREAM     LISTENING     40250 /tmp/mysql.sock

================

Netstat命令举例
  请输入下面的命令:
  # netstat -tulpn
  或者是
  # netstat -npl
  请看输出结果::
  Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  tcp 0 0 0.0.0.0:6881 0.0.0.0:* LISTEN 6908/python
  tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5562/cupsd
  tcp 0 0 127.0.0.1:3128 0.0.0.0:* LISTEN 6278/(squid)
  tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 5854/exim4
  udp 0 0 0.0.0.0:32769 0.0.0.0:* 6278/(squid)
  udp 0 0 0.0.0.0:3130 0.0.0.0:* 6278/(squid)
  udp 0 0 0.0.0.0:68 0.0.0.0:* 4583/dhclient3
  udp 0 0 0.0.0.0:6881 0.0.0.0:* 6908/python
  请注意,最后一栏给出了关于程序名称和端口的信息。在这里,我们解释一下各参数的含义:
  -t : 指明显示TCP端口
  -u : 指明显示UDP端口
  -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(

)与资料的程序)
  -p : 显示

标识符和程序名称,每一个套接字/端口都属于一个程序。
  -n : 不进行DNS轮询(可以加速操作)

 

==========================================================

linux netstat 命令详解
功能说明:Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

  语  法:netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

  补充说明:利用netstat指令可让你得知整个Linux系统的网络情况。

  参  数:

  -a或–all 显示所有连线中的Socket。

  -A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。

  -c或–continuous 持续列出网络状态。

  -C或–cache 显示路由器配置的快取信息。

  -e或–extend 显示网络其他相关信息。

  -F或–fib 显示FIB。

  -g或–groups 显示多重广播功能群组组员名单。

  -h或–help 在线帮助。

  -i或–interfaces 显示网络界面信息表单。

  -l或–listening 显示监控中的服务器的Socket。

  -M或–masquerade 显示伪装的网络连线。

  -n或–numeric 直接使用IP地址,而不通过域名服务器。

  -N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。

  -o或–timers 显示计时器。

  -p或–programs 显示正在使用Socket的程序识别码和程序名称。

  -r或–route 显示Routing Table。

  -s或–statistice 显示网络工作信息统计表。

  -t或–tcp 显示TCP传输协议的连线状况。

  -u或–udp 显示UDP传输协议的连线状况。

  -v或–verbose 显示指令执行过程。

  -V或–version 显示版本信息。

  -w或–raw 显示RAW传输协议的连线状况。

  -x或–unix 此参数的效果和指定”-A unix”参数相同。

  –ip或–inet 此参数的效果和指定”-A inet”参数相同

  netstat 的一些常用选项

  ·netstat –s

  本选项能够按照各个协议分别显示其统计数据。如果我们的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么我们就可以用本选项来查看一下所显示的信息。我们需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。

  ·netstat –e

  本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。

  ·netstat –r

  本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。

  ·netstat –a

  本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请(LISTENING)的那些连接。

  ·netstat –n

  显示所有已建立的有效连接
 
----------------------------------------------------------------------------------------------------------------------------------------
 

LISTEN:侦听来自远方的TCP端口的连接请求

SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)

SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)

ESTABLISHED:代表一个打开的连接

FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:从远程TCP等待连接中断请求

CLOSE-WAIT:等待从本地用户发来的连接中断请求

CLOSING:等待远程TCP对连接中断的确认

LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)

TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:没有任何连接状态


1. 列出所有端口 (包括监听与非监听端口)
使用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
使用netstat -at列出所有tcp端口
# 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
使用netstat -au列出所有UDP端口
# 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                  *:*
2. 列出监听中的Sockets使用netstat -l列出监听中的ports
# 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                 *:*
使用netstat -lt列出监听中的TCP ports
# 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
使用netstat -lu列出监听中的UDP ports
# 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                  *:*
使用netstat -lx列出监听中的UNIX ports
# 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
3. 显示所有控制协议的详情使用
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.
.....
使用 netstat -st / -su列出所有TCP/ UDP的端口详情
# netstat -st

# netstat -su4.  使用netstat -p,在输出中显示PID和程序名

netstat -p 可以和其他netstat 选项组合使用. 它将在netstat输出中显示 “PID/Program Name” . 对于在调试中需要确认哪个程序使用特定的端口,这将非常有用。
# 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

5. 在netstat输出中不显示主机名、端口号和用户名

当你不想在netstat输出中不显示主机名、端口号和用户名时,你可以使用netstat -n 选项. 它将显示一个numbers来代替主机名、端口和用户名.当然他也会加快输出信息。
# netstat -an

如果你只是不想显示主机名、端口号和用户名之间的一个,你可以使用如下命令:
# netsat -a --numeric-ports

# netsat -a --numeric-hosts

# netsat -a --numeric-users6. 周期性输出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
^C7. 找出你的系统所不支持的协议族(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.8. 使用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 以数字格式显示路由信息而不显示主机名
9. 找出程序运行使用的哪个
Port# netstat -ap | grep ssh
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
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  -

Find out which process is using a particular port:
# netstat -an | grep ':80'10.
显示网络接口列表
# 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

使用netstat -ie显示某个接口的扩展信息(类似于ifconfig):
# 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

上一篇:perl删除目录
下一篇:lsof用法