netstat命令详解

一:简介

netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

二:netstat --help 命令

# netstat --help
usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [<Socket> ...]
       netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

        -r, --route              display routing table                        # 显示路由
        -I, --interfaces=<Iface> display interface table for <Iface>          # 显示网络界面信息
        -i, --interfaces         display interface table                      # 显示网络界面信息
-g, --groups display multicast group memberships # 显示多重广播功能群组组员名单 -s, --statistics display networking statistics (like SNMP) # 显示网络统计表 -M, --masquerade display masqueraded connections -v, --verbose be verbose # 显示指令执行过程 -W, --wide don't truncate IP addresses # 不能截断IP地址 -n, --numeric don't resolve names # 直接使用ip地址,而不通过域名服务器 --numeric-hosts don't resolve host names --numeric-ports don't resolve port names --numeric-users don't resolve user names -N, --symbolic resolve hardware names # 显示网络硬件外围设备的符号链接名称 -e, --extend display other/more information # 显示网络的其他相关信息 -p, --programs display PID/Program name for sockets # 显示正在使用socket的程序PID和程序名称 -o, --timers display timers # 显示计时器 -c, --continuous continuous listing # 持续显示网络状态 -l, --listening display listening server sockets # 显示监控中的服务器socket -a, --all display all sockets (default: connected) # 显示所有连接中的socket -F, --fib display Forwarding Information Base (default) # 显示FIB信息 -C, --cache display routing cache instead of FIB # 显示路由器的缓存信息来替代FIB信息
-Z, --context display SELinux security context for sockets <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet List of possible address families (which support routing): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25)

 

三:选项(上面help命令选项)

-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"参数相同。

 

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

四:输出信息含义

在centos命令行,执行netstat后,其输出结果为

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE

Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df


从整体上看,netstat的输出结果可以分为两个部分:

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

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

 

五:命令实例

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

  列出所有 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

  列出所有 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 *:*

  禁用反向域名解析,加快查询速度

默认情况下 netstat 会通过反向域名解析技术查找每个 IP 地址对应的主机名。这会降低查找速度。如果你觉得 IP 地址已经足够,而没有必要知道主机名,就使用 -n 选项禁用域名解析功能

# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 192.168.1.2:49058       *.*.*.5:80        ESTABLISHED
tcp        0      0 192.168.1.2:33324       *.*.*.117:443      ESTABLISHED
tcp6       0      0 ::1:631                 :::*                    LISTEN

 

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

  只显示监听端口 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 *:*

  Active UNIX domain sockets (only servers)
  Proto RefCnt Flags Type State I-Node Path
  unix 2 [ ACC ] STREAM LISTENING 9472 /run/systemd/private
  unix 2 [ ACC ] SEQPACKET LISTENING 9524 /run/udev/control
  unix 2 [ ACC ] STREAM LISTENING 9537 /run/lvm/lvmpolld.socket
  unix 2 [ ACC ] STREAM LISTENING 9540 /run/lvm/lvmetad.socket
  unix 2 [ ACC ] STREAM LISTENING 6807 /run/systemd/journal/stdout
  unix 2 [ ACC ] STREAM LISTENING 11162 /var/run/dbus/system_bus_socket
  unix 2 [ ACC ] STREAM LISTENING 11958 /var/run/acpid.socket
  unix 2 [ ACC ] STREAM LISTENING 11467 /var/run/lsm/ipc/sim
  unix 2 [ ACC ] STREAM LISTENING 11469 /var/run/lsm/ipc/simc
  unix 2 [ ACC ] STREAM LISTENING 31743620 /var/lib/mysql/mysql.sock

 任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来。使用 -l 选项列出正在监听的套接字

现在我们可以看到处于监听状态的 TCP 端口和连接。如果你查看所有监听端口,去掉 -t 选项。如果你只想查看 UDP 端口,使用 -u 选项,代替 -t 选项。

注意:不要使用 -a 选项,否则 netstat 会列出所有连接,而不仅仅是监听端口

# netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address    State
tcp   0      0      127.0.0.1:9000  0.0.0.0:*          LISTEN
tcp   0      0      127.0.0.1:6379  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:22      0.0.0.0:*          LISTEN
tcp6  0      0      :::3306         :::*               LISTEN
tcp6  0      0      :::22           :::*               LISTEN

 

只列出所有监听 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

  只列出所有监听 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 *:*

  只列出所有监听 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


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.
.....

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

# netstat -st 
# netstat -su
 

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

netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。

使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。

# 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
 
  

相比进程名和进程号而言,查看进程的拥有者会更有用。使用 -ep 选项可以同时查看进程名和用户名。

# netstat -ltpe
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
tcp        0      0 localhost:cslistener    0.0.0.0:*               LISTEN      root       28774494   11886/php-fpm: mast 
tcp        0      0 localhost:6379          0.0.0.0:*               LISTEN      root       5368096    31546/redis-s 
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      root       28255272   16701/nginx: master 
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      root       12459      468/sshd            
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN      mysql      31743619   9672/mysqld         
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      root       12468      468/sshd

 

5. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)

当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

同样可以加速输出,因为不用进行比对查询。

# netstat -an

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

# netsat -a --numeric-ports
# netsat -a --numeric-hosts
# netsat -a --numeric-users
 

6. 持续输出 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 aaa.ama:www ESTABLISHED
tcp 1 1 ramesh-laptop.loc:52564 *.*.169.230:www CLOSING
tcp 0 0 ramesh-laptop.loc:43758 server-43-2:www ESTABLISHED
 

7. 显示系统不支持的地址族 (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 显示数字格式,不查询主机名称。

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.*.0.1      0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
172.*.0.0      0.0.0.0         255.255.240.0   U         0 0          0 eth0

 

9. 找出程序运行的端口

并不是所有的进程都能找到,没有权限的会不显示,使用 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'
 打印链接状态

active 状态的套接字连接用 "ESTABLISHED" 字段表示,所以我们可以使用 grep 命令获得 active 状态的连接

# netstat -atnp | grep ESTA
tcp        0     52 172.*.*.15:22          *.*.105.255:49938   ESTABLISHED 14370/sshd: root@pt 
tcp        0      0 172.*.*.15:22          *.*.105.255:47108   ESTABLISHED 11384/sshd: centos  
tcp        0      0 172.*.*.*:22          *.*.*.43:55607      ESTABLISHED 15964/sshd: root [p 
tcp        0      0 172.*.*.*:39182       *.*.0.55:5574       ESTABLISHED 1851/YDService

 

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: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.*.*.* netmask 255.255.240.0 broadcast *.*.*.*
ether 52:*:*:*:*:* txqueuelen 1000 (Ethernet)
RX packets 33093066 bytes 4113720313 (3.8 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32928019 bytes 4414472855 (4.1 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1 (Local Loopback)
RX packets 4275400 bytes 1148810073 (1.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4275400 bytes 1148810073 (1.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

 
   

11. IP和TCP分析

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

# netstat -nat | grep "192.168.1.101:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
18 221.136.168.36
3 154.74.45.242
2 78.173.31.236
2 62.183.207.98
2 192.168.1.14
2 182.48.111.215
2 124.193.219.34
2 119.145.41.2
2 114.255.41.30
1 75.102.11.99

  TCP各种状态列表

# netstat -nat |awk '{print $6}'
established)
Foreign
LISTEN
TIME_WAIT
ESTABLISHED
TIME_WAIT
SYN_SENT
  先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
# netstat -nat |awk '{print $6}'|sort|uniq -c
143 ESTABLISHED
1 FIN_WAIT1
1 Foreign
1 LAST_ACK
36 LISTEN
6 SYN_SENT
113 TIME_WAIT
1 established)
  最后的命令如下:
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

12.查看php进程数

netstat -anpo | grep "php-cgi" | wc -l

 

13. 打印网络包的统计(netstat 可以打印出网络统计数据,包括某个协议下的收发包数量

# netstat -s
Ip:
    36811488 total packets received
    0 forwarded
    158 with unknown protocol
    0 incoming packets discarded
    36811318 incoming packets delivered
    36957933 requests sent out
    40 dropped because of missing route
Icmp:
    4137854 ICMP messages received
    15481 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 15848
        timeout in transit: 139
        source quenches: 1
        redirects: 2
        echo requests: 4121824
        echo replies: 15
        timestamp request: 25
    4148314 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 26465
        echo replies: 4121824
        timestamp replies: 25
IcmpMsg:
        InType0: 15
        InType3: 15848
        InType4: 1
        InType5: 2
        InType8: 4121824
        InType11: 139
        InType13: 25
        OutType0: 4121824
        OutType3: 26465
        OutType14: 25
Tcp:
    2078274 active connections openings
    408218 passive connection openings
    8831 failed connection attempts
    5683 connection resets received
    4 connections established
    28410463 segments received
    28806036 segments send out
    112716 segments retransmited
    2788 bad segments received.
    2882644 resets sent
    InCsumErrors: 2701
Udp:
    4156204 packets received
    27872 packets to unknown port received.
    61 packet receive errors
    4161787 packets sent
    0 receive buffer errors
    0 send buffer errors
    InCsumErrors: 61
UdpLite:
TcpExt:
    227685 invalid SYN cookies received
    8396 resets received for embryonic SYN_RECV sockets
    67 packets pruned from receive queue because of socket buffer overrun
    35788 TCP sockets finished time wait in fast timer
    109 packets rejects in established connections because of timestamp
    935149 delayed acks sent
    25 delayed acks further delayed because of locked socket
    Quick ack mode was activated 8903 times
... ... ... ... ...

 14.配合 watch 命令监控 active 状态链接

watch -d -n0 "netstat -atnp | grep ESTA"

它是一个动态变化的图

15.查看服务是否运行

如果你想看看 http,smtp 或 ntp 服务是否在运行,使用 grep。

查看http是否运行

# netstat -aple | grep http
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      root       28255272   16701/nginx: master

使用 grep 命令你可以查看 http 或 smtp 或其它任何你想查看的服务

 

参考:

          http://man.linuxde.net/netstat

         https://linux.cn/article-2434-1.html

          http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.html

转载于:https://www.cnblogs.com/jiujuan/p/9017541.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值